[XFA] Add alt text for images. (bug 1723418)

Not many XFA PDFs have alt text.

Some examples:
bug1723422.pdf
xfa_bug1718670_1.pdf
xfa_issue13611.pdf
xfa_issue13633.pdf
xfa_issue13634.pdf
This commit is contained in:
Brendan Dahl 2021-08-03 15:55:13 -07:00
parent 6cf1ee3251
commit 3e003245b1
2 changed files with 41 additions and 0 deletions

View File

@ -3312,12 +3312,14 @@ class Image extends StringObject {
};
break;
}
const parent = this[$getParent]();
return HTMLResult.success({
name: "img",
attributes: {
class: ["xfaImage"],
style,
src: URL.createObjectURL(blob),
alt: parent ? ariaLabel(parent[$getParent]()) : null,
},
});
}

View File

@ -13,6 +13,7 @@
* limitations under the License.
*/
import { isNodeJS } from "../../src/shared/is_node.js";
import { XFAFactory } from "../../src/core/xfa/factory.js";
describe("XFAFactory", function () {
@ -138,6 +139,44 @@ describe("XFAFactory", function () {
);
});
it("should have an alt attribute from toolTip", function () {
if (isNodeJS) {
pending("Image is not supported in Node.js.");
}
const xml = `
<?xml version="1.0"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
<template xmlns="http://www.xfa.org/schema/xfa-template/3.3">
<subform name="root" mergeMode="matchTemplate">
<pageSet>
<pageArea>
<contentArea x="0pt" w="456pt" h="789pt"/>
<draw name="BA-Logo" y="5.928mm" x="128.388mm" w="71.237mm" h="9.528mm">
<value>
<image contentType="image/png">iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=</image>
</value>
<assist><toolTip>alt text</toolTip></assist>
</draw>
</pageArea>
</pageSet>
</subform>
</template>
<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
</xfa:data>
</xfa:datasets>
</xdp:xdp>
`;
const factory = new XFAFactory({ "xdp:xdp": xml });
expect(factory.numberPages).toEqual(1);
const pages = factory.getPages();
const field = searchHtmlNode(pages, "name", "img");
expect(field.attributes.alt).toEqual("alt text");
});
it("should have a maxLength property", function () {
const xml = `
<?xml version="1.0"?>