Merge pull request #17374 from calixteman/bug1865341
[Editor] Avoid conflicts between new persistent refs and the ones created when saving (bug 1865341)
This commit is contained in:
commit
7f04ce4d22
@ -419,6 +419,10 @@ function getFontSubstitution(
|
||||
baseFontName,
|
||||
standardFontName
|
||||
) {
|
||||
if (baseFontName.startsWith("InvalidPDFjsFont_")) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// It's possible to have a font name with spaces, commas or dashes, hence we
|
||||
// just replace them by a dash.
|
||||
baseFontName = normalizeFontName(baseFontName);
|
||||
|
@ -44,6 +44,7 @@ class XRef {
|
||||
this._pendingRefs = new RefSet();
|
||||
this._newPersistentRefNum = null;
|
||||
this._newTemporaryRefNum = null;
|
||||
this._persistentRefsCache = null;
|
||||
}
|
||||
|
||||
getNewPersistentRef(obj) {
|
||||
@ -63,6 +64,19 @@ class XRef {
|
||||
// stream.
|
||||
if (this._newTemporaryRefNum === null) {
|
||||
this._newTemporaryRefNum = this.entries.length || 1;
|
||||
if (this._newPersistentRefNum) {
|
||||
this._persistentRefsCache = new Map();
|
||||
for (
|
||||
let i = this._newTemporaryRefNum;
|
||||
i < this._newPersistentRefNum;
|
||||
i++
|
||||
) {
|
||||
// We *temporarily* clear the cache, see `resetNewTemporaryRef` below,
|
||||
// to avoid any conflict with the refs created during saving.
|
||||
this._persistentRefsCache.set(i, this._cacheMap.get(i));
|
||||
this._cacheMap.delete(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Ref.get(this._newTemporaryRefNum++, 0);
|
||||
}
|
||||
@ -70,6 +84,12 @@ class XRef {
|
||||
resetNewTemporaryRef() {
|
||||
// Called once saving is finished.
|
||||
this._newTemporaryRefNum = null;
|
||||
if (this._persistentRefsCache) {
|
||||
for (const [num, obj] of this._persistentRefsCache) {
|
||||
this._cacheMap.set(num, obj);
|
||||
}
|
||||
}
|
||||
this._persistentRefsCache = null;
|
||||
}
|
||||
|
||||
setStartXRef(startXRef) {
|
||||
|
@ -656,6 +656,12 @@ class Driver {
|
||||
if (!task.annotationStorage) {
|
||||
throw new Error("Missing `annotationStorage` entry.");
|
||||
}
|
||||
if (task.loadAnnotations) {
|
||||
for (let num = 1; num <= doc.numPages; num++) {
|
||||
const page = await doc.getPage(num);
|
||||
await page.getAnnotations({ intent: "display" });
|
||||
}
|
||||
}
|
||||
doc.annotationStorage.setAll(task.annotationStorage);
|
||||
|
||||
const data = await doc.saveDocument();
|
||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -619,3 +619,4 @@
|
||||
!issue17069.pdf
|
||||
!issue17215.pdf
|
||||
!bug1863910.pdf
|
||||
!bug1865341.pdf
|
||||
|
BIN
test/pdfs/bug1865341.pdf
Executable file
BIN
test/pdfs/bug1865341.pdf
Executable file
Binary file not shown.
@ -8381,5 +8381,26 @@
|
||||
"link": true,
|
||||
"type": "eq",
|
||||
"annotations": true
|
||||
},
|
||||
{
|
||||
"id": "bug1865341",
|
||||
"file": "pdfs/bug1865341.pdf",
|
||||
"md5": "e241b6d1dc493df73e77e3eeabc71721",
|
||||
"rounds": 1,
|
||||
"type": "eq",
|
||||
"save": true,
|
||||
"print": true,
|
||||
"loadAnnotations": true,
|
||||
"annotationStorage": {
|
||||
"pdfjs_internal_editor_0": {
|
||||
"annotationType": 3,
|
||||
"color": [255, 0, 0],
|
||||
"fontSize": 10,
|
||||
"value": "Załącznik",
|
||||
"pageIndex": 0,
|
||||
"rect": [ 238, 629, 287, 649],
|
||||
"rotation": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
Loading…
x
Reference in New Issue
Block a user