2 Star 2 Fork 2

LTCTM/PDF合并与拆分

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

本项目原先是针对在学校期间的特定需求维护的,现在毕业了,项目没用了,已经停止维护。不接受新的PR。 尽管如此,我很高兴该项目能为广大开发者提供一定的思路。该项目将一直保留,共大家参考。

使用方法

  1. 双击ui.py使用界面
  2. pdf_ltctm.py内置了命令行工具fire库,可以用命令行调用已有命令。

fire库用法参考官网教程

所有功能均通过调用mutoolpdftk server的命令行实现,需将这两个工具放入PATH目录下或本程序目录下,程序启动时会自动将本目录临时加入环境变量。

  • mutool: 在mupdf官网下载最新版程序,文件名如mupdf-1.x.x-windows.zip,解压后把mutool.exe放入PATH目录下或本程序目录下,另外两个exe文件可以删除。
  • pdftk server
    • pdftk server官网下载最新版程序,注意不要点击显眼位置的如 Also try our friendly Windows application, PDFtk Free! 的链接,需要往下翻一点找到下载链接。
    • 或直接下载长期稳定版
    • 该程序只有安装版,且安装后会自动添加环境变量,无需手动设置。

注意事项

使用合并图片功能时,图片文件夹中不能出现非图片文件,后缀名为常见的bmp,jp(e)g,png或其他pdf规范支持的图片格式都可以。另外,PDF文件也是合法的合并对象,但是合并后会丢失原有的目录。

使用合并功能时,若选择了自动匹配数字功能,则程序会先将匹配了数字的文件重命名为“向左侧补0至5位”,再开始合并。

命令行写法介绍

mutool

mutool官网

rem ====说明:除少数特殊参数外,input文件一般在命令最后,其他选项前面都有形如-a的flag
rem 输出人眼可读目录
rem 把aa.pdf的目录输出到ee.txt
mutool show -g -o ee.txt ./aa.pdf outline

rem ====注意事项:对于那些原来就是由多张图片合成的PDF文件,应使用extract而不是convert
rem 提取图片和字体
rem 提取aa.pdf里的图片,只能放到bash当前工作目录
mutool extract ./aa.pdf

rem ====把多页PDF转换为多个PNG(无法转换为JPG)
rem 把aa.pdf转换为PNG,导出到子文件夹pics下,dpi=300
rem %05d是C语言格式化输出的表示方法,用0在数字前补齐5位,mutool会自动计数
mutool convert -o ./pics/%%05d.png -F PNG -O resolution=300(dpi,默认72) ./aa.pdf

rem ====合并多张图片转为一个PDF,可以接受PNG/JPG/BMP
mutool convert -o abc.pdf -F PDF -O compress 01.png 02.png 03.png

rem ====合并多个PDF到PDF
rem 把pdf1.pdf和pdf2.pdf合并为abc.pdf
mutool merge -o abc.pdf pdf1.pdf pdf2.pdf
rem 合并本文件夹下所有pdf,按名称排序
mutool merge -o abc.pdf *.pdf
rem 把aa.pdf和bb.pdf的指定页面合并为ty.pdf,这个命令不能用通配符
mutool merge -o ty.pdf aa.pdf 2-5 bb.pdf 3-10

pdftk

pdftk官网

rem ====读取和设置pdf附加信息和目录
rem 读取aa.pdf的目录和其他信息,导出至info.txt
rem info.txt这个文件名不能含有中文
pdftk aa.pdf dump_data_utf8 output info.txt
rem 给in.pdf附上如modified_info.txt描述的目录和其他信息,输出为out.pdf
rem pdf附上如modified_info.txt这个文件名不能含有中文
rem 新目录会完全覆盖旧目录
pdftk in.pdf update_info_utf8 modified_info.txt output out.pdf

rem ====合并多个PDF文件
rem 把aa.pdf和bb.pdf合并为yu.pdf,并拼接它们的目录
pdftk aa.pdf bb.pdf cat output yu.pdf
rem 合并本文件夹下所有pdf,按名称排序,并拼接它们的目录
pdftk *.pdf cat output qw.pdf
rem 把aa.pdf和bb.pdf的指定页面合并为yu.pdf,这个命令不能用通配符
pdftk A=aa.pdf B=bb.pdf cat A1-20 B2-5 output yu.pdf
rem 等价于python的zip_longest函数,按名称排序文件序列,然后分别放入每个文件的第1页,每个文件的第2页……,页数少的文件在填充完之后会被忽略
rem shuffle也可用cat的高级功能,如指定页面等
pdftk *.pdf shuffle output tt/out.pdf

rem ====拆分PDF
rem 把bb.pdf拆分成多个单页PDF,名称样式为page%%05d.pdf
rem 输入的PDF名称和输出的PDF组名称都可以指定绝对路径
rem 另外会在工作目录下导出bb.pdf的信息,相当于对bb.pdf使用dump_data
pdftk bb.pdf burst output page%%05d.pdf

rem ====密码相关功能
rem 注意所有跟密码相关的功能不一定总是生效,取决于对方加密用的软件
rem 解密一个有密码的文件
rem 对secured.pdf输入密码“foopass”得到unsecured.pdf这个无密码文件
pdftk secured.pdf input_pw foopass output unsecured.pdf
rem 对有具体权限设置的文件aa.pdf,赋予其全部权限(相当于解密),另存为bb.pdf
pdftk aa.pdf output bb.pdf allow AllFeatures

人工编写命令

用fire命令行执行已有功能

举例如下,其他功能与之类似。注意该脚本必须放在本程序目录下

python pdf_ltctm.py combine_pics_in_subfolders "./" False

其他需求

本程序只整合了常见需求,有些功能的实现需要人工编写命令行。人工编写的命令行应易于人类理解和修改,现举例说明。

假设工作目录下有4000个5页的PDF,现在需要合并它们第4页到D:/aa/bb.pdf,python生成的命令行如下

mutool merge -o D:/aa/bb.pdf 0001.pdf 4 0002.pdf 4 ... 4000.pdf 4

这个命令是正确的,但是理论上不可能由人工编写。而且在Windows上此命令超过了8191字符的限制,不能直接使用。

最易于理解的写法如下

pdftk *.pdf shuffle output D:/aa/bb_tmp.pdf
pdftk A=D:/aa/bb_tmp.pdf cat A16001-20000 output D:/aa/bb.pdf

这个bat文件无需放在本程序目录下。

关于中文路径

若路径中含有中文,则bat文件在编写时必须保存为utf-8字符集,且需在bat脚本的首行写上chcp 65001

另外,pdftk server相关命令中的部分参数不能传入含有中文的文件名,且官方文档未说明哪些功能的哪些参数不能含有中文名,只能自己尝试。目前已知要导入的目录文件名和要导出的目录的文件名不能是中文。

空文件

简介

用pysimplegui作为界面,用命令行工具实现pdf处理的小工具。 主要亮点是可以批量分别合成多个文件夹内的图片,分别输出PDF 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/ltctm/pdf_merge_and_split.git
git@gitee.com:ltctm/pdf_merge_and_split.git
ltctm
pdf_merge_and_split
PDF合并与拆分
master

搜索帮助