Проблема при создании PDF-файла с соблюдением требований PDF/UA: средство проверки PAC показывает «Тестовый объект не поJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема при создании PDF-файла с соблюдением требований PDF/UA: средство проверки PAC показывает «Тестовый объект не по

Сообщение Anonymous »

В настоящее время я работаю над созданием PDF-файла, совместимого с PDF/UA. Моя главная цель — убедиться, что он соответствует стандартам доступности и проходит проверку PAC (Проверка доступности PDF).
Проблема, с которой я столкнулся, заключается в том, что программа проверки 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
Однако, похоже, мне все еще не хватает чего-то фундаментального для распознавания тегов. Какие шаги я могу упустить, чтобы добиться правильной разметки в PDF-файле для соответствия требованиям PDF/UA?
Любая информация о том, где я могу ошибаться, или указатели на важные элементы разметки, которые следует проверить, буду очень признателен
. Ниже мой код.

Код: Выделить всё

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);

}
А вот что показывает инструмент PAC

Подробнее здесь: https://stackoverflow.com/questions/791 ... ject-not-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»