首页 > 解决方案 > 目录中最多有两页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

我不知道我做错了什么..你们中的任何人都可以帮助我吗?

标签: pythonpdfoperating-system

解决方案


如果 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()

推荐阅读