我想使用PyPDF2分割pdf文件。
net中的所有示例都太难或不起作用,或者总是给出错误“attribute error:”PdfFileWriter“object has no attribute'stream'”
有人能帮忙吗?需要分离成三个不同的文件一个3页的pdf文件。
我从这个开始:
pdfFileObj = open(r"D:\BPO\act.pdf", 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.addPage(pdfReader.getPage(0))
但不知道下一步该怎么办
编辑1
试着做一个循环来进行拆分,我遇到了一个问题:PdfFileWriter生成3个文件,一个有一个页面,第二个有两个页面,第三个有三个页面。我在以下代码中的错误在哪里
act_sub_pages_name = ['p01.pdf', 'p02.pdf', 'p03.pdf']
with open(r"D:\BPO\act.pdf", 'rb') as act_mls:
reader = PdfFileReader(act_mls)
writer = PdfFileWriter()
if reader.numPages == 3:
counter = 0
for x in range(3):
path = '\\'.join(['D:\\BPO\\act sub pages', act_sub_pages_name[counter]])
counter += 1
writer.addPage(reader.getPage(x))
with open(path, 'wb') as outfile: writer.write(outfile)
因为英语不好。
编辑2
根据保罗·鲁尼的回答:
act_pdf_file = 'D:\\BPO\\act.pdf'
act_sub_pages_name = ['p01.pdf', 'p02.pdf', 'p03.pdf']
def pdf_splitter(index, src_file):
with open(src_file, 'rb') as act_mls:
reader = PdfFileReader(act_mls)
writer = PdfFileWriter()
writer.addPage(reader.getPage(index))
out_file = os.path.join('D:\\BPO\\act sub pages', act_sub_pages_name[index])
with open(out_file, 'wb') as out_pdf: writer.write(out_pdf)
for x in range(3): pdf_splitter(x, act_pdf_file)
所有功能都正常工作,但有点困难。
我使用了一个名为
xpdf
的工具来完成这类任务,它工作得非常好。你可以下载它here。这是一个可以从python调用的命令行实用程序。确保已将其添加到路径中,以便可以从命令行调用它。
下面介绍如何使用
subprocess
从python接口它:页面由formfeed字符分隔,因此您将得到一个页面列表。
您可以使用
PdfFileWriter
的write
方法写入文件。您可能需要在输入文件的页面上循环,创建新的writer对象,添加单个页面。然后写出一个不断递增的文件名,或者有其他方案来决定输出文件名?
相关问题 更多 >
编程相关推荐