经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
[python]将多张图片合并为单个pdf文件
来源:cnblogs  作者:花酒锄作田  时间:2024/3/4 10:20:42  对本文有异议

前言

最近有个个人需求是要把多个图片文件合并为一个PDF文件,这样方便用PDF阅读器连续看,避免界面点一下,只会图片放大。(比如看漫画

主要思路是先把单张图片转换成单个PDF文件,然后把PDF文件进行合并。原先是用WPS的转换工具做的,但WPS每次只能批量转换30张,如果有大量图片文件,用WPS就不太方便了。

现成的工具找不到,索性自己整一个。python的pillow库和pypdf2库就可以实现这样的需求。

安装依赖库

本地的python版本为3.11。注意pypdf2升级到3.0版本后,一些类和方法和版本2有些区别。

  1. python -m pip install PyPDF2==3.0.1 pillow==10.2.0

示例代码

目录结构示例

  1. ├── images
  2.    ├── 00001.jpg
  3.    ├── 00002.jpg
  4.    ├── 00003.jpg
  5.    ├── 00004.jpg
  6.    ├── 00005.jpg
  7.    ├── 00006.jpg
  8.    ├── 00007.jpg
  9.    ├── 00008.jpg
  10.    ├── 00009.jpg
  11.    └── 00010.jpg
  12. ├── main.py
  13. └── temp

其中main.py内容如下

  1. from PIL import Image
  2. import os
  3. import re
  4. from PyPDF2 import PdfMerger
  5. images_dir = "images"
  6. tmpdir = "temp"
  7. def trans_jpg2pdf(jpg_list: list) -> list:
  8. """jpg图片转换成pdf
  9. Args:
  10. jpg_list (list): 图片文件列表
  11. Returns:
  12. list: 图片转换后的pdf文件列表
  13. """
  14. pdf_list = []
  15. for jpg in jpg_list:
  16. jpg_path = os.path.join(images_dir, jpg)
  17. pdf_file = jpg.replace('.jpg', '.pdf')
  18. pdf_path = os.path.join(tmpdir, pdf_file)
  19. if os.path.exists(pdf_path):
  20. os.remove(pdf_path)
  21. pdf_list.append(pdf_path)
  22. im = Image.open(jpg_path)
  23. im.save(pdf_path, 'PDF', resolution=100.0)
  24. return pdf_list
  25. def merge_pdf(pdf_list: list, result_pdf: str = "result.pdf"):
  26. """ 合并pdf文件
  27. Args:
  28. pdf_list (list): pdf文件列表
  29. result_pdf (str): 合并后的pdf文件名称
  30. """
  31. sorted_list = sorted(pdf_list, key=lambda x: int(re.search(r'\d+', x).group()))
  32. f_merger = PdfMerger()
  33. for pdf in sorted_list:
  34. f_merger.append(pdf)
  35. if os.path.exists(result_pdf):
  36. os.remove(result_pdf)
  37. f_merger.write(result_pdf)
  38. if __name__ == '__main__':
  39. jpg_list = [f for f in os.listdir(images_dir) if f.endswith(".jpg")]
  40. pdf_list = trans_jpg2pdf(jpg_list)
  41. merge_pdf(pdf_list, "result.pdf")

补充

  • webp格式文件转PDF示例
  1. from PIL import Image
  2. im = Image.open("00033.webp")
  3. rgb_im = im.convert("RGB")
  4. rgb_im.save("00033.pdf", 'PDF', resolution=100.0)

原文链接:https://www.cnblogs.com/XY-Heruo/p/18048750

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号