翼度科技»论坛 编程开发 python 查看内容

[python]将多张图片合并为单个pdf文件

12

主题

12

帖子

36

积分

新手上路

Rank: 1

积分
36
前言

最近有个个人需求是要把多个图片文件合并为一个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.   
  3. im = Image.open("00033.webp")  
  4. rgb_im = im.convert("RGB")  
  5. rgb_im.save("00033.pdf", 'PDF', resolution=100.0)
复制代码
来源:https://www.cnblogs.com/XY-Heruo/p/18048750
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具