1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-26 10:08:06 +02:00

Support rendering appearance streams for annotations

This commit is contained in:
Mack Duan 2013-03-13 12:24:55 -07:00
parent 772c7894fb
commit 79831d7ec5
6 changed files with 218 additions and 5 deletions

View file

@ -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';
@ -588,6 +588,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