我正在尝试自动合并几个PDF文件,并且有两个要求:a)现有书签和b)需要保留页面标签(自定义页面编号)
默认情况下,与PyPDF2和pdftk合并时保留书签,但与pdfrw合并时不保留书签。 页面标签始终不会保留在PyPDF2、pdftk或pdfrw中
我猜,在搜索了很多之后,没有直接的方法来做我想做的事情。如果我错了,那么我希望有人能指出这个简单的解决方案。但是,如果没有简单的解决方案,任何关于如何在python中实现这一点的提示都将不胜感激
一些示例代码:
1)使用PyPDF2
from PyPDF2 import PdfFileWriter, PdfFileMerger, PdfFileReader
tmp1 = PdfFileReader('file1.pdf', 'rb')
tmp2 = PdfFileReader('file2.pdf', 'rb')
#extracting pagelabels is easy
pl1 = tmp1.trailer['/Root']['/PageLabels']
pl2 = tmp2.trailer['/Root']['/PageLabels']
#but PdfFileWriter or PdfFileMerger does not support writing from what I understand
所以我不知道如何从这里开始
2)有pdfrw(更有希望)
from pdfrw import PdfReader, PdfWriter
writer = PdfWriter()
#read 1st file
tmp1 = PdfReader('file1')
#add the pages
writer.addpages(tmp1.pages)
#copy bookmarks to writer
writer.trailer.Root.Outlines = tmp1.Root.Outlines
#copy pagelabels to writer
writer.trailer.Root.PageLabels = tmp1.Root.PageLabels
#read second file
tmp2 = PdfReader('file2')
#append pages
writer.addpages(tmp2.pages)
# so far so good
第二个文件中书签的页码需要在添加它们之前进行偏移,但在阅读大纲时,我几乎总是得到(IndirectObject,XXX)而不是页码。目前还不清楚如何使用pdfrw获取每个标签和书签的页码。所以,我又被卡住了
zp
正如我在评论中提到的,我发布了一个通用的解决方案来合并在PyPDF2中工作的几个PDF。除了将pls初始化为
ArrayObject()
之外,不知道在PyPDF2中实现此功能有什么不同您需要遍历现有的
PageLabels
,并将它们添加到合并的输出中,注意根据已添加的页面数向页面索引项添加偏移量这个解决方案还需要
PyPDF4
,因为PyPDF2
会产生一个奇怪的错误(见下图)注意:PyPDF2会产生这种奇怪的错误:
相关问题 更多 >
编程相关推荐