首页 > 解决方案 > 我的 python 脚本中的错误有时会产生 2-3 倍的 jpgs (pdf2image),但并非总是如此

问题描述

我正在使用 pdf2image 将大约 1600 个文件夹中的 pdf 更改为 jpg。我环顾四周并改编了许多 SO 答案的代码,但这一部分似乎在某些文件夹中过度生成了 jpg(很难说是哪个)。

在一种特殊情况下,使用 Adob​​e Acrobat 工具制作 pdf 会创建 447 jpg(正确数量),但我的脚本会生成 1059。我查看并发现一些 pdf 页面被多次保存为 jpg 并插入到其他 pdf 文件的页面序列中.

例如:PDF A 有 1 页并创建 PDFA_page_1.jpg。PDF B 有 44 页,并通过 ....page_45.jpg 创建 PDFB_page_1.jpg,因为 PDF A 再次显示为 page_10.jpg。如果这令人困惑,请告诉我。

我尝试弄乱循环的索引部分(特别是,拿走 +1,使用页面而不是页面,将命名约定作为变量而不是直接放入 .save 和 .move 函数中。

我还尝试在 pdf2image.py 中使用 fmt='jpg' 参数,但无法生成正确的命名方案,因为我不确定如何在没有 for page in pages 循环的情况下迭代页码。

for pdf_file in os.listdir(pdf_dir):

        if pdf_file.endswith(".pdf") and pdf_file.startswith("602024"):
            #Convert function from pdf2image
            pages = convert_from_path(pdf_file, 72, output_folder=final_directory)
            print(pages)
            pdf_file = pdf_file[:-4]


            for page in pages:
                #save with designated naming scheme <pdf file name> + page index
                jpg_name = "%s-page_%d.jpg" % (pdf_file,pages.index(page)+1)
                page.save(jpg_name, "JPEG")
                #Moves jpg to the mini_jpg folder
                shutil.move(jpg_name, 'mini_jpg')
                #no_Converted += 1
    # Delete ppm files
    dir_name = final_directory
    ppm_remove_list = os.listdir(dir_name)

    for ppm_file in ppm_remove_list:
        if ppm_file.endswith(".ppm"):
            os.remove(os.path.join(dir_name, ppm_file))

没有错误消息,仅在某些情况下,jpg 的数量是我预期的 2 到 3 倍。具有许多单页 pdf 的文件夹不会遇到此问题,具有单个多页 pdf 的文件夹也不会遇到此问题。一些包含多个多页 pdf 的文件夹也可以正常工作。

标签: pythonlistloopsindexingfor-in-loop

解决方案


如果您可以创建一个可重现的示例,请随时在官方存储库上打开一个问题,我不确定我是否理解这是如何发生的:https ://github.com/Belval/pdf2image

请务必提供 PDF 示例,否则我无法测试。

顺便说一句,而不是pages.index使用for i, page in enumerate(pages)和页码将是i + 1.


推荐阅读