PyMuPDF 1.24.4 中文文档(六)(1)https://developer.aliyun.com/article/1559575
提取
像这样提取嵌入文件:
pymupdf embed-extract -h usage: fitz embed-extract [-h] -name NAME [-password PASSWORD] [-output OUTPUT] input ---------------------- extract embedded file to disk ---------------------- positional arguments: input PDF filename optional arguments: -h, --help show this help message and exit -name NAME name of entry -password PASSWORD password -output OUTPUT output filename, default is stored name
有关详细信息,请参阅Document.embfile_get()
。示例(参考上一节):
pymupdf embed-extract some.pdf -name neue.datei Saved entry 'neue.datei' as 'text-tester.pdf'
删除
像这样删除嵌入文件:
pymupdf embed-del -h usage: fitz embed-del [-h] [-password PASSWORD] [-output OUTPUT] -name NAME input --------------------------- delete embedded file -------------------------- positional arguments: input PDF filename optional arguments: -h, --help show this help message and exit -password PASSWORD password -output OUTPUT output PDF filename, incremental save if none -name NAME name of entry to delete
有关详细信息,请参阅Document.embfile_del()
。
插入
使用此命令添加新的嵌入文件:
pymupdf embed-add -h usage: fitz embed-add [-h] [-password PASSWORD] [-output OUTPUT] -name NAME -path PATH [-desc DESC] input ---------------------------- add embedded file ---------------------------- positional arguments: input PDF filename optional arguments: -h, --help show this help message and exit -password PASSWORD password -output OUTPUT output PDF filename, incremental save if none -name NAME name of new entry -path PATH path to data for new entry -desc DESC description of new entry
“名称” 绝对不应该已经存在于 PDF 中。有关详细信息,请参阅Document.embfile_add()
。
更新
使用此命令更新现有的嵌入文件:
pymupdf embed-upd -h usage: fitz embed-upd [-h] -name NAME [-password PASSWORD] [-output OUTPUT] [-path PATH] [-filename FILENAME] [-ufilename UFILENAME] [-desc DESC] input --------------------------- update embedded file -------------------------- positional arguments: input PDF filename optional arguments: -h, --help show this help message and exit -name NAME name of entry -password PASSWORD password -output OUTPUT Output PDF filename, incremental save if none -path PATH path to new data for entry -filename FILENAME new filename to store in entry -ufilename UFILENAME new unicode filename to store in entry -desc DESC new description to store in entry except '-name' all parameters are optional
使用此方法更改文件的元信息 - 只需省略*“路径”*。有关详细信息,请参阅Document.embfile_upd()
。
复制
在 PDF 之间复制嵌入的文件:
pymupdf embed-copy -h usage: fitz embed-copy [-h] [-password PASSWORD] [-output OUTPUT] -source SOURCE [-pwdsource PWDSOURCE] [-name [NAME [NAME ...]]] input --------------------- copy embedded files between PDFs -------------------- positional arguments: input PDF to receive embedded files optional arguments: -h, --help show this help message and exit -password PASSWORD password of input -output OUTPUT output PDF, incremental save to 'input' if omitted -source SOURCE copy embedded files from here -pwdsource PWDSOURCE password of 'source' PDF -name [NAME [NAME ...]] restrict copy to these entries
文本提取
- v1.18.16 中的新功能
从任意支持的文档中提取文本到文本文件。目前,有三种输出格式模式可用:简单,块排序和复制物理布局。
- 简单文本提取会将所有文本复制到文档页面中 - 不会进行任何特定的阅读顺序重新排列。
- 块排序按升序垂直,然后水平坐标对文本块(由 MuPDF 标识)进行排序。这应足以建立基本文本页的“自然”阅读顺序。
- 布局 力求复制输入页面的原始外观。你可以期待如下结果(由命令
pymupdf gettext -pages 1 demo1.pdf
生成):
注意
“gettext” 命令提供了一种类似于 XPDF 软件的 CLI 工具 pdftotext
的功能,www.foolabs.com/xpdf/
— 这对于“布局”模式尤其如此,该模式结合了该工具的 -layout
和 -table
选项。
在输出文件的每一页之后,都会写入一个换页符,hex(12)
— 即使输入页面根本没有文本。此行为可以通过选项进行控制。
注意
对于“布局”模式,仅支持水平、从左到右、从上到下的文本,其他文本将被忽略。在此模式下,如果文本的fontsize
太小,则也将被忽略。
“Simple” 和 “blocks” 模式在对比输出中会显示所有文本,无论文本大小或方向如何。
命令:
pymupdf gettext -h usage: fitz gettext [-h] [-password PASSWORD] [-mode {simple,blocks,layout}] [-pages PAGES] [-noligatures] [-convert-white] [-extra-spaces] [-noformfeed] [-skip-empty] [-output OUTPUT] [-grid GRID] [-fontsize FONTSIZE] input ----------------- extract text in various formatting modes ---------------- positional arguments: input input document filename optional arguments: -h, --help show this help message and exit -password PASSWORD password for input document -mode {simple,blocks,layout} mode: simple, block sort, or layout (default) -pages PAGES select pages, format: 1,5-7,50-N -noligatures expand ligature characters (default False) -convert-white convert whitespace characters to space (default False) -extra-spaces fill gaps with spaces (default False) -noformfeed write linefeeds, no formfeeds (default False) -skip-empty suppress pages with no text (default False) -output OUTPUT store text in this file (default inputfilename.txt) -grid GRID merge lines if closer than this (default 2) -fontsize FONTSIZE only include text with a larger :data:`fontsize` (default 3)
注意
只要不引入歧义,命令选项可以缩写。因此,以下命令执行相同的操作:
... -output text.txt -noligatures -noformfeed -convert-white -grid 3 -extra-spaces ...
... -o text.txt -nol -nof -c -g 3 -e ...
输出文件名默认为输入文件名,其扩展名替换为 .txt
。与其他命令一样,你可以按照上面所示的 mutool
格式选择页面范围**(注意:基于 1)**。
- 模式:(str)选择格式模式 — 默认为“布局”。
- 去连字:(bool)对应于非
TEXT_PRESERVE_LIGATURES
。如果指定,连字(在高级字体中存在的字形,如“fi”组合多个字符的字形)将被分割成它们的组件(即“f”,“i”)。默认为传递它们。 - 转换白色:对应于非
TEXT_PRESERVE_WHITESPACE
。如果指定,所有空白字符(如制表符)将替换为一个或多个空格。默认为传递它们。 - 额外空格:(bool)对应于非
TEXT_INHIBIT_SPACES
。如果指定,相邻字符之间的大间隙将用一个或多个空格填充。默认为关闭。 - 无换页符:(bool)在输出页面末尾写入换行符
n
,而不是hex(12)
(换页符)。 - 跳过空白页:(bool)跳过没有文本的页面。
- grid:垂直坐标差异不超过此值(以点为单位)的线将合并到同一输出行中。仅适用于“layout”模式。慎用:在大多数情况下,3 或默认的 2 应该足够。如果太大,原始中意图不同的线可能会被合并,导致输出混乱和/或不完整。如果太低,则可能会为输入行中的某些跨度生成单独的输出行,仅因为它们以稍微不同的字体编码并具有略微偏离的属性。
- **fontsize:**仅包括文本大于此值的
fontsize
(默认为 3)。仅适用于“layout”选项。
对本页有任何反馈吗?
此软件按原样提供,不带任何明示或暗示的担保。此软件在许可下分发,未经明确授权不得复制、修改或分发。有关详细信息,请参阅artifex.com上的许可信息或联系 Artifex Software Inc.,39 Mesa Street,Suite 108A,San Francisco CA 94129,美国。
本文档覆盖了所有版本直至 1.24.4。
调用
命令行界面可以通过两种方式调用。
- 使用已安装的
pymupdf
命令:
pymupdf <command and parameters>
- 或者使用 Python 的
-m
开关与 PyMuPDF 的fitz
模块:
python -m fitz <command and parameters>
一般备注:
- 通过
"-h"
请求帮助,或通过"command -h"
请求特定命令的帮助。 - 在不引入歧义的情况下,参数可以缩写。
- 几个命令支持参数
-pages
和-xrefs
。它们用于下拉选择。请注意:
- 此实用程序的页面编号必须以基于 1 的方式给出。
- 有效的
xref
编号从 1 开始。- 指定一个以逗号分隔的单个整数或整数范围的列表。范围是由一个连字符“-”分隔的两个整数对。整数不得超过最大页面或 xref 编号。为了指定最大值,可以使用符号变量“N”。整数或范围可以多次出现,顺序任意,并且可以重叠。如果在范围内第一个数字大于第二个数字,则将按相反顺序处理相应项。
- 如何在您的脚本内使用该模块:
>>> import pymupdf.__main__ >>> cmd = "clean input.pdf output.pdf -pages 1,N".split() # prepare command line >>> saved_parms = sys.argv[1:] # save original command line >>> sys.argv[1:] = cmd # store new command line >>> pymupdf.__main__.() # execute module >>> sys.argv[1:] = saved_parms # restore original command line
- 使用以下 2 行代码并以独立模式编译它,可以使用Nuitka。这将为您提供一个带有所有模块功能的 CLI 可执行文件,可在所有兼容的平台上使用,无需安装 Python、PyMuPDF 或 MuPDF。
from pymupdf.__main__ import main main()
清理和复制
此命令将优化 PDF 并将结果存储在新文件中。您也可以将其用于加密、解密和创建子文档。它与 MuPDF 命令行实用程序*“mutool clean”*大致相似:
pymupdf clean -h usage: fitz clean [-h] [-password PASSWORD] [-encryption {keep,none,rc4-40,rc4-128,aes-128,aes-256}] [-owner OWNER] [-user USER] [-garbage {0,1,2,3,4}] [-compress] [-ascii] [-linear] [-permission PERMISSION] [-sanitize] [-pretty] [-pages PAGES] input output -------------- optimize PDF or create sub-PDF if pages given -------------- positional arguments: input PDF filename output output PDF filename optional arguments: -h, --help show this help message and exit -password PASSWORD password -encryption {keep,none,rc4-40,rc4-128,aes-128,aes-256} encryption method -owner OWNER owner password -user USER user password -garbage {0,1,2,3,4} garbage collection level -compress compress (deflate) output -ascii ASCII encode binary data -linear format for fast web display -permission PERMISSION integer with permission levels -sanitize sanitize / clean contents -pretty prettify PDF structure -pages PAGES output selected pages, format: 1,5-7,50-N
如果指定了“-pages”,请注意仅复制与页面相关的对象,不包括文档级项目,例如嵌入文件。
请参阅 Document.save()
以了解参数含义。
PyMuPDF 1.24.4 中文文档(六)(3)https://developer.aliyun.com/article/1559577