Preserve indirect AcroForm resources

This commit is contained in:
Calixte Denizet 2026-07-13 11:22:45 +02:00
parent 028c02f539
commit f0bbfa6f9e
2 changed files with 29 additions and 1 deletions

View File

@ -2899,7 +2899,7 @@ class PDFEditor {
acroForm.set("SigFlags", this.acroFormSigFlags); acroForm.set("SigFlags", this.acroFormSigFlags);
} }
acroForm.setIfArray("CO", this.acroFormCalculationOrder); acroForm.setIfArray("CO", this.acroFormCalculationOrder);
acroForm.setIfDict("DR", this.acroFormDefaultResources); acroForm.setIfDefined("DR", this.acroFormDefaultResources);
if (this.acroFormDefaultAppearance) { if (this.acroFormDefaultAppearance) {
acroForm.set("DA", this.acroFormDefaultAppearance); acroForm.set("DA", this.acroFormDefaultAppearance);
} }

View File

@ -7629,6 +7629,34 @@ small scripts as well as for`);
await loadingTask.destroy(); await loadingTask.destroy();
}); });
it("preserves indirect AcroForm default resources", 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 /FT /Tx /T (field) " +
"/Rect [0 0 20 10] >>\nendobj\n",
"5 0 obj\n<< /Font << /Helv 7 0 R >> >>\nendobj\n",
"6 0 obj\n<< /Fields [4 0 R] /DR 5 0 R " +
"/DA (/Helv 10 Tf) >>\nendobj\n",
"7 0 obj\n<< /Type /Font /Subtype /Type1 " +
"/BaseFont /Helvetica >>\nendobj\n",
]);
let loadingTask = getDocument({ data: pdfData });
let pdfDoc = await loadingTask.promise;
const data = await pdfDoc.extractPages([{ document: null }]);
expect(countMarker(data, "/DR ")).toEqual(1);
await loadingTask.destroy();
loadingTask = getDocument({ data });
pdfDoc = await loadingTask.promise;
expect(Object.keys(await pdfDoc.getFieldObjects())).toEqual(["field"]);
await loadingTask.destroy();
});
it("extract page 2 and check AcroForm Fields T entries", async function () { it("extract page 2 and check AcroForm Fields T entries", async function () {
let loadingTask = getDocument( let loadingTask = getDocument(
buildGetDocumentParams("form_two_pages.pdf") buildGetDocumentParams("form_two_pages.pdf")