2 Star 2 Fork 2

LTCTM/PDF合并与拆分

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
3年前
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相关命令中的部分参数不能传入含有中文的文件名,且官方文档未说明哪些功能的哪些参数不能含有中文名,只能自己尝试。目前已知要导入的目录文件名和要导出的目录的文件名不能是中文。

MIT License Copyright (c) 2022 bluequilt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

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

发行版

暂无发行版

贡献者 (2)

全部

语言

近期动态

接近2年前推送了新的提交到 master 分支,74fa09e...0cf8cbc
接近2年前评论了 PR !1 【轻量级 PR】:增加了拆分功能
接近2年前关闭了 PR #1 【轻量级 PR】:增加了拆分功能
接近2年前创建了 PR #1 【轻量级 PR】:增加了拆分功能
接近3年前推送了新的提交到 master 分支,2f0aaa9...74fa09e
加载更多
不能加载更多了
马建仓 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

搜索帮助