python 用PyPDF2实现PDF文件的批量旋转

46qrfjad  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(236)

我一直在编写一段代码,用于批量旋转文件夹中的PDF文件,但我找不到一种方法来迭代和更改旋转文件的目标文件夹。
我打算将新文件以相同的名称保存在另一个文件夹中。

from os import listdir

from PyPDF2 import PdfReader, PdfWriter

# Collect files
root = "C:\z_PruebPy\pdf"
archs = []
for x in listdir(root):
    archs.append(root + x)

# Batch rotate
for arch in archs:
    pdf_in = open(arch, "rb")
    reader = PdfReader(pdf_in)
    writer = PdfWriter()

    for page in reader.pages:
        page.rotate_clockwise(270)
        writer.add_page(page)

    with open(arch, "wb") as pdf_out:  # ????????
        writer.write(pdf_out)
    pdf_in.close()
kgqe7b3p

kgqe7b3p1#

你必须给予PdfFileWriter一个指向新位置的文件指针。而且你不需要创建一个列表并在列表上迭代,只需要在os.listdir结果上迭代。最后你有了一些不用的变量,比如loc。我稍微清理了一下你的代码。
假设您创建了输出文件夹,那么这应该可以工作:

from os import listdir
from PyPDF2 import PdfReader, PdfWriter

input_dir  = "C:\\z_PruebPy\\pdf\\"
output_dir = "C:\\z_PruebPy\\output_pdf\\"

for fname in listdir(input_dir):
    if not fname.endswith(".pdf"):  # ignore non-pdf files
        continue
    reader = PdfReader(input_dir + fname)
    writer = PdfWriter()
    for page in reader.pages:
        # page.rotate_clockwise(270) # (before pypdf3.0 - deprecated - thanks to Maciejg for the update)
        page.rotate(270)
        writer.add_page(page)
    with open(output_dir + fname, "wb") as pdf_out:
        writer.write(pdf_out)

相关问题