mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-20 23:28:06 +02:00
Let non-viewable Popup Annotations inherit the parent's Annotation Flags if the parent is viewable
Fixes http://www.pdf-archive.com/2013/09/30/file2/file2.pdf. Note how it's not possible to show the various Popup Annotations in the above document. To fix that, this patch lets the Popup inherit the flags of the parent, in the special case where the parent is `viewable` *and* the Popup is not. In general, I don't think that a Popup must have the same flags set as the parent. However, it seems very strange to have a `viewable` parent annotation, and then not being able to view the Popup. Annoyingly the PDF specification doesn't, as far as I can find, mention anything about how this case should be handled, but this patch seem consistent with the actual behaviour in Adobe Reader.
This commit is contained in:
parent
47b929be26
commit
98fe094d18
5 changed files with 91 additions and 30 deletions
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
|
@ -99,6 +99,7 @@
|
|||
!pr4922.pdf
|
||||
!pr6531_1.pdf
|
||||
!pr6531_2.pdf
|
||||
!pr7352.pdf
|
||||
!bug900822.pdf
|
||||
!issue918.pdf
|
||||
!issue1905.pdf
|
||||
|
|
BIN
test/pdfs/pr7352.pdf
Normal file
BIN
test/pdfs/pr7352.pdf
Normal file
Binary file not shown.
|
@ -1838,6 +1838,14 @@
|
|||
"type": "eq",
|
||||
"annotations": true
|
||||
},
|
||||
{ "id": "pr7352",
|
||||
"file": "pdfs/pr7352.pdf",
|
||||
"md5": "336abca4b313cb215b0569883f1f683d",
|
||||
"link": false,
|
||||
"rounds": 1,
|
||||
"type": "eq",
|
||||
"annotations": true
|
||||
},
|
||||
{ "id": "issue1002",
|
||||
"file": "pdfs/issue1002.pdf",
|
||||
"md5": "af62d6cd95079322d4af18edd960d15c",
|
||||
|
|
|
@ -15,6 +15,17 @@ describe('Annotation layer', function() {
|
|||
}
|
||||
};
|
||||
|
||||
var annotationFactory;
|
||||
|
||||
beforeAll(function (done) {
|
||||
annotationFactory = new AnnotationFactory();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(function () {
|
||||
annotationFactory = null;
|
||||
});
|
||||
|
||||
describe('Annotation', function() {
|
||||
it('should set and get flags', function() {
|
||||
var dict = new Dict();
|
||||
|
@ -185,17 +196,6 @@ describe('Annotation layer', function() {
|
|||
});
|
||||
|
||||
describe('LinkAnnotation', function() {
|
||||
var annotationFactory;
|
||||
|
||||
beforeAll(function (done) {
|
||||
annotationFactory = new AnnotationFactory();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(function () {
|
||||
annotationFactory = null;
|
||||
});
|
||||
|
||||
it('should correctly parse a URI action', function() {
|
||||
var actionDict = new Dict();
|
||||
actionDict.set('Type', Name.get('Action'));
|
||||
|
@ -358,4 +358,32 @@ describe('Annotation layer', function() {
|
|||
expect(annotation.file.content).toEqual(stringToBytes('Test attachment'));
|
||||
});
|
||||
});
|
||||
|
||||
describe('PopupAnnotation', function() {
|
||||
it('should inherit the parent flags when the Popup is not viewable, ' +
|
||||
'but the parent is (PR 7352)', function () {
|
||||
var parentDict = new Dict();
|
||||
parentDict.set('Type', Name.get('Annot'));
|
||||
parentDict.set('Subtype', Name.get('Text'));
|
||||
parentDict.set('F', 28); // viewable
|
||||
|
||||
var popupDict = new Dict();
|
||||
popupDict.set('Type', Name.get('Annot'));
|
||||
popupDict.set('Subtype', Name.get('Popup'));
|
||||
popupDict.set('F', 25); // not viewable
|
||||
popupDict.set('Parent', parentDict);
|
||||
|
||||
var xrefMock = new XrefMock([popupDict]);
|
||||
var popupRef = new Ref(13, 0);
|
||||
|
||||
var popupAnnotation = annotationFactory.create(xrefMock, popupRef);
|
||||
var data = popupAnnotation.data;
|
||||
expect(data.annotationType).toEqual(AnnotationType.POPUP);
|
||||
|
||||
// Should not modify the `annotationFlags` returned e.g. through the API.
|
||||
expect(data.annotationFlags).toEqual(25);
|
||||
// The Popup should inherit the `viewable` property of the parent.
|
||||
expect(popupAnnotation.viewable).toEqual(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue