Wie füge ich mit PDFBox alternativen Text zum Bild in PDF hinzu?
Posted: 04 Mar 2025, 09:05
Ich versuche, mein PDF zu machen, das von der PDFBox -Java -Bibliothek zugänglich ist, und dies erfordert das Markieren der eingebetteten Bilder in der Datei, damit sie von einem Bildschirmleser gelesen werden kann. Über den PDF -Barrierefreiheitsprüfer vom PAC zeigt es immer noch, dass das QR -Code -Image nicht getagelt ist. Wie kann ich den alternativen Text dem QR -Code -Bild korrekt debuggen/hinzufügen? Vielen Dank!
Code: Select all
for (int pageidx = 0; pageidx < totalPage; pageidx++) {
PDPageContentStream contentstream = new PDPageContentStream(
doc, doc.getPage(pageidx), PDPageContentStream.AppendMode.APPEND, true);
PDPage page = doc.getPage(pageidx);
COSDictionary dict = new COSDictionary();
dict.setInt(COSName.MCID, mcid);
mcid++;
contentstream.beginMarkedContent(
COSName.IMAGE, PDPropertyList.create(dict));
contentstream.drawImage(image, x, y, px, py);
contentstream.endMarkedContent();
contentstream.close();
PDStructureTreeRoot root = new PDStructureTreeRoot();
doc.getDocumentCatalog().setStructureTreeRoot(root);
PDStructureElement parent =
new PDStructureElement(StandardStructureTypes.Figure, root);
root.appendKid(parent);
PDStructureElement element =
new PDStructureElement(StandardStructureTypes.Figure, parent);
element.setPage(doc.getPage(pageIndex));
element.setAlternateDescription("alternate");
dict.setString(COSName.ALT, "alternate");
PDMarkedContent marked = new PDMarkedContent(COSName.IMAGE, dict);
marked.addXObject(image);
element.appendKid(marked);
}
< /code>
Hier ist mein aktualisierter Code mit einigen angegebenen Referenzen, aber ich bin immer noch auf dasselbe Problem, aber nicht sicher, warum. Jeder Rat wäre wieder sehr geschätzt < /p>
PDDocument doc = PDDocument.load(pdf);
PDDocumentCatalog catalog = doc.getDocumentCatalog();
catalog.setLanguage("en-US");
PDStructureTreeRoot root = new PDStructureTreeRoot();
catalog.setStructureTreeRoot(root);
COSDictionary parentTreeDict = new COSDictionary();
PDNumberTreeNode parentTree = new PDNumberTreeNode(parentTreeDict, parentTreeDict.getClass());
root.setParentTree(parentTree);
Map parentTreeMap = new HashMap();
PDImageXObject pdImageXObject = PDImageXObject.createFromByteArray(doc,image,"test");
for(int pageIndex = 0; pageIndex < totalPage; pageIndex++) {
PDPage page = doc.getPage(pageIndex);
PDPageContentStream pdPageContentStream = new PDPageContentStream(doc,page,PDPageContentStream.AppendMode.APPEND,true);
PDRectangle pdRectangle = doc.getPage(pageIndex).getCropBox();
page.setStructParents(pageIndex);
PDStructureElement elem = new PDStructureElement(StandardStructureTypes.Figure, root);
elem.setAlternateDescription("alternate description");
elem.setPage(page);
parentTreeMap.put(pageIndex, elem);
root.appendKid(elem);
PDMarkedContentReference mcr = new PDMarkedContentReference();
mcr.setMCID(pageIndex);
elem.appendKid(mcr);
COSDictionary mcDict = new COSDictionary();
mcDict.setInt(COSName.MCID, pageIndex);
pdPageContentStream.beginMarkedContent(COSName.ARTIFACT, PDPropertyList.create(mcDict));
pdPageContentStream.drawImage(pdImageXObject, a,b,c,d);
pdPageContentStream.endMarkedContent();
pdPageContentStream.close();
COSArray ar = new COSArray();
ar.add(elem);
parentTreeMap.put(pageIndex, ar);
root.setParentTreeNextKey(pageIndex + 1);
}
parentTree.setNumbers(parentTreeMap);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
doc.save(stream);
doc.close();
return stream;