Correctly order added annotations when saving or printing

- the annotations must be rendered in the same order as the chronological one.
- fix a bug in document.js which avoids to read a saved pdf correctly in Acrobat:
  there is no need to reset the xref state: it's done in worker.js once everything
  has been saved.
This commit is contained in:
Calixte Denizet 2022-06-23 16:27:03 +02:00
parent c5dc082da4
commit e49d039853
3 changed files with 7 additions and 24 deletions

View File

@ -245,9 +245,9 @@ class AnnotationFactory {
static async saveNewAnnotations(evaluator, task, annotations) { static async saveNewAnnotations(evaluator, task, annotations) {
const xref = evaluator.xref; const xref = evaluator.xref;
let baseFontRef; let baseFontRef;
const results = [];
const dependencies = []; const dependencies = [];
const promises = []; const promises = [];
for (const annotation of annotations) { for (const annotation of annotations) {
switch (annotation.annotationType) { switch (annotation.annotationType) {
case AnnotationEditorType.FREETEXT: case AnnotationEditorType.FREETEXT:
@ -266,7 +266,6 @@ class AnnotationFactory {
FreeTextAnnotation.createNewAnnotation( FreeTextAnnotation.createNewAnnotation(
xref, xref,
annotation, annotation,
results,
dependencies, dependencies,
{ evaluator, task, baseFontRef } { evaluator, task, baseFontRef }
) )
@ -274,20 +273,13 @@ class AnnotationFactory {
break; break;
case AnnotationEditorType.INK: case AnnotationEditorType.INK:
promises.push( promises.push(
InkAnnotation.createNewAnnotation( InkAnnotation.createNewAnnotation(xref, annotation, dependencies)
xref,
annotation,
results,
dependencies
)
); );
} }
} }
await Promise.all(promises);
return { return {
annotations: results, annotations: await Promise.all(promises),
dependencies, dependencies,
}; };
} }
@ -1360,13 +1352,7 @@ class MarkupAnnotation extends Annotation {
this._streams.push(this.appearance, appearanceStream); this._streams.push(this.appearance, appearanceStream);
} }
static async createNewAnnotation( static async createNewAnnotation(xref, annotation, dependencies, params) {
xref,
annotation,
results,
dependencies,
params
) {
const annotationRef = xref.getNewRef(); const annotationRef = xref.getNewRef();
const apRef = xref.getNewRef(); const apRef = xref.getNewRef();
const annotationDict = this.createNewDict(annotation, xref, { apRef }); const annotationDict = this.createNewDict(annotation, xref, { apRef });
@ -1385,7 +1371,7 @@ class MarkupAnnotation extends Annotation {
: null; : null;
writeObject(annotationRef, annotationDict, buffer, transform); writeObject(annotationRef, annotationDict, buffer, transform);
results.push({ ref: annotationRef, data: buffer.join("") }); return { ref: annotationRef, data: buffer.join("") };
} }
static async createNewPrintAnnotation(xref, annotation, params) { static async createNewPrintAnnotation(xref, annotation, params) {

View File

@ -314,7 +314,6 @@ class Page {
...newData.annotations ...newData.annotations
); );
this.xref.resetNewRef();
return objects; return objects;
} }

View File

@ -6638,8 +6638,7 @@
"fontSize": 10, "fontSize": 10,
"value": "Hello World", "value": "Hello World",
"pageIndex": 0, "pageIndex": 0,
"rect": [67.5, 543, 119, 556.5], "rect": [67.5, 543, 119, 556.5]
"orderIndex": 0
}, },
"pdfjs_internal_editor_1": { "pdfjs_internal_editor_1": {
"annotationType": 15, "annotationType": 15,
@ -6662,8 +6661,7 @@
] ]
}], }],
"pageIndex": 0, "pageIndex": 0,
"rect": [71.5, 534.5, 115, 562], "rect": [71.5, 534.5, 115, 562]
"orderIndex": 1
} }
} }
} }