使用PyPDF2批量旋转PDF文件

5

我一直在编写一个批量旋转文件夹中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()
1个回答

16

你需要为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)

1
谢谢!这正是我想要的。 - fcr
1
2023年的建议: input_dir = r'c:\z_PruebPy\pdf' output_dir = r'c:\z_PruebPy\output_pdf'然后:reader = PdfReader(f'{input_dir}{fname}')with open(f'{output_dir}{fname}', "wb") as pdf_out:并且PyPDF2.errors.DeprecationError:rotate_clockwise已被弃用并在PyPDF2 3.0.0中删除。请改用rotate。所以只需: page.rotate(180) - Maciejg
1
@Maciejg 谢谢您的建议,我编辑了这篇帖子,尚未尝试,所以我将原始解决方案保留为评论。 - Loïc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接