Merge pull request #17034 from calixteman/bug1855157

[Editor] Don't try to add data to the struct tree when there is no accessibilityData (bug 1855157)
This commit is contained in:
calixteman 2023-09-26 12:04:50 +02:00 committed by GitHub
commit 3f7060e777
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 76 additions and 1 deletions

View File

@ -313,11 +313,16 @@ class StructTreeRoot {
for (const [pageIndex, elements] of newAnnotationsByPage) { for (const [pageIndex, elements] of newAnnotationsByPage) {
const { ref: pageRef } = await pdfManager.getPage(pageIndex); const { ref: pageRef } = await pdfManager.getPage(pageIndex);
for (const { for (const {
accessibilityData: { type, title, lang, alt, expanded, actualText }, accessibilityData,
ref, ref,
parentTreeId, parentTreeId,
structTreeParent, structTreeParent,
} of elements) { } of elements) {
if (!accessibilityData?.type) {
continue;
}
const { type, title, lang, alt, expanded, actualText } =
accessibilityData;
nextKey = Math.max(nextKey, parentTreeId); nextKey = Math.max(nextKey, parentTreeId);
const tagRef = xref.getNewTemporaryRef(); const tagRef = xref.getNewTemporaryRef();

View File

@ -2405,6 +2405,76 @@ describe("api", function () {
await loadingTask.destroy(); await loadingTask.destroy();
}); });
it("write a text and a stamp annotation but no alt text (bug 1855157)", async function () {
if (isNodeJS) {
pending("Cannot create a bitmap from Node.js.");
}
const TEST_IMAGES_PATH = "../images/";
const filename = "firefox_logo.png";
const path = new URL(TEST_IMAGES_PATH + filename, window.location).href;
const response = await fetch(path);
const blob = await response.blob();
const bitmap = await createImageBitmap(blob);
let loadingTask = getDocument(buildGetDocumentParams("empty.pdf"));
let pdfDoc = await loadingTask.promise;
pdfDoc.annotationStorage.setValue("pdfjs_internal_editor_0", {
annotationType: AnnotationEditorType.STAMP,
rect: [128, 400, 148, 420],
rotation: 0,
bitmap,
bitmapId: "im1",
pageIndex: 0,
structTreeParentId: null,
accessibilityData: {
type: "Figure",
alt: "Hello World",
},
});
pdfDoc.annotationStorage.setValue("pdfjs_internal_editor_1", {
annotationType: AnnotationEditorType.FREETEXT,
color: [0, 0, 0],
fontSize: 10,
value: "Hello World",
pageIndex: 0,
rect: [
133.2444863336475, 653.5583423367227, 191.03166882427766,
673.363146394756,
],
rotation: 0,
structTreeParentId: null,
id: null,
});
const data = await pdfDoc.saveDocument();
await loadingTask.destroy();
loadingTask = getDocument(data);
pdfDoc = await loadingTask.promise;
const page = await pdfDoc.getPage(1);
const tree = await page.getStructTree();
expect(tree).toEqual({
children: [
{
role: "Figure",
children: [
{
type: "annotation",
id: "pdfjs_internal_id_18R",
},
],
alt: "Hello World",
},
],
role: "Root",
});
await loadingTask.destroy();
});
describe("Cross-origin", function () { describe("Cross-origin", function () {
let loadingTask; let loadingTask;
function _checkCanLoad(expectSuccess, filename, options) { function _checkCanLoad(expectSuccess, filename, options) {