【问题标题】:Python script to split multi page PDF works with some PDFs and not Others用于拆分多页 PDF 的 Python 脚本适用于某些 PDF 而不是其他的
【发布时间】:2020-05-29 01:48:22
【问题描述】:

我在 Windows 中使用以下脚本来拆分多页 PDF。脚本是这样的……

from PyPDF2 import PdfFileWriter, PdfFileReader
inputpdf = PdfFileReader(open("*pathToPDF**”, "rb"))

for i in range(inputpdf.numPages):
    output = PdfFileWriter()
    output.addPage(inputpdf.getPage(i))
    with open("document-page%s.pdf" % i, "wb") as outputStream:
        output.write(outputStream)

我将 pathToPDF 替换为要即时拆分的多页 PDF 的路径。

我使用 9 页 91kb PDF 可以正常工作,但是当我尝试使用 232 页 1.62gb PDF 时,它会引发以下错误...

Traceback(最近一次调用最后一次):文件 “C:\MySplitFolder\splitPDFwindows.py”,第 3 行,在 inputpdf = PdfFileReader(open(“C:\MySplitFolder\1973PB1PhyOfficeParkingBldg_CD.pdf”, “rb”)) OSError: [Errno 22] 无效参数: 'C:\MySplitFolder\x01973PB1PhyOfficeParkingBldg_CD.pdf'

这里是小pdf的第3行代码...

inputpdf = PdfFileReader(open("C:\MySplitFolder\BestInCategory_JR 2.pdf", "rb"))

这里是大pdf的第3行代码...

inputpdf = PdfFileReader(open("C:\MySplitFolder\1973PB1PhyOfficeParkingBldg_CD.pdf", "rb"))

文档名称是执行时两个脚本之间的唯一区别。虽然错误说明了一个无效的参数,但除了文档名称之外,我看不出这两行之间有任何区别。是文件大小的问题吗?

非常感谢任何帮助。

【问题讨论】:

    标签: python pdf


    【解决方案1】:

    您提供的路径是C:\MySplitFolder\1973PB1PhyOfficeParking,但错误消息显示的是路径C:\MySplitFolder\x01973PB1PhyOfficeParking。 注意第二个\ 之后的额外x0!

    Python 假设\ 是一个转义字符,并将\197 视为转义序列,将其替换为等效的ASCII 字符。

    要解决此问题,请告诉 python 将路径视为 原始字符串,方法是在其前面加上 r:

    inputpdf = PdfFileReader(open(r"C:\MySplitFolder\1973PB1PhyOfficeParkingBldg_CD.pdf", "rb"))
    

    第一个文件起作用的原因是,在 python 中,“所有无法识别的转义序列都保留在字符串中不变”。因此,\M 和 \B 都无法识别并保持不变。因此,导致路径字符串意外正确!

    【讨论】:

    • 完美。我把 r 放进去,就解决了这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多