1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 06:38:07 +02:00

Skip LinkAnnotations when collecting field objects (issue 19281)

The `/Root/AcroForm/Fields` array contains a "ridiculous" number of LinkAnnotations, which obviously makes no sense since those are not form fields.
To improve performance we'll thus ignore those when collecting the field objects.
This commit is contained in:
Jonas Jenwald 2025-01-04 11:20:50 +01:00
parent 5905eb1253
commit 6f062abb76
4 changed files with 37 additions and 3 deletions

View file

@ -20,6 +20,7 @@ import {
info,
InvalidPDFException,
isArrayEqual,
objectSize,
PageActionEventType,
RenderingIntentFlag,
shadow,
@ -1775,6 +1776,13 @@ class PDFDocument {
if (!(field instanceof Dict)) {
return;
}
let subtype = await field.getAsync("Subtype");
subtype = subtype instanceof Name ? subtype.name : null;
// Skip unrelated annotation types (see issue 19281).
switch (subtype) {
case "Link":
return;
}
if (field.has("T")) {
const partName = stringToPDFString(await field.getAsync("T"));
name = name === "" ? partName : `${name}.${partName}`;
@ -1890,9 +1898,12 @@ class PDFDocument {
})
);
}
await Promise.all(allPromises);
return { allFields, orphanFields };
return {
allFields: objectSize(allFields) > 0 ? allFields : null,
orphanFields,
};
});
return shadow(this, "fieldObjects", promise);
@ -1915,7 +1926,7 @@ class PDFDocument {
if (catalogJsActions) {
return true;
}
if (fieldObjects) {
if (fieldObjects?.allFields) {
return Object.values(fieldObjects.allFields).some(fieldObject =>
fieldObject.some(object => object.actions !== null)
);

View file

@ -0,0 +1 @@
https://github.com/user-attachments/files/18304780/Antarctica-Grid.pdf

View file

@ -11239,5 +11239,13 @@
"link": true,
"disableFontFace": true,
"type": "eq"
},
{
"id": "issue19281",
"file": "pdfs/issue19281.pdf",
"md5": "c5db558965e4189cc6db2720cdaa3e55",
"rounds": 1,
"link": true,
"type": "other"
}
]

View file

@ -1713,6 +1713,20 @@ describe("api", function () {
await loadingTask.destroy();
});
it("gets fieldObjects and skipping LinkAnnotations", async function () {
if (isNodeJS) {
pending("Linked test-cases are not supported in Node.js.");
}
const loadingTask = getDocument(buildGetDocumentParams("issue19281.pdf"));
const pdfDoc = await loadingTask.promise;
const fieldObjects = await pdfDoc.getFieldObjects();
expect(fieldObjects).toEqual(null);
await loadingTask.destroy();
});
it("gets non-existent calculationOrder", async function () {
const calculationOrder = await pdfDocument.getCalculationOrderIds();
expect(calculationOrder).toEqual(null);