Проблема, с которой я столкнулся, заключается в том, что программа проверки PAC постоянно помечает мой PDF-файл пометкой ошибка: «Тестовый объект не помечен». Это говорит о том, что необходимые теги могут отсутствовать или быть реализованы неправильно, но я не уверен, чего мне не хватает для решения этой проблемы.
Я позаботился:
Код: Выделить всё
Define document structure elements
Use the right tags in the PDF content generation code
Apply what I believe to be the correct metadata and settings for accessibility
Любая информация о том, где я могу ошибаться, или указатели на важные элементы разметки, которые следует проверить, буду очень признателен
. Ниже мой код.
Код: Выделить всё
public void newPdf() {
int mcidCounter = 0; // Starten bei 0
int structParentCounter = 0; // Starten bei 0
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
// Setzen des StructParents-Eintrags auf der Seite
page.setStructParents(structParentCounter); // structParentCounter ist 0
PDPageContentStream contentStream = new PDPageContentStream(document, page);
PDType0Font font = loadFont(FontEnum.BUNDES_SANS_WEB_REGULAR, document);
// Schriftart den Ressourcen der Seite hinzufügen
PDResources resources = page.getResources();
if (resources == null) {
resources = new PDResources();
page.setResources(resources);
}
resources.add(font);
PDDocumentCatalog catalog = document.getDocumentCatalog();
PDStructureTreeRoot structureTreeRoot = new PDStructureTreeRoot();
catalog.setStructureTreeRoot(structureTreeRoot);
catalog.setLanguage("de-DE"); // Setzt die Dokumentensprache auf Deutsch
PDMarkInfo markInfo = new PDMarkInfo();
markInfo.setMarked(true);
catalog.setMarkInfo(markInfo);
// Erstellen des Dokument-Strukturelements
PDStructureElement documentElement = new PDStructureElement(StandardStructureTypes.DOCUMENT, structureTreeRoot);
structureTreeRoot.appendKid(documentElement);
// Erstellen des Absatz-Strukturelements
PDStructureElement paragraphElement = new PDStructureElement(StandardStructureTypes.P, documentElement);
paragraphElement.setPage(page);
documentElement.appendKid(paragraphElement);
// Vorbereiten des Markierungsinhalts mit MCID
COSDictionary markedContentDictionary = new COSDictionary();
markedContentDictionary.setInt(COSName.MCID, mcidCounter);
// Beginnen des markierten Inhalts
contentStream.beginMarkedContent(COSName.P, PDPropertyList.create(markedContentDictionary));
contentStream.setFont(font, 12);
contentStream.beginText();
contentStream.newLineAtOffset(50, 700);
contentStream.showText("Hallo Welt");
contentStream.endText();
contentStream.endMarkedContent();
// Schließen des Inhaltsstroms
contentStream.close();
// Erstellen des Parent Trees und Verknüpfen mit dem Strukturelement
COSDictionary parentTreeRoot = new COSDictionary();
PDNumberTreeNode parentTree = new PDNumberTreeNode(parentTreeRoot, COSBase.class);
// Mapping von StructParent zu Strukturelement
Map parentTreeMap = new HashMap();
parentTreeMap.put(structParentCounter, paragraphElement);
parentTree.setNumbers(parentTreeMap);
structureTreeRoot.setParentTree(parentTree);
// Dokument speichern
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
document.save(outputStream);
byte[] pdfBytes = outputStream.toByteArray();
document.close();
Path actualPath = Path.of("src/test/resources/pdf/small_test.pdf");
Files.write(actualPath, pdfBytes, StandardOpenOption.CREATE, StandardOpenOption.WRITE);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ject-not-t