使用 Python 进行 PDF 操作
PDF manipulation with Python
我需要删除 pdf 文件的最后一页。我在同一目录中有多个 pdf 文件。到目前为止,我有下一个代码:
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
def changefile (file):
infile = PdfFileReader(file, "rb")
output = PdfFileWriter()
numpages = infile.getNumPages()
for i in range (numpages -1):
p = infile.getPage(i)
output.addPage(p)
with open(file, 'wb') as f:
output.write(f)
for file in os.listdir("C:\Users\Conan\PycharmProjects\untitled"):
if file.endswith(".pdf") or file.endswith(".PDF"):
changefile(file)
我的脚本在测试时有效。我的工作需要这个脚本。每天我都需要从我们的主要外部供应商处下载几张电子发票。最后一页总是提到销售条件,没有用。不幸的是我们的供应商留下了签名,导致我的脚本无法正常工作。
当我尝试运行它在发票上时,我收到以下错误:
第 1901 行,已读
raise utils.PdfReadError("无法在指定位置找到外部参照 table")
PyPDF2.utils.PdfReadError: 在指定位置找不到外部参照 table
我可以通过 运行ning qpdf invoice.pdf invoice-fix 在我的 Linux 笔记本电脑上修复它。我无法在工作中安装 QPDF,其中使用了 Windows。
我想这个错误是由我们的供应商在每个 PDF 文件上留下的签名触发的。
有谁知道如何解决这个错误?我正在寻找一种有效的方法来解决损坏的 PDF 文件及其签名的问题。肯定有比用 Adobe 打开每个 PDF 文件并手动删除签名更好的东西了...
自动化会很好,因为我每天都会将多张发票放在同一个目录中。
谢谢。
问题可能是损坏的 PDF 文件。 QPDF 确实能够解决这个问题。这就是为什么我建议在这种情况下使用 pikepdf 库而不是 PyPDF2。 Pikepdf 基于 QPDF。首先安装 pikepdf(例如使用 pip 或您的包管理器)然后尝试此代码:
import pikepdf
import os
def changefile (file):
print("Processing {0}".format(file))
pdf = pikepdf.Pdf.open(file)
lastPageNum = len(pdf.pages)
pdf.pages.remove(p = lastPageNum)
pdf.save(file + '.tmp')
pdf.close()
os.unlink(file)
os.rename(file + '.tmp', file)
for file in os.listdir("C:\Users\Conan\PycharmProjects\untitled"):
if file.lower().endswith(".pdf"):
changefile(file)
Link 到 pikepdf 文档:https://pikepdf.readthedocs.io/en/latest/
让我知道这是否适合你。
我需要删除 pdf 文件的最后一页。我在同一目录中有多个 pdf 文件。到目前为止,我有下一个代码:
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
def changefile (file):
infile = PdfFileReader(file, "rb")
output = PdfFileWriter()
numpages = infile.getNumPages()
for i in range (numpages -1):
p = infile.getPage(i)
output.addPage(p)
with open(file, 'wb') as f:
output.write(f)
for file in os.listdir("C:\Users\Conan\PycharmProjects\untitled"):
if file.endswith(".pdf") or file.endswith(".PDF"):
changefile(file)
我的脚本在测试时有效。我的工作需要这个脚本。每天我都需要从我们的主要外部供应商处下载几张电子发票。最后一页总是提到销售条件,没有用。不幸的是我们的供应商留下了签名,导致我的脚本无法正常工作。
当我尝试运行它在发票上时,我收到以下错误:
第 1901 行,已读 raise utils.PdfReadError("无法在指定位置找到外部参照 table") PyPDF2.utils.PdfReadError: 在指定位置找不到外部参照 table
我可以通过 运行ning qpdf invoice.pdf invoice-fix 在我的 Linux 笔记本电脑上修复它。我无法在工作中安装 QPDF,其中使用了 Windows。
我想这个错误是由我们的供应商在每个 PDF 文件上留下的签名触发的。
有谁知道如何解决这个错误?我正在寻找一种有效的方法来解决损坏的 PDF 文件及其签名的问题。肯定有比用 Adobe 打开每个 PDF 文件并手动删除签名更好的东西了...
自动化会很好,因为我每天都会将多张发票放在同一个目录中。
谢谢。
问题可能是损坏的 PDF 文件。 QPDF 确实能够解决这个问题。这就是为什么我建议在这种情况下使用 pikepdf 库而不是 PyPDF2。 Pikepdf 基于 QPDF。首先安装 pikepdf(例如使用 pip 或您的包管理器)然后尝试此代码:
import pikepdf
import os
def changefile (file):
print("Processing {0}".format(file))
pdf = pikepdf.Pdf.open(file)
lastPageNum = len(pdf.pages)
pdf.pages.remove(p = lastPageNum)
pdf.save(file + '.tmp')
pdf.close()
os.unlink(file)
os.rename(file + '.tmp', file)
for file in os.listdir("C:\Users\Conan\PycharmProjects\untitled"):
if file.lower().endswith(".pdf"):
changefile(file)
Link 到 pikepdf 文档:https://pikepdf.readthedocs.io/en/latest/
让我知道这是否适合你。