You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iText 7创建符合PDF/UA标准的文本超链接PDF文件遇合规问题的解决方案求助

解决iText 7中PDF/UA合规超链接的问题

你遇到的两个检测报错,本质都是当前代码没有完全满足PDF/UA对链接元素的结构和注释要求,下面我来一步步帮你修正:

报错原因解析

  • PAC 3报错:“‘Link’注释未嵌套在‘Link’结构元素内”:直接给Text设置动作时,iText生成的链接注释(PdfAnnotation)没有关联到对应的Link结构节点,而PDF/UA强制要求所有交互元素必须在结构树中有对应的结构元素包裹。
  • Acrobat提示:Link注释的Contents键缺少替代描述:PDF/UA标准要求链接注释必须包含Contents值作为屏幕阅读器的读取文本,当前代码仅给文本设置了辅助描述,但没有同步到注释本身。

修改后的合规代码

public void testHyperLink() throws IOException { 
    // Create PDF/UA with text hyperlink 
    String filename = "./results/HyperLink.pdf"; 
    WriterProperties properties = new WriterProperties(); 
    properties.addUAXmpMetadata().setPdfVersion(PdfVersion.PDF_1_7); 
    PdfWriter writer = new PdfWriter(filename, properties); 
    PdfDocument pdfDoc = new PdfDocument(writer); 
    // Make document tagged 
    pdfDoc.setTagged(); 
    pdfDoc.getCatalog().setLang(new PdfString("en-US")); 
    pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true)); 
    PdfDocumentInfo info = pdfDoc.getDocumentInfo(); 
    info.setTitle("Hello Hyperlinks!"); 
    Document document = new Document(pdfDoc); 
    // Must embed font for PDF/UA 
    byte[] inputBytes = Files.readAllBytes(Paths.get("./resources/fonts/opensans-regular.ttf")); 
    boolean embedded = true; 
    boolean cached = false; 
    PdfFont font = PdfFontFactory.createFont(inputBytes, PdfEncodings.CP1252, embedded, cached); 

    // 用Link类替代Text.setAction,自动适配PDF/UA结构要求
    String linkText = "This is a Text link";
    PdfAction act = PdfAction.createURI("https://itextpdf.com/");
    Link link = new Link(linkText, act);
    link.setFont(font);
    link.setFontSize(16F);
    
    // 设置替代描述,会自动同步到链接注释的Contents属性
    link.getAccessibilityProperties().setAlternateDescription("Click here to go to the iText website");

    Paragraph para = new Paragraph(); 
    para.add(link); 
    document.add(para); 
    document.close(); 
    System.out.println("Created "+ filename); 
}

关键修改说明

  1. 替换为Link元素:Link是iText专门为超链接设计的组件,它会自动在结构树中生成对应的Link结构节点,并将链接注释正确嵌套其中,直接解决PAC 3的结构报错。
  2. 统一替代描述设置:给Link的AccessibilityProperties设置描述后,iText会自动将该值同步到链接注释的Contents属性,满足Acrobat的检测要求。
  3. 保留基础合规配置:文档标记、语言设置、嵌入字体这些PDF/UA的基础要求都保留了,确保整体合规性。

修改后再用PAC 3和Acrobat预检测试,应该就能通过PDF/UA合规验证了。

内容的提问来源于stack exchange,提问作者tjackson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:53:12