Как пометить PDF с помощью низкоуровневого объекта itextpdf-5.5.13 - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь создать тегированный PDF-файл с использованием низкоуровневого объекта itext5, как показано ниже.

    document.open();
    PdfStructureTreeRoot structureTreeRoot = writer.getStructureTreeRoot();
    PdfStructureElement top = new PdfStructureElement(structureTreeRoot, PdfName.DOCUMENT);
    PdfStructureElement element = new PdfStructureElement(top, PdfName.P);
    PdfContentByte cb = writer.getDirectContent();
    BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, false);
    cb.setLeading(16);
    cb.setFontAndSize(bf, 12);
    cb.beginText();
    cb.setTextMatrix(50, 700);
    cb.beginMarkedContentSequence(element);
    cb.newlineShowText("Hello There");
    cb.endMarkedContentSequence();
    cb.endText();
    document.close();`

Код генерирует PDF-файл, открытый в acrobat D C pro, но когда я проверяю теги, acrobat не отвечает , При проверке структурного дерева в itext-rups я обнаружил, что массив StructureTree Root содержит значение null вместо StructureElement, а также в XRef отсутствуют 2-й и 3-й объекты Structure tree in itext-rups

Я новичок в генерации PDF и написал код, ссылающийся на ссылку из Tagged PDF . Для проекта

обязательно использовать низкоуровневый объект itext5

1 Ответ

0 голосов
/ 09 мая 2020

Поскольку вы используете низкоуровневые API-интерфейсы здесь, вам явно нужно выполнить довольно много работы, которая в противном случае выполняется автоматически.

В данном случае, например, вы должны явно добавить PdfStructureElement к документу перед его закрытием, т.е.

[...]
cb.endText();
writer.addToBody(element, element.getReference());
writer.addToBody(top, top.getReference());
document.close();
...