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,
|
baseFontName,
|
||||||
standardFontName
|
standardFontName
|
||||||
) {
|
) {
|
||||||
|
if (baseFontName.startsWith("InvalidPDFjsFont_")) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// It's possible to have a font name with spaces, commas or dashes, hence we
|
// It's possible to have a font name with spaces, commas or dashes, hence we
|
||||||
// just replace them by a dash.
|
// just replace them by a dash.
|
||||||
baseFontName = normalizeFontName(baseFontName);
|
baseFontName = normalizeFontName(baseFontName);
|
||||||
|
@ -44,6 +44,7 @@ class XRef {
|
|||||||
this._pendingRefs = new RefSet();
|
this._pendingRefs = new RefSet();
|
||||||
this._newPersistentRefNum = null;
|
this._newPersistentRefNum = null;
|
||||||
this._newTemporaryRefNum = null;
|
this._newTemporaryRefNum = null;
|
||||||
|
this._persistentRefsCache = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
getNewPersistentRef(obj) {
|
getNewPersistentRef(obj) {
|
||||||
@ -63,6 +64,19 @@ class XRef {
|
|||||||
// stream.
|
// stream.
|
||||||
if (this._newTemporaryRefNum === null) {
|
if (this._newTemporaryRefNum === null) {
|
||||||
this._newTemporaryRefNum = this.entries.length || 1;
|
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);
|
return Ref.get(this._newTemporaryRefNum++, 0);
|
||||||
}
|
}
|
||||||
@ -70,6 +84,12 @@ class XRef {
|
|||||||
resetNewTemporaryRef() {
|
resetNewTemporaryRef() {
|
||||||
// Called once saving is finished.
|
// Called once saving is finished.
|
||||||
this._newTemporaryRefNum = null;
|
this._newTemporaryRefNum = null;
|
||||||
|
if (this._persistentRefsCache) {
|
||||||
|
for (const [num, obj] of this._persistentRefsCache) {
|
||||||
|
this._cacheMap.set(num, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._persistentRefsCache = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
setStartXRef(startXRef) {
|
setStartXRef(startXRef) {
|
||||||
|
@ -656,6 +656,12 @@ class Driver {
|
|||||||
if (!task.annotationStorage) {
|
if (!task.annotationStorage) {
|
||||||
throw new Error("Missing `annotationStorage` entry.");
|
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);
|
doc.annotationStorage.setAll(task.annotationStorage);
|
||||||
|
|
||||||
const data = await doc.saveDocument();
|
const data = await doc.saveDocument();
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -619,3 +619,4 @@
|
|||||||
!issue17069.pdf
|
!issue17069.pdf
|
||||||
!issue17215.pdf
|
!issue17215.pdf
|
||||||
!bug1863910.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,
|
"link": true,
|
||||||
"type": "eq",
|
"type": "eq",
|
||||||
"annotations": true
|
"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