# muPdfTools **Repository Path**: WangWeight/mu-pdf-tools ## Basic Information - **Project Name**: muPdfTools - **Description**: 使用Python编写的PDF工具集,面向pdf文件拆分,裁剪,打印重排等功能。在原有Pdf-tools的基础上进一步完成。功能彻底拆分,减少耦合度,为提供GUI操作提供基础库支持。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-10-07 - **Last Updated**: 2022-01-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mu-PDF-Tools #### 介绍 使用Python+MuPyPdf库编写的PDF文档处理工具集,实现处理pdf文件的裁剪,分割,输出打印版本等工作。 *注意* 在作为独立脚本运行时,参数中的页码值`1`是从书本第一页开始计算,以后依次累加,而是作为模块调用时,函数接受的页码是从`0`开始计算。 #### 软件架构 每个`mu*.py`文件提供对应功能的方法,其中一般提供两个函数,`mu*File`用于生成处理后的文件,`mu*Object`用于返回生成的文件对象,提供给其他方法进一步处理。例如,muMakePrintablePdf中就使用了包括`muSplitPdfObject`和`muCropPdfObject`两种处理方法,在内存中传递上一步的处理对象,不使用临时文件的处理方法。 每个文件,既可以作为独立的处理程序,也可以按照其中的函数定义,处理更复杂的流程,提供给`Python`脚本获取结果。 ##### 1、[muMakePrintablePdf.py](muMakePrintablePdf.py) 此脚本的最初目的为节约双面打印的纸张成本。在双面打印pdf文档时,会将输入pdf文档中相邻四页纸张按照一定的方式,合并成两页文档,以便输出打印,方便装订成书。 ```shell usage: muMakePrintablePdf.py [-h] [-r 0.N] [-sr a-b,c-d] [-ss a,b,c] [-o output_pdf] [-c cover_page] [-m left,top,right,bottom] [-x book1,book2...] input_pdf positional arguments: input_pdf 输入pdf文件名 optional arguments: -h, --help 显示帮助信息 -r 0.N 输出打印版文件后两个页面之间的宽度与页面高度的比例, 默认为0.1 -sr a-b,c-d 从原pdf中提取指定范围的页码生成不同的pdf,页码从1开始计算。 如一部100页的书籍,通过参数'-sr 16-40,50-70'会拆分出'16-40'和'50-70'页的两本书 -ss a,b,c 根据提供的拆分页码将源书籍拆分出N+1本书籍,并使用页码范围为名称 保存。如一部100页的书籍,通过参数'-s 16,40'会被拆分为(1-15),(16-39),(40-100)三本书 -o output_pdf 生成的书籍名称。如果没有提供,则会使用原书籍名追加'_result'保存, 若使用了提取或者拆分,则还会追加页码信息。 -c cover_page 提供页面页码信息,会自动向拆分书籍等首页添加此页面作为书籍首页。 会自动增加一个空白页作为起始页面,默认是不添加。 -m left,top,right,bottom 对书籍页面裁剪的范围缩放,输入为占用页面的比例值,顺序依次是左, 上,右,下,默认都是0.1 -x book1,book2..., --fix-cover book1,book2... 向某拆分书籍增加空白页,用于修复该书籍页码值与书籍翻页方向不一致。 book1从1依次指定,与ss参数中拆分书籍一致。会根据是否提供了'-c'参数判断插入页页面为2还是3 #例如 #python muMakePrintablePdf.py f:/aaa.pdf -> f:/aaa_result.pdf #python muMakePrintablePdf.py f:/aaa.pdf -ss 50,100 -> f:/aaa_1-49_result.pdf,f:/aaa_50-99_result.pdf #python muMakePrintablePdf.py f:/aaa.pdf -sr 10-40 -o f:/output.pdf -> f:/output_10-40_result.pdf ``` * 依赖 [PyMuPDF]() 代码运行效果如下图。
![MergePage2Book](./readme-res/MergePage2Book1.png)
代码成果,未进行重新合并之前的页面截图如下:
![未运行前文档](./readme-res/MergePage2Book2.png)
运行代码后输出的A4页面的效果截图如下:
![运行后输出文档](./readme-res/MergePage2Book3.png)
##### [2、muCropPdf.py](muCropPdf.py) 用于切除PDF中给定的边框(设置为不可见),其中需要给出指定顺序的` 左,上,右,下 `相对于页面宽度的比值。 ```shell usage: muCropPdf.py [-h] [-m left,top,right,bottom] [-o output_pdf] input_pdf positional arguments: input_pdf 待裁剪文件 optional arguments: -h, --help 显示帮助信息 -m left,top,right,bottom 指定页面边缘裁剪的像素值与所在页面宽度/高度的比例值, 一般为0-0.5,默认情况下未指定。 -o output_pdf 输出文件名称,如果没有指定,则会在输入文档的文件名称后 追加`_result` ``` ##### [3、muSplitPdf.py](muSplitPdf.py) 根据输入页码取出范围或者拆分点页码,由源文档生成若干个独立的文档。可以通过指定封面页码为每个生成文档增加封面。 ```shell usage: muSplitPdf.py [-h] [-sr a-b,c-d] [-ss a,b,c] [-o output_pdf] [-c cover_page] input_pdf positional arguments: input_pdf filename of pdf to be handled optional arguments: -h, --help show this help message and exit -sr a-b,c-d select the pages new books will contain,page starts from 1 -ss a,b,c split the INPUT_PDF into several books with the page point -o output_pdf name for generated PDF file,if this was not given,add suffix '_result' to input_pdf name -c cover_page select cover page,specified page will be add to the first page,followed a blank page,.default is -1,which means no cover ``` ##### [4、muInsertPagePdf.py](ArgumentParse.py) 向指定文件对象插入某来源页面。也可向文件对象插入空白页面用于修改打印的页面朝向。详细功能未具体开发。 ##### [4、ArgumentParse.py](ArgumentParse.py) 提供了`mu*.py`用作处理脚本时的参数解析方法。 ##### [5、ShortMessage.py](ShortMessage.py) 提供了若干消息输出打印的方法,体现在终端输出打印消息。 ##### [6、UtilFuction.py](UtilFuction.py) 提供了若干辅助方法,用于处理独立的事项。 #### 安装教程 代码统一的开发测试环境为python3.7.7 64-bit,Win10系统。暂未考虑兼容性问题,因此自行调试。 - 不同的程序文件可能使用了不同的依赖模块,因此在使用前确保相应模块时候正确安装。 - 部分安装包可能存在无法通过`pip install`下载情况(超时),可通过提供的官方下载地址手动下载,本地安装。 #### 使用说明 根据每个程序编写示例,使用以下两种方式引用相应方法。 - 通过编写代码引入相关函数 - 通过Python直接运行脚本 #### 依赖模块 ##### 1、PyMuPDF 1. 官方网站 :[Pypi.org](https://pypi.org/project/PyMuPDF) 2. 文档 :[Readthedocs.io](https://pymupdf.readthedocs.io/en/latest/index.html) 3. Github地址 :[Github.com](https://github.com/pymupdf/PyMuPDF) 4. 下载地址 :[Pypi.org](https://pypi.org/project/PyMuPDF/#files)