Python 添加到PDF的文档链接

Python 添加到PDF的文档链接,python,pdf,pdf-generation,pypdf,Python,Pdf,Pdf Generation,Pypdf,我需要以编程方式分析和组合几个(数百个)PDF文档,并以专门的方式将页面链接在一起。每个PDF在链接所属的每个位置都包含文本,指明它应该链接到的内容。我用它来提取链接的位置和文本;现在我只需要创建这些链接 我做了一些研究,得出的结论应该可以做到这一点。无论如何,有一种看似简单的addLink方法声称可以完成任务。我就是不能让它工作 from PyPDF2 import PdfFileWriter from PyPDF2.pdf import RectangleObject out = PdfF

我需要以编程方式分析和组合几个(数百个)PDF文档,并以专门的方式将页面链接在一起。每个PDF在链接所属的每个位置都包含文本,指明它应该链接到的内容。我用它来提取链接的位置和文本;现在我只需要创建这些链接

我做了一些研究,得出的结论应该可以做到这一点。无论如何,有一种看似简单的
addLink
方法声称可以完成任务。我就是不能让它工作

from PyPDF2 import PdfFileWriter
from PyPDF2.pdf import RectangleObject

out = PdfFileWriter()

out.insertBlankPage(800, 1000)
out.insertBlankPage(800, 1000)

# rect = [400, 400, 600, 600] # This doesn't seem to work either
rect = RectangleObject([400, 400, 600, 600])
out.addLink(0, 1, rect) # link from first to second page

with open(r'C:\temp\test.pdf', 'wb') as outf:
    out.write(outf)
以上代码生成了一个漂亮的两页PDF,其中没有任何内容,至少据我所知。有人知道这是如何实现的吗?或者至少是我出了什么差错


解决方案不必使用PyPDF2,只要库是免费许可的。严格地说,Python甚至不是一项要求,但如果能将其融入到我当前的结构中,而不使用其他语言,那就太好了。

这似乎是
addLink
实现中的一个错误,或者该方法可能只是针对较旧或不同的链接语法。在任何情况下,从问题中的示例代码中检查输出PDF的结构都会发现以下一点:

6 0 obj
<<
/Dest [ 4 0 R /FitV 826 ]
/Type /Annot
/Rect RectangleObject([400, 400, 600, 600])
/Border [ 0 0 0 ]
/P IndirectObject(5, 0)
/Subtype /Link
>>
等等,链接在输出中完全按照预期工作!我还从
/Rect
值中删除了magic
826
,因为它可能不是取决于缩放级别的合法参数,而且实际上不应该硬编码


*在得出此修复程序按预期工作的结论后,我确实发现将
/Rect
保留为
NameObject
,并向其传递一个看起来应该输出的字符串(例如
'[400 600]'
)也可以工作。这大概是为了允许最大的灵活性,但这肯定是出乎意料的


更新:我整理并提交了一个更完整的修复程序(供子孙后代使用),因此上述问题都应该得到修复,从版本1.22开始

6 0 obj
<<
/Dest [ 4 0 R /FitV ]
/Type /Annot
/Rect [ 400 400 600 600 ]
/Border [ 0 0 0 ]
/P 0
/Subtype /Link
>>