Don't replace Acroform dictionary if nothing has changed when saving (bug 1844572)

This commit is contained in:
Calixte Denizet 2023-07-20 17:05:52 +02:00
parent 1a69b6ad64
commit 33fdec1392
5 changed files with 38 additions and 3 deletions

View File

@ -544,6 +544,7 @@ class WorkerMessageHandler {
pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("acroForm"),
pdfManager.ensureCatalog("acroFormRef"), pdfManager.ensureCatalog("acroFormRef"),
pdfManager.ensureDoc("startXRef"), pdfManager.ensureDoc("startXRef"),
pdfManager.ensureDoc("linearization"),
]; ];
const newAnnotationsByPage = !isPureXfa const newAnnotationsByPage = !isPureXfa
@ -595,6 +596,7 @@ class WorkerMessageHandler {
acroForm, acroForm,
acroFormRef, acroFormRef,
startXRef, startXRef,
linearization,
...refs ...refs
]) { ]) {
let newRefs = []; let newRefs = [];
@ -656,7 +658,9 @@ class WorkerMessageHandler {
infoRef: xref.trailer.getRaw("Info") || null, infoRef: xref.trailer.getRaw("Info") || null,
info: infoObj, info: infoObj,
fileIds: xref.trailer.get("ID") || null, fileIds: xref.trailer.get("ID") || null,
startXRef: xref.lastXRefStreamPos ?? startXRef, startXRef: linearization
? startXRef
: xref.lastXRefStreamPos ?? startXRef,
filename, filename,
}; };
} }

View File

@ -231,7 +231,7 @@ async function updateAcroform({
warn("XFA - Cannot save it"); warn("XFA - Cannot save it");
} }
if (!needAppearances && (!hasXfa || !xfaDatasetsRef)) { if (!needAppearances && (!hasXfa || !xfaDatasetsRef || hasXfaDatasetsEntry)) {
return; return;
} }

View File

@ -33,6 +33,8 @@ import { BaseStream } from "./base_stream.js";
import { CipherTransformFactory } from "./crypto.js"; import { CipherTransformFactory } from "./crypto.js";
class XRef { class XRef {
#firstXRefStmPos = null;
constructor(stream, pdfManager) { constructor(stream, pdfManager) {
this.stream = stream; this.stream = stream;
this.pdfManager = pdfManager; this.pdfManager = pdfManager;
@ -705,6 +707,7 @@ class XRef {
// (possible infinite recursion) // (possible infinite recursion)
this._xrefStms.add(obj); this._xrefStms.add(obj);
this.startXRefQueue.push(obj); this.startXRefQueue.push(obj);
this.#firstXRefStmPos ??= obj;
} }
} else if (Number.isInteger(obj)) { } else if (Number.isInteger(obj)) {
// Parse in-stream XRef // Parse in-stream XRef
@ -754,7 +757,10 @@ class XRef {
} }
get lastXRefStreamPos() { get lastXRefStreamPos() {
return this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null; return (
this.#firstXRefStmPos ??
(this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null)
);
} }
getEntry(i) { getEntry(i) {

View File

@ -0,0 +1,2 @@
https://bugzilla.mozilla.org/attachment.cgi?id=9344818

View File

@ -8008,5 +8008,28 @@
"rotation": 0 "rotation": 0
} }
} }
},
{
"id": "bug1844572-save-print",
"file": "pdfs/bug1844572.pdf",
"md5": "22a96775e884131d59c05fa92e0a42f6",
"rounds": 1,
"type": "eq",
"link": true,
"save": true,
"print": true,
"annotationStorage": {
"pdfjs_internal_editor_0": {
"annotationType": 3,
"color": [0, 0, 0],
"fontSize": 10,
"value": "Hello World",
"pageIndex": 0,
"rect": [
115.80000000000001, 325.0679969482421, 171.3, 342.5679999999999
],
"rotation": 0
}
}
} }
] ]