diff --git a/src/core/editor/pdf_editor.js b/src/core/editor/pdf_editor.js index f07ddc7141567..2cb0012773605 100644 --- a/src/core/editor/pdf_editor.js +++ b/src/core/editor/pdf_editor.js @@ -1215,7 +1215,7 @@ class PDFEditor { if (!isName(annotationDict.get("Subtype"), "Link")) { if (isName(annotationDict.get("Subtype"), "Widget")) { hasSignatureAnnotations ||= isName( - annotationDict.get("FT"), + getInheritableProperty({ dict: annotationDict, key: "FT" }), "Sig" ); const parentRef = annotationDict.getRaw("Parent") || null; diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 2fd069643ca35..6b65a83c58d14 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -7762,6 +7762,33 @@ small scripts as well as for`); await loadingTask.destroy(); }); + it("preserves flags for inherited signature fields", async function () { + const pdfData = assemblePdf([ + "1 0 obj\n<< /Type /Catalog /Pages 2 0 R " + + "/AcroForm 6 0 R >>\nendobj\n", + "2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n", + "3 0 obj\n<< /Type /Page /Parent 2 0 R " + + "/MediaBox [0 0 100 100] /Annots [4 0 R] >>\nendobj\n", + "4 0 obj\n<< /Type /Annot /Subtype /Widget /Rect [0 0 20 10] " + + "/Parent 5 0 R >>\nendobj\n", + "5 0 obj\n<< /FT /Sig /T (signature) /Kids [4 0 R] >>\nendobj\n", + "6 0 obj\n<< /Fields [5 0 R] /SigFlags 3 >>\nendobj\n", + ]); + + let loadingTask = getDocument({ data: pdfData }); + let pdfDoc = await loadingTask.promise; + const data = await pdfDoc.extractPages([{ document: null }]); + expect(countMarker(data, "/SigFlags ")).toEqual(1); + await loadingTask.destroy(); + + loadingTask = getDocument({ data }); + pdfDoc = await loadingTask.promise; + expect(Object.keys(await pdfDoc.getFieldObjects())).toEqual([ + "signature", + ]); + await loadingTask.destroy(); + }); + it("extract page 2 and check AcroForm Fields T entries", async function () { let loadingTask = getDocument( buildGetDocumentParams("form_two_pages.pdf")