我正在尝试编写将超链接添加到现有PDF文档的代码。 我已经尝试通过遵循PDF 32000规范来做到这一点,但似乎我缺少了一些东西。
PDF查看器显示了我的链接注释,并将鼠标指针悬停在它们上时将其鼠标指针更改为“ finger”,但是未显示URL,并且单击它们没有任何作用。
PDF内容如下所示。
页面:
/Type/Page
/Parent 1 0 R
/MediaBox[0 0 594.75 841.5]
/Contents 7 0 R
/Resources 8 0 R
/Annots [5 0 R 6 0 R] % added by me
第一个注释(针对“ Google”,第5个):
/Type /Annot
/Subtype /Link
/Rect [60.0 779.25 150.0 767.25]
/BS
<<
/W 2 % should be 0, set to 2 to be able to see the annotation's position
>>
/F 4
/A
<<
/Type /Action
/Subtype /URI
/URI (https://google.com)
>>
第二个注释(对于“ DuckDuckGo”,#6):
/Type /Annot
/Subtype /Link
/Rect [342.0 694.5 432.0 682.5]
/BS
<<
/W 2 % should be 0, set to 2 to be able to see the annotation's position
>>
/F 4
/A
<<
/Type /Action
/Subtype /URI
/URI (https://duckduckgo.com)
>>
内容流:
1 0 0 -1 36.0 841.5 cm
-100 Tz
q
/Font3 -9.0 Tf
0.0 0.0 0.0 rg
24.0 62.25 90.0 12.0 re W n
BT
1 0 0 1 0 0 Tm
24.75 69.75 Td
(Google) Tj
ET
Q
q
/Font3 -9.0 Tf
0.0 0.0 0.0 rg
306.0 147.0 90.0 12.0 re W n
BT
1 0 0 1 0 0 Tm
306.75 154.5 Td
(DuckDuckGo) Tj
ET
Q
此代码产生以下结果:
Generated PDF file is available here.
我看了一下Microsoft Word为链接生成的代码,它看起来几乎一样(缩小和结构化父级;此代码有效,但我的无效):
/Subtype/Link/Rect[ 69.75 697.51 113.16 720] /BS
<<
/W 0
>>
/F 4/A
<<
/Type/Action/S/URI/URI(https://google.com/)
>>
/StructParent 0
任何建议将不胜感激。
答案 0 :(得分:1)
您必须分析页面内容并处理所有影响文本位置的运算符,才能计算Google和DuckDuckGo的确切位置。然后将链接注释放置在计算出的位置。
答案 1 :(得分:1)
您的动作字典如下:
<<
/Type /Action
/Subtype /URI
/URI (https://google.com)
>>
但是,如果您查找ISO 32000-1第12.6.2节动作字典,则会看到动作类型不是 Subtype 的值,而是的 S :
S 名称 (必需)该词典描述的操作类型;具体值请参见表194。
(ISO 32000-1表193 –所有操作词典共有的条目)
因此,在您的 Action 词典中(不过周围的 Annot 词典中的 not )! ),将/Subtype
替换为/S
:
/Type /Annot
/Subtype /Link %<------------- not here
/Rect [342.0 694.5 432.0 682.5]
/BS
<<
/W 2 % should be 0, set to 2 to be able to see the annotation's position
>>
/F 4
/A
<<
/Type /Action
/S /URI %<------------- but here
/URI (https://duckduckgo.com)
>>