【问题标题】:Add hyperlink to PDF将超链接添加到 PDF
【发布时间】:2020-10-04 06:38:53
【问题描述】:

这似乎是一件容易的事,但我一直无法为 PDF 文件中的文本创建链接。 我已经检查了specifications,还检查了以前的答案here。 这是我到目前为止创建的:DOWNLOAD

  1. 创建了一个对象 - 编号为 6 - 将超链接保存为: <</Type /Annot /Subtype /Link /Rect[ 99.21 754 109 800] /BS <</W 2>> /F 4 /A << /Type /Action /S /URI /URI (http://google.com/) >>
  2. 在页面对象中我引用了这个注释: <</Type /Pages /Count 1 /MediaBox [0 0 595.3 841.9] /CropBox [0 0 595.3 841.9] /Kids [ 9 0 R ] /Resources 4 0 R /Annots [6 0 R]>>
但在结果中没有显示链接框。 有人可以帮我吗,为什么?

【问题讨论】:

    标签: pdf pdf-generation


    【解决方案1】:

    您已将注释放置在页面树的中间节点中,而不是叶节点中。 Annots 不会沿树层次结构继承,因此您需要将 Annots 数组放在页面叶节点中,而不是树中。

    你拥有的是:

    3 0 obj
    <<
      /Type /Pages 
      /Count 1 
      /MediaBox [0 0 595.3 841.9]
      /CropBox [0 0 595.3 841.9]
      /Kids [ 9 0 R ]
      /Resources 4 0 R
      /Annots [6 0 R]
    >>
    

    那是 Pages 树,注意它有一个 /Kids 键,所以它是一个中间节点(在本例中是原点),而不是叶子。 Resources、CropBox 和 MediaBox 是继承的,因此任何没有设置这些的 /Page 叶节点都将从前面的中间节点继承。但是 Annots 不会以这种方式继承。

    您的页面当前如下所示:

    9 0 obj
    <<
      /Type /Page
      /Parent 3 0 R
      /Contents 10 0 R
      /Rotate 0
    >>
    endobj
    

    尝试像这样编辑它:

    9 0 obj
    <<
      /Type /Page
      /Parent 3 0 R
      /Contents 10 0 R
      /Rotate 0
      /Annots [6 0 R]
    >>
    endobj
    

    下一个问题是你的Annotation不正确,你拥有的是:

    6 0 obj
    <<
      /Type /Annot
      /Subtype /Link
      /Rect[ 99.21 754 109 800]
      /BS <</W 2>>
      /F 4
      /A << 
        /Type /Action
        /S /URI
        /URI (http://google.com/)
      >>
    

    第一个问题是字典打开标记“>”的数量不匹配。所以你打开了一本字典。此外,您没有 endobj 来终止对象,这也是无效的。您需要更正这两个:

    6 0 obj
    <<
      /Type /Annot
      /Subtype /Link
      /Rect[ 99.21 754 109 800]
      /BS <</W 2>>
      /F 4
      /A << 
        /Type /Action
        /S /URI
        /URI (http://google.com/)
      >>
    >>
    endobj
    

    在 PDF 使用者可以对它做任何事情之前。

    除了这些问题之外,页面内容流(对象 10)的长度不正确。它作为对间接对象(对象 11)的引用,其值为 0:

    10 0 obj
    << /Length 11 0 R >>
    stream
    BT
    /_Calibri 16 Tf
    99.21 754.02 Td
    (TEST LINK) Tj
    ET
    endstream
    endobj
    11 0 obj
    0
    endobj
    

    ... ...

    11 0 obj
    0
    endobj
    

    另外,字体的 Widths 数组中的条目数是错误的,有 192 个条目,但字体声明 FirstChar 为 32,LastChar 为 255,所以应该有 223 个条目。

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 2014-07-13
      • 2020-02-14
      相关资源
      最近更新 更多