mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-26 10:08:06 +02:00
Merge pull request #2945 from mduan/annotation
Add support for appearance streams in annotations
This commit is contained in:
commit
5839fef84c
6 changed files with 218 additions and 5 deletions
|
@ -19,7 +19,7 @@
|
|||
IDENTITY_MATRIX, info, isArray, isCmd, isDict, isEOF, isName, isNum,
|
||||
isStream, isString, JpegStream, Lexer, Metrics, Name, Parser,
|
||||
Pattern, PDFImage, PDFJS, serifFonts, stdFontMap, symbolsFonts,
|
||||
TilingPattern, TODO, warn */
|
||||
TilingPattern, TODO, warn, Util */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -596,6 +596,73 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||
return queue;
|
||||
},
|
||||
|
||||
getAnnotationsOperatorList:
|
||||
function PartialEvaluator_getAnnotationsOperatorList(annotations,
|
||||
dependency) {
|
||||
// 12.5.5: Algorithm: Appearance streams
|
||||
function getTransformMatrix(rect, bbox, matrix) {
|
||||
var bounds = Util.getAxialAlignedBoundingBox(bbox, matrix);
|
||||
var minX = bounds[0];
|
||||
var minY = bounds[1];
|
||||
var maxX = bounds[2];
|
||||
var maxY = bounds[3];
|
||||
var width = rect[2] - rect[0];
|
||||
var height = rect[3] - rect[1];
|
||||
var xRatio = width / (maxX - minX);
|
||||
var yRatio = height / (maxY - minY);
|
||||
return [
|
||||
xRatio,
|
||||
0,
|
||||
0,
|
||||
yRatio,
|
||||
rect[0] - minX * xRatio,
|
||||
rect[1] - minY * yRatio
|
||||
];
|
||||
}
|
||||
|
||||
var fnArray = [];
|
||||
var argsArray = [];
|
||||
// deal with annotations
|
||||
for (var i = 0, length = annotations.length; i < length; ++i) {
|
||||
var annotation = annotations[i];
|
||||
|
||||
// check whether we can visualize annotation
|
||||
if (!annotation ||
|
||||
!annotation.annotationFlags ||
|
||||
(annotation.annotationFlags & 0x0022) || // Hidden or NoView
|
||||
!annotation.rect || // rectangle is nessessary
|
||||
!annotation.appearance) { // appearance is nessessary
|
||||
continue;
|
||||
}
|
||||
|
||||
// apply rectangle
|
||||
var rect = annotation.rect;
|
||||
var bbox = annotation.bbox;
|
||||
var matrix = annotation.matrix;
|
||||
var transform = getTransformMatrix(rect, bbox, matrix);
|
||||
var border = annotation.border;
|
||||
|
||||
fnArray.push('beginAnnotation');
|
||||
argsArray.push([rect, transform, matrix, border]);
|
||||
|
||||
if (annotation.appearance) {
|
||||
var list = this.getOperatorList(annotation.appearance,
|
||||
annotation.resources, dependency);
|
||||
|
||||
Util.concatenateToArray(fnArray, list.fnArray);
|
||||
Util.concatenateToArray(argsArray, list.argsArray);
|
||||
}
|
||||
|
||||
fnArray.push('endAnnotation');
|
||||
argsArray.push([]);
|
||||
}
|
||||
|
||||
return {
|
||||
fnArray: fnArray,
|
||||
argsArray: argsArray
|
||||
};
|
||||
},
|
||||
|
||||
optimizeQueue: function PartialEvaluator_optimizeQueue(queue) {
|
||||
var fnArray = queue.fnArray, argsArray = queue.argsArray;
|
||||
// grouping paintInlineImageXObject's into paintInlineImageXObjectGroup
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue