python - 我的 python 脚本中的错误有时会产生 2-3 倍的 jpgs (pdf2image),但并非总是如此
问题描述
我正在使用 pdf2image 将大约 1600 个文件夹中的 pdf 更改为 jpg。我环顾四周并改编了许多 SO 答案的代码,但这一部分似乎在某些文件夹中过度生成了 jpg(很难说是哪个)。
在一种特殊情况下,使用 Adobe 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 的文件夹也可以正常工作。
解决方案
如果您可以创建一个可重现的示例,请随时在官方存储库上打开一个问题,我不确定我是否理解这是如何发生的:https ://github.com/Belval/pdf2image
请务必提供 PDF 示例,否则我无法测试。
顺便说一句,而不是pages.index
使用for i, page in enumerate(pages)
和页码将是i + 1
.
推荐阅读
- java - 如何优化 libgdx 游戏中的动画
- c# - 将列表项显示到数据网格视图中 c#
- c++ - C++ 函数在浮点数列表中查找模式?
- javascript - Puppeteer 如何检查页面是否已导航并在未导航时执行任务
- bash - 如何删除远程机器上的 authorized_keys 文件中的重复行
- ruby-on-rails - Push to heroku staging master:有效值为“development”、“test”和“production”。相反,收到:“staging”
- node.js - Mongoose NodeJS Express - 如何将数据推送到特定的子文档对象数组
- javascript - 为什么 setTimout 在渲染反应组件时在浏览器中显示一个随机整数,以及如何解决这个问题?
- python - 这个神经网络实现的错误在哪里?
- dns - 将子域指向 Vercel 上的 Next.js 页面