|
@@ -20,8 +20,8 @@ if (typeof PDFJS === 'undefined') {
|
|
|
(typeof window !== 'undefined' ? window : this).PDFJS = {};
|
|
|
}
|
|
|
|
|
|
-PDFJS.version = '1.3.81';
|
|
|
-PDFJS.build = '7f34d40';
|
|
|
+PDFJS.version = '1.3.88';
|
|
|
+PDFJS.build = '1b5940e';
|
|
|
|
|
|
(function pdfjsWrapper() {
|
|
|
// Use strict in our context only - users might not want it
|
|
@@ -7135,10 +7135,9 @@ PDFJS.CustomStyle = CustomStyle;
|
|
|
|
|
|
var ANNOT_MIN_SIZE = 10; // px
|
|
|
|
|
|
-var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
+var AnnotationLayer = (function AnnotationLayerClosure() {
|
|
|
// TODO(mack): This dupes some of the logic in CanvasGraphics.setFont()
|
|
|
function setTextStyles(element, item, fontObj) {
|
|
|
-
|
|
|
var style = element.style;
|
|
|
style.fontSize = item.fontSize + 'px';
|
|
|
style.direction = item.fontDirection < 0 ? 'rtl': 'ltr';
|
|
@@ -7159,34 +7158,43 @@ var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
style.fontFamily = fontFamily + fallbackName;
|
|
|
}
|
|
|
|
|
|
- function initContainer(item) {
|
|
|
+ function getContainer(data, page, viewport) {
|
|
|
var container = document.createElement('section');
|
|
|
- var cstyle = container.style;
|
|
|
- var width = item.rect[2] - item.rect[0];
|
|
|
- var height = item.rect[3] - item.rect[1];
|
|
|
+ var width = data.rect[2] - data.rect[0];
|
|
|
+ var height = data.rect[3] - data.rect[1];
|
|
|
|
|
|
- // Border
|
|
|
- if (item.borderStyle.width > 0) {
|
|
|
- // Border width
|
|
|
- container.style.borderWidth = item.borderStyle.width + 'px';
|
|
|
- if (item.borderStyle.style !== AnnotationBorderStyleType.UNDERLINE) {
|
|
|
+ container.setAttribute('data-annotation-id', data.id);
|
|
|
+
|
|
|
+ data.rect = Util.normalizeRect([
|
|
|
+ data.rect[0],
|
|
|
+ page.view[3] - data.rect[1] + page.view[1],
|
|
|
+ data.rect[2],
|
|
|
+ page.view[3] - data.rect[3] + page.view[1]
|
|
|
+ ]);
|
|
|
+
|
|
|
+ CustomStyle.setProp('transform', container,
|
|
|
+ 'matrix(' + viewport.transform.join(',') + ')');
|
|
|
+ CustomStyle.setProp('transformOrigin', container,
|
|
|
+ -data.rect[0] + 'px ' + -data.rect[1] + 'px');
|
|
|
+
|
|
|
+ if (data.borderStyle.width > 0) {
|
|
|
+ container.style.borderWidth = data.borderStyle.width + 'px';
|
|
|
+ if (data.borderStyle.style !== AnnotationBorderStyleType.UNDERLINE) {
|
|
|
// Underline styles only have a bottom border, so we do not need
|
|
|
// to adjust for all borders. This yields a similar result as
|
|
|
// Adobe Acrobat/Reader.
|
|
|
- width = width - 2 * item.borderStyle.width;
|
|
|
- height = height - 2 * item.borderStyle.width;
|
|
|
+ width = width - 2 * data.borderStyle.width;
|
|
|
+ height = height - 2 * data.borderStyle.width;
|
|
|
}
|
|
|
|
|
|
- // Horizontal and vertical border radius
|
|
|
- var horizontalRadius = item.borderStyle.horizontalCornerRadius;
|
|
|
- var verticalRadius = item.borderStyle.verticalCornerRadius;
|
|
|
+ var horizontalRadius = data.borderStyle.horizontalCornerRadius;
|
|
|
+ var verticalRadius = data.borderStyle.verticalCornerRadius;
|
|
|
if (horizontalRadius > 0 || verticalRadius > 0) {
|
|
|
var radius = horizontalRadius + 'px / ' + verticalRadius + 'px';
|
|
|
CustomStyle.setProp('borderRadius', container, radius);
|
|
|
}
|
|
|
|
|
|
- // Border style
|
|
|
- switch (item.borderStyle.style) {
|
|
|
+ switch (data.borderStyle.style) {
|
|
|
case AnnotationBorderStyleType.SOLID:
|
|
|
container.style.borderStyle = 'solid';
|
|
|
break;
|
|
@@ -7211,24 +7219,27 @@ var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- // Border color
|
|
|
- if (item.color) {
|
|
|
+ if (data.color) {
|
|
|
container.style.borderColor =
|
|
|
- Util.makeCssRgb(item.color[0] | 0,
|
|
|
- item.color[1] | 0,
|
|
|
- item.color[2] | 0);
|
|
|
+ Util.makeCssRgb(data.color[0] | 0,
|
|
|
+ data.color[1] | 0,
|
|
|
+ data.color[2] | 0);
|
|
|
} else {
|
|
|
// Transparent (invisible) border, so do not draw it at all.
|
|
|
container.style.borderWidth = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- cstyle.width = width + 'px';
|
|
|
- cstyle.height = height + 'px';
|
|
|
+ container.style.left = data.rect[0] + 'px';
|
|
|
+ container.style.top = data.rect[1] + 'px';
|
|
|
+
|
|
|
+ container.style.width = width + 'px';
|
|
|
+ container.style.height = height + 'px';
|
|
|
+
|
|
|
return container;
|
|
|
}
|
|
|
|
|
|
- function getHtmlElementForTextWidgetAnnotation(item, commonObjs) {
|
|
|
+ function getHtmlElementForTextWidgetAnnotation(item, page) {
|
|
|
var element = document.createElement('div');
|
|
|
var width = item.rect[2] - item.rect[0];
|
|
|
var height = item.rect[3] - item.rect[1];
|
|
@@ -7244,7 +7255,7 @@ var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
content.style.display = 'table-cell';
|
|
|
|
|
|
var fontObj = item.fontRefName ?
|
|
|
- commonObjs.getData(item.fontRefName) : null;
|
|
|
+ page.commonObjs.getData(item.fontRefName) : null;
|
|
|
setTextStyles(content, item, fontObj);
|
|
|
|
|
|
element.appendChild(content);
|
|
@@ -7252,7 +7263,7 @@ var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
return element;
|
|
|
}
|
|
|
|
|
|
- function getHtmlElementForTextAnnotation(item) {
|
|
|
+ function getHtmlElementForTextAnnotation(item, page, viewport) {
|
|
|
var rect = item.rect;
|
|
|
|
|
|
// sanity check because of OOo-generated PDFs
|
|
@@ -7263,7 +7274,7 @@ var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
rect[2] = rect[0] + (rect[3] - rect[1]); // make it square
|
|
|
}
|
|
|
|
|
|
- var container = initContainer(item);
|
|
|
+ var container = getContainer(item, page, viewport);
|
|
|
container.className = 'annotText';
|
|
|
|
|
|
var image = document.createElement('img');
|
|
@@ -7369,8 +7380,30 @@ var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
return container;
|
|
|
}
|
|
|
|
|
|
- function getHtmlElementForLinkAnnotation(item) {
|
|
|
- var container = initContainer(item);
|
|
|
+ function getHtmlElementForLinkAnnotation(item, page, viewport, linkService) {
|
|
|
+ function bindLink(link, dest) {
|
|
|
+ link.href = linkService.getDestinationHash(dest);
|
|
|
+ link.onclick = function annotationsLayerBuilderLinksOnclick() {
|
|
|
+ if (dest) {
|
|
|
+ linkService.navigateTo(dest);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+ if (dest) {
|
|
|
+ link.className = 'internalLink';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function bindNamedAction(link, action) {
|
|
|
+ link.href = linkService.getAnchorUrl('');
|
|
|
+ link.onclick = function annotationsLayerBuilderNamedActionOnClick() {
|
|
|
+ linkService.executeNamedAction(action);
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+ link.className = 'internalLink';
|
|
|
+ }
|
|
|
+
|
|
|
+ var container = getContainer(item, page, viewport);
|
|
|
container.className = 'annotLink';
|
|
|
|
|
|
var link = document.createElement('a');
|
|
@@ -7380,29 +7413,65 @@ var AnnotationUtils = (function AnnotationUtilsClosure() {
|
|
|
link.target = LinkTargetStringMap[PDFJS.externalLinkTarget];
|
|
|
}
|
|
|
|
|
|
+ if (!item.url) {
|
|
|
+ if (item.action) {
|
|
|
+ bindNamedAction(link, item.action);
|
|
|
+ } else {
|
|
|
+ bindLink(link, ('dest' in item) ? item.dest : null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
container.appendChild(link);
|
|
|
|
|
|
return container;
|
|
|
}
|
|
|
|
|
|
- function getHtmlElement(data, objs) {
|
|
|
+ function getHtmlElement(data, page, viewport, linkService) {
|
|
|
switch (data.annotationType) {
|
|
|
case AnnotationType.WIDGET:
|
|
|
- return getHtmlElementForTextWidgetAnnotation(data, objs);
|
|
|
+ return getHtmlElementForTextWidgetAnnotation(data, page);
|
|
|
case AnnotationType.TEXT:
|
|
|
- return getHtmlElementForTextAnnotation(data);
|
|
|
+ return getHtmlElementForTextAnnotation(data, page, viewport);
|
|
|
case AnnotationType.LINK:
|
|
|
- return getHtmlElementForLinkAnnotation(data);
|
|
|
+ return getHtmlElementForLinkAnnotation(data, page, viewport,
|
|
|
+ linkService);
|
|
|
default:
|
|
|
throw new Error('Unsupported annotationType: ' + data.annotationType);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ function render(viewport, div, annotations, page, linkService) {
|
|
|
+ for (var i = 0, ii = annotations.length; i < ii; i++) {
|
|
|
+ var data = annotations[i];
|
|
|
+ if (!data || !data.hasHtml) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ var element = getHtmlElement(data, page, viewport, linkService);
|
|
|
+ div.appendChild(element);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function update(viewport, div, annotations) {
|
|
|
+ for (var i = 0, ii = annotations.length; i < ii; i++) {
|
|
|
+ var data = annotations[i];
|
|
|
+ var element = div.querySelector(
|
|
|
+ '[data-annotation-id="' + data.id + '"]');
|
|
|
+ if (element) {
|
|
|
+ CustomStyle.setProp('transform', element,
|
|
|
+ 'matrix(' + viewport.transform.join(',') + ')');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ div.removeAttribute('hidden');
|
|
|
+ }
|
|
|
+
|
|
|
return {
|
|
|
- getHtmlElement: getHtmlElement
|
|
|
+ render: render,
|
|
|
+ update: update
|
|
|
};
|
|
|
})();
|
|
|
-PDFJS.AnnotationUtils = AnnotationUtils;
|
|
|
+
|
|
|
+PDFJS.AnnotationLayer = AnnotationLayer;
|
|
|
|
|
|
|
|
|
/**
|