使用PYPDF2折叠书签

时间:2016-03-08 21:27:26

标签: python pdf pypdf2

当我使用PYPDF2合并两个PDF文档时,我将页面模式设置为/ UseOutlines,以便在打开文档时PDF将显示书签窗格。

merger = PdfFileMerger()
merger.append(PdfFileReader(filename,'rb'),import_bookmarks=True)
merger.setPageMode('/UseOutlines')
merger.setPageLayout('/SinglePage')

但是,无论何时打开PDF文档,书签都会被扩展。是否有一个属性可以修改以强制在打开文档时折叠书签?

2 个答案:

答案 0 :(得分:1)

PDF中的空心轮廓包含字典中的-1键,表示轮廓内的子项数。要将大纲显示为已关闭,应删除此密钥或将其设置为$posts = $connect->Fetch('group_table WHERE person_id = "$person_id"'); $person_id = $_SESSION['id']; 。但遗憾的是,还没有办法在PyPDF2中指定它。

答案 1 :(得分:1)

很晚了,但经过一番挖掘,并在@Eugene的提示下,我找到了解决方法。

您必须对源代码进行一些小的调整: (已针对1.26.0版进行测试)

PyPDF2 / pdf.py:

将方法 addBookmark 的定义(〜行690)更改为:

def addBookmark(self, title, pagenum, parent=None, color=None, bold=False, italic=False, fit='/Fit', collapse=False, *args):

(添加参数 collapse = False

然后在同一方法的结尾将行(〜行750)更改为:

parent.addChild(bookmarkRef, self, collapse)

(添加折叠

PyPDF2 / generic.py

现在我们必须调整 addChild 方法(〜第665行):

def addChild(self, child, pdf, collapse=False):

(再次添加参数 collapse = False

然后用相同的方法交换行(〜行677):

self[NameObject('/Count')] = NumberObject(self[NameObject('/Count')] + 1)

使用

if collapse: self[NameObject('/Count')] = NumberObject(self[NameObject('/Count')] - 1)
else: self[NameObject('/Count')] = NumberObject(self[NameObject('/Count')] + 1)

就是这样!

用法

如果现在使用参数'collapse = False'调用方法'addBookmark',则所有书签都将关闭。