【问题标题】:itext 7 Tab order - Faileditext 7 制表符顺序 - 失败
【发布时间】:2017-02-26 17:17:11
【问题描述】:

本应在 iText7 中演示支持 UA 并作为 Jump Start 教程的一部分提供的文件未能通过可访问性完整检查。此测试可在 Adob​​e Acrobat Pro 中使用。

我测试了以下文件: cmp_quick_brown_fox_PDFUA.pdf 和 cmp_united_states_PDFA-3a.pdf

可以使用哪些 API 使它们合规?有解决这个问题的计划吗? 感谢您的帮助。

This error as demonstrated by Adobe Acrobat Pro

and here also

【问题讨论】:

  • 请显示足够的代码来重现该问题。
  • cmp_united_states_PDFA-3a.pdf 为我通过了 3B、3A 和 3U 的预检
  • 我已更新问题以更好地说明问题。这里没有自定义代码;它是提供的所有 iText 示例。感谢您的帮助。

标签: itext7


【解决方案1】:

为了确保 PDF/UA 合规性,在调用 document.close() 之前,我调用了我编写的一个方法,该方法将每个生成的页面上的 tabs 属性设置为遵循文档结构:

void setTabs(PdfDocument pdfDocument) {

    int numPages = pdfDocument.getNumberOfPages();

    for (int i = 1; i <= numPages; i++) {
        PdfPage page = pdfDocument.getPage(i);
        page.put(new PdfName("Tabs"), PdfName.S);
    }
}

例如:

String dest = ("C:\temp\result.pdf");
PdfWriter writer = new PdfWriter(dest, new WriterProperties().addXmpMetadata());
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc, PageSize.LETTER, false);

pdfDoc.setTagged();
pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));
pdfDoc.getCatalog().setLang(new PdfString("en-US"));
PdfDocumentInfo info = pdfDoc.getDocumentInfo();
info.setTitle("The Title");

Paragraph p = new Paragraph();       
p.add(new Text("Hello World");
document.add(p);

setTabs(pdfDoc);
document.close()

我发现我必须在创建 Document 对象时将 immediateFlush 属性设置为 false,以便能够在关闭文档之前遍历页面。

【讨论】:

    【解决方案2】:

    解决7.0.1 和更早版本问题的一种方法是按照建议手动将/Tabs 键设置为值/S

    7.0.2 中,此问题已修复,默认情况下您将获得符合标签顺序检查的标记文档。

    顺便说一句,从7.0.2 开始,您也可以使用PdfPage 上的setTabOrder 便捷方法来更改Tab 顺序。

    【讨论】:

    • 请注意,截至本答案发布之日7.0.2版本尚未公开发布,但很快就会发布,答案对以后遇到此问题的人有用并且想要升级。
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多