python - 目录中最多有两页pdf?
问题描述
from PyPDF2 import PdfFileReader, PdfFileWriter
import os as os
listdir = os.listdir(r"C:\Users\Max12\Desktop\xml\pdfminer\UiPath\attachments\75090058\Status\Verwerking")
for file in listdir:
if file.endswith(".pdf"):
pdf_file_path = 'Unknown.pdf'
file_base_name = file.replace('.pdf', '')
pdf = PdfFileReader(file)
pages = [0, 1] # page 1, 2
pdfWriter = PdfFileWriter()
else:
pass
for page_num in pages:
pdfWriter.addPage(pdf.getPage(page_num))
with open('{0}_subset.pdf'.format(file_base_name), 'wb') as f:
pdfWriter.write(f)
f.close()
大家好,
我想将目录中的 pdf 文件更新为最多两页。因此,如果它们有两页或更多页,请更新文件,最多两页。我已经编写了上述代码。
但是,我的 IDE 出现以下错误:
Traceback (most recent call last):
File "file.py", line 16, in <module>
pdfWriter.addPage(pdf.getPage(page_num))
File "C:\Python38\lib\site-packages\PyPDF2\pdf.py", line 1177, in getPage
return self.flattenedPages[pageNumber]
IndexError: list index out of range
我不知道我做错了什么..你们中的任何人都可以帮助我吗?
解决方案
如果 pdf 文件仅包含一页,则代码将失败。由于pdf.getNumPages()
返回文件中的页数,您可以替换pages = [0, 1]
为pages = range(min(2, pdf.getNumPages()))
修复此问题。
此外,您遍历目录中的 pdf 文件,但随后您只处理最后一个不是您想要完成的文件。第二个for
循环和with
语句应该在if
块内。
总的来说,以下应该有效:
from PyPDF2 import PdfFileReader, PdfFileWriter
import os as os
istdir = os.listdir(r"C:\Users\Max12\Desktop\xml\pdfminer\UiPath\attachments\75090058\Status\Verwerking")
for file in listdir:
if file.endswith(".pdf"):
file_base_name = file.replace('.pdf', '')
pdf = PdfFileReader(file)
pages = range(min(2, pdf.getNumPages()))
pdfWriter = PdfFileWriter()
for page_num in pages:
pdfWriter.addPage(pdf.getPage(page_num))
with open('{0}_subset.pdf'.format(file_base_name), 'wb') as f:
pdfWriter.write(f)
f.close()
推荐阅读
- vba - 指定发件人电子邮件
- android - 如何在 RecyclerView 中创建粘性标题,如所附图片?
- python-3.x - python xlsxwriter 从单元格中提取值
- java - 在接口的两个实现之间移动公共代码
- html - 如何将 thymeleaf 表单中的两个对象传递给 Spring Controller?
- javascript - React JS npm 开始给端口忙,但它是免费的
- python - 带有分号数据的字典到 Pandas Dataframe
- python-3.x - Python NetworkX:节点收缩后的图形更新
- r - 是否有 R 函数可以以这种形式获取我的数据库?尝试收集并没有解决我的问题
- azure - 使用 Azure DevOps 进行 Azure Sql 开发的标准是什么?