python:PyPDF2 将多个图片转换为pdf,再合并成一个PDF文件

ops/2024/10/22 2:59:14/

承上一篇:java:pdfbox 3.0 去除扫描版PDF中文本水印

# 导出扫描版PDF文件中每页的图片文件

java -jar pdfbox-app-3.0.3.jar export:images -prefix=test -i your_book.pdf
导出
Writing image: test-1.jpg
Writing image: test-2.jpg
Writing image: test-3.png
……
pip install Pillow
pip install pypdf2
  pypdf2-3.0.1-py3-none-any.whl (232 kB)

#  将多个图片转换为pdf,再合并成一个PDF文件

编写 merge_pdf2.py  如下

python"># -*- coding: utf-8 -*-
""" PyPDF2 将多个图片转换为pdf,再合并成一个PDF文件 """
import os
import re
from PIL import Image
from PyPDF2 import PdfMergerimages_dir = "." # imgs
tmpdir = r"\tmp" # Win 10def revise(s):""" 修正图片文件名中的数字,假设0<页数<=999 """prefix = s[0:5]d = s.split('-')[1].split('.')[0]ext = '.pdf'# 数字前补零if len(d) ==1:d = '00'+delif len(d) ==2:d = '0' +delse:passreturn prefix + d + extdef trans_jpg2pdf(jpg_list: list) -> list:"""jpg图片转换成 pdfArgs:jpg_list (list): 图片文件列表Returns:list: 图片转换后的 pdf文件列表"""pdf_list = []for jpg in jpg_list:jpg_path = os.path.join(images_dir, jpg)pdf_file = revise(jpg) # 修正后的pdf文件名pdf_path = os.path.join(tmpdir, pdf_file)if os.path.exists(pdf_path):os.remove(pdf_path)pdf_list.append(pdf_path)im = Image.open(jpg_path)im.save(pdf_path, 'PDF', resolution=100.0)return pdf_listdef merge_pdf(pdf_list: list, result_pdf: str = "result.pdf"):""" 合并 pdf文件Args:pdf_list (list): pdf文件列表result_pdf (str): 合并后的 pdf文件名称"""sorted_list = sorted(pdf_list)f_merger = PdfMerger()for pdf in sorted_list:print(pdf)f_merger.append(pdf)if os.path.exists(result_pdf):os.remove(result_pdf)f_merger.write(result_pdf)if __name__ == '__main__':jpg_list = [f for f in os.listdir(images_dir) if f.endswith(".jpg") or f.endswith(".png")]pdf_list = trans_jpg2pdf(jpg_list)merge_pdf(pdf_list, "result.pdf")

运行 python merge_pdf2.py 
生成 result.pdf ,打开 result.pdf 看不见“文本水印”了。


http://www.ppmy.cn/ops/124193.html

相关文章

Vue常见问题

使用 v-model 而不是 :model 在 el-form 中&#xff0c;应该使用 :model 而不是 v-model。Vue 3 中的 v-model 用于双向绑定&#xff0c;而 :model 用于将数据传递给表单。 怎么创建一个注册表单&#xff0c;带验证功能 输入框记着添加v-model绑定数据在它上边的form-item加上…

Android input系统原理二

1.inputmanager启动源码分析 在SystemServer.java中构造了 inputmanagerservice的对象&#xff0c;在其构造函数中&#xff0c;最重要的是这个nativeInit函数。 下面是核心代码 inputManager new InputManagerService(context);public InputManagerService(Context context)…

如何删除不需要的右键菜单

比如要删除以下右键菜单&#xff1a; 1. 打开“命令提示符”&#xff0c;并输入“regedit”以打开注册表编辑器。或使用快捷键“WinR”打开“运行”窗口&#xff0c;输入“regedit”以打开注册表编辑器。 2. 在注册表编辑器中&#xff0c;找到路径“计算机HKEY_CLASSES_ROOT/Di…

【深度学习】自动微分——Autodiff or Autograd?

论文 [1].CSC321 Lecture 10: Automatic Differentiation [2].Automatic Differentiation in Machine Learning:a Survey 关键点总结&#xff1a; 雅可比矩阵&#xff1a;对于多变量函数 y ⃗ f ( x ⃗ ) \vec{y} f(\vec{x}) y ​f(x )&#xff0c;其梯度矩阵&#xff08;…

Llama-3.2-3B-Instruct PyTorch模型微调最佳实践

1 引言 Meta Llama 3.2多语言大型语言模型集合&#xff08;LM&#xff09;是一个1B和3B大小&#xff08;文本输入/文本输出&#xff09;的预训练和指令微调模型集合。Llama 3.2指令调整的纯文本模型针对多语言对话用例进行了优化&#xff0c;包括智能检索和总结任务。它们在常…

如何将uniapp项目首次提交到指定git仓库

在移动应用开发领域&#xff0c;uniapp凭借其跨平台的优势&#xff0c;已经成为许多开发者的首选框架。创建一个uniapp项目后&#xff0c;将代码提交到版本控制仓库是项目管理的第一步。本文将详细介绍如何将uniapp项目首次提交到指定的Git仓库。 准备工作 在开始之前&#x…

从数据到洞察:ChatGPT如何革新Python数据分析流程

导读&#xff1a;通过ChatGPT与Python的结合&#xff0c;数据分析流程得到了极大的优化和提升&#xff0c;从数据获取、清洗、代码生成到智能分析和可视化展示&#xff0c;每一步都变得更加高效和智能化。这不仅提高了分析的准确性和效率&#xff0c;还降低了技术门槛&#xff…

PigGo的安装配置

TyporaPigGo的使用 1、下载PigGo 1.1、先打开Typora的偏好设置 1.2 下载PigGo app 1.3 下载Setup-xxx.exe版本 1.4安装成功后打开PigGo 2、配置PigGo 1、安装gitee-uploader插件 2、 PicGo设置 ​ ​ 3、图床设置 3.1配置SM.MS 3.1.1 登录sm,生成秘钥 如果没有注册&…