Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python/PyPDF4:如何在创建的PDF中指定/PageLabels?_Python 3.x_Pdf Generation_Pypdf2 - Fatal编程技术网

Python 3.x Python/PyPDF4:如何在创建的PDF中指定/PageLabels?

Python 3.x Python/PyPDF4:如何在创建的PDF中指定/PageLabels?,python-3.x,pdf-generation,pypdf2,Python 3.x,Pdf Generation,Pypdf2,我正在使用PyPDF4创建一个“自然”杂志的主题 我使用PyPDF4 PdfileReader阅读单独的文章PDFs和PdfileWriter来创建一个合并的输出 我试图解决的问题是,某些问题的页码不是从1开始的,例如,从563页开始 如何在文档目录中指定所需的/PageLabels 对于pdf\u文件中的pdf\u文件: input_pdf=PdfileReader(打开(pdf_文件'rb')) 页面索引=文件页面字典[pdf文件] 对于页面索引中的页面索引: page=input\u pd

我正在使用PyPDF4创建一个“自然”杂志的主题

我使用PyPDF4 PdfileReader阅读单独的文章PDFs和PdfileWriter来创建一个合并的输出

我试图解决的问题是,某些问题的页码不是从1开始的,例如,从563页开始

如何在文档目录中指定所需的
/PageLabels

对于pdf\u文件中的pdf\u文件:
input_pdf=PdfileReader(打开(pdf_文件'rb'))
页面索引=文件页面字典[pdf文件]
对于页面索引中的页面索引:
page=input\u pdf.getPage(page\u索引)
#在此处指定实际页码:
#page.setPageNumber(实际页码[页码索引])
output.addPage(第页)
将open(pdf_输出_名称,'wb')作为f:
输出写入(f)

在研究了PDF标准和一些黑客攻击之后,我发现下面的函数将添加一个
PageLabels
条目,该条目创建从偏移开始的页面标签(即,第一页将标记为偏移,第二页标记为偏移+1,等等)

#output#pdf是PdfFileWriter()的一个实例。
#偏移量是所需的页面偏移量。
def添加页面标签(输出pdf,偏移量):
number_type=PDF.DictionaryObject()
编号\u type.update({PDF.NameObject(“/S”):PDF.NameObject(“/D”)})
编号\u type.update({PDF.NameObject(“/St”):PDF.NumberObject(offset)})
nums_array=PDF.ArrayObject()
nums_array.append(PDF.NumberObject(0))#物理页面索引
nums\u数组.append(数字\u类型)
页码=PDF.DictionaryObject()
页码.更新({PDF.NameObject(“/Nums”):Nums\u数组})
page_labels=PDF.DictionaryObject()
page_labels.update({PDF.NameObject(“/PageLabels”):page_numbers})
root\u obj=输出\u pdf.\u root\u对象
根目录对象更新(页面标签)
可以创建其他页面标签条目(即具有不同偏移或不同编号样式)

请注意,第一个PDF页面的索引为0

#使用PyPDF操作页面
从PyPDF4导入PdfileWriter、PdfileReader
#操作PDF字典的步骤
将PyPDF4.pdf导入为pdf
def pdf_pagelabels_roman():
number_type=PDF.DictionaryObject()
编号\u type.update({PDF.NameObject(“/S”):PDF.NameObject(“/r”)})
返回编号\u类型
def pdf_页面标签_decimal():
number_type=PDF.DictionaryObject()
编号\u type.update({PDF.NameObject(“/S”):PDF.NameObject(“/D”)})
返回编号\u类型
def pdf页面标签带偏移量(偏移量)的十进制标签:
数字\u类型=pdf\u页面标签\u十进制()
编号\u type.update({PDF.NameObject(“/St”):PDF.NumberObject(offset)})
返回编号\u类型
...
nums_array=PDF.ArrayObject()
#每个条目由一个索引和一个页面标签组成。。。
nums_array.append(PDF.NumberObject(0))#第0页:
nums_array.append(pdf_pagelabels_roman())#罗马数字
#每个条目由一个索引和一个页面标签组成。。。
nums_array.append(PDF.NumberObject(1))#第1-10页:
nums_数组。追加(pdf_页面标签_十进制带_偏移量(第一个_偏移量))#十进制数,带偏移量
#每个条目由一个索引和一个页面标签组成。。。
nums_array.append(PDF.NumberObject(10))#第11页-->:
nums\u array.append(pdf\u页面标签\u带\u偏移量的十进制\u(第二个\u偏移量))
页码=PDF.DictionaryObject()
页码.更新({PDF.NameObject(“/Nums”):Nums\u数组})
page_labels=PDF.DictionaryObject()
page_labels.update({PDF.NameObject(“/PageLabels”):page_numbers})
根对象=输出
根目录对象更新(页面标签)

我一直在找这样的东西。但是,当我使用你的代码时,我无法在最后一步中编写pdf。您实际编写文件时使用的代码是什么?我得到一个错误
AttributeError:'int'对象没有属性'writeToStream'
我试图解决的问题是不同的:在组合多个文档时保留书签和页面标签。这里的查询:看起来您使用的是一个裸体号码。PageLabels结构中的所有数字都必须用
PDF.NumberObject(xxx)
包装。我在