Command line interface#
バージョン 1.16.8 で新たに追加されました
PyMuPDFは、ユーティリティ機能を実行するためにモジュールとしてコマンドラインで使用することもできます。この機能により、最も基本的なスクリプトの記述が廃止される可能性があります。
確かに、MuPDF CLI mutool
といくつかの機能的な重複があります。一方で、PDFの埋め込みファイルはもはやMuPDFではサポートされていないため、PyMuPDFはここで独自の機能を提供しています。
呼び出し#
コマンドラインインターフェースは2つの方法で呼び出すことができます。
インストールされた
pymupdf
のコマンドを使用します。pymupdf <command and parameters>
Or use Python's
-m
switch with PyMuPDF'sfitz
module:python -m fitz <command and parameters>
一般的な注意事項:
ヘルプを要求するには、
"-h"
、またはコマンド固有のヘルプを要求するには"command -h"
を使用します。曖昧さが生じない場所では、パラメータは省略形で指定できます。
いくつかのコマンドは、
-pages
と-xrefs
のパラメータをサポートしています。これらは選択範囲を絞るためのものです。以下に注意してください:このユーティリティでは、ページ番号 は1から始まる必要があります。
有効な
xref
番号は1から始まります。シングル整数または整数の範囲のコンマ区切りのリストを指定します。範囲は、ハイフン " - " で区切られた整数のペアです。整数は、最大ページまたは xref 番号を超えてはいけません。最大値を指定するには、記号変数 "N" を使用できます。整数または範囲は複数回、任意の順序で重複して出現する可能性があります。範囲内の最初の数値が2番目の数値よりも大きい場合、それらのアイテムは逆順で処理されます。
スクリプト内でモジュールを使用する方法:
>>> 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 をスタンドアロンモードでコンパイルします。これにより、Python、PyMuPDF、またはMuPDFがインストールされていないすべての互換プラットフォームで使用できる、モジュールのすべての機能を備えたCLI実行可能ファイルが得られます。
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()
をご参照ください。
フォントと画像の抽出#
選択したPDFページからフォントや画像を指定したディレクトリに抽出します:
pymupdf extract -h
usage: fitz extract [-h] [-images] [-fonts] [-output OUTPUT] [-password PASSWORD]
[-pages PAGES]
input
--------------------- extract images and fonts to disk --------------------
positional arguments:
input PDF filename
optional arguments:
-h, --help show this help message and exit
-images extract images
-fonts extract fonts
-output OUTPUT output directory, defaults to current
-password PASSWORD password
-pages PAGES only consider these pages, format: 1,5-7,50-N
画像のファイル名 は、命名規則に従って構築されます: "img-xref.ext" で、"ext" は画像に関連する拡張子であり、"xref" は画像PDFオブジェクトの xref
です。
フォントのファイル名 は、フォント名と関連する拡張子から構成されます。フォント名にスペースがある場合、ハイフン "-" で置き換えられます。
出力ディレクトリはすでに存在している必要があります。
注釈
出力ディレクトリの作成を除いて、この機能は このスクリプト と機能的に同等であり、これを使うことで廃止できます。
PDF文書の結合#
複数のPDFファイルを結合するには、次のように指定します:
pymupdf join -h
usage: fitz join [-h] -output OUTPUT [input [input ...]]
---------------------------- join PDF documents ---------------------------
positional arguments:
input input filenames
optional arguments:
-h, --help show this help message and exit
-output OUTPUT output filename
specify each input as 'filename[,password[,pages]]'
注釈
各入力は「ファイル名、パスワード、ページ」の形式で入力してください。パスワードとページはオプションです。
パスワードエントリは「ページ」エントリが使用される場合に必要です。PDFにパスワードが必要ない場合は、2つのコンマを指定してください。
「ページ」のフォーマットは、このセクションの先頭で説明したものと同じです。
各入力ファイルは使用後すぐに閉じられます。したがって、出力ファイル名の1つとして使用し、上書きすることができます。
例: 以下のファイルを結合する
file1.pdf: すべてのページ、最前面から最後尾、パスワードなし
file2.pdf: 最後のページ、最前面、パスワード: "secret"
file3.pdf: 5ページから最後尾、パスワードなし
そして結果を output.pdf として保存するには、次のコマンドを入力してください:
pymupdf join -o output.pdf file1.pdf,,N-1 file2.pdf,secret,N,1 file3.pdf,,5-N
低レベル情報#
PDFの内部情報を表示します。再度、 「mutool show」 との類似点があります。
pymupdf show -h
usage: fitz show [-h] [-password PASSWORD] [-catalog] [-trailer] [-metadata]
[-xrefs XREFS] [-pages PAGES]
input
------------------------- display PDF information -------------------------
positional arguments:
input PDF filename
optional arguments:
-h, --help show this help message and exit
-password PASSWORD password
-catalog show PDF catalog
-trailer show PDF trailer
-metadata show PDF metadata
-xrefs XREFS show selected objects, format: 1,5-7,N
-pages PAGES show selected pages, format: 1,5-7,50-N
例:
pymupdf show x.pdf
PDF is password protected
pymupdf show x.pdf -pass hugo
authentication unsuccessful
pymupdf show x.pdf -pass jorjmckie
authenticated as owner
file 'x.pdf', pages: 1, objects: 19, 58 MB, PDF 1.4, encryption: Standard V5 R6 256-bit AES
Document contains 15 embedded files.
pymupdf show FDA-1572_508_R6_FINAL.pdf -tr -m
'FDA-1572_508_R6_FINAL.pdf', pages: 2, objects: 1645, 1.4 MB, PDF 1.6, encryption: Standard V4 R4 128-bit AES
document contains 740 root form fields and is signed
------------------------------- PDF metadata ------------------------------
format: PDF 1.6
title: FORM FDA 1572
author: PSC Publishing Services
subject: Statement of Investigator
keywords: None
creator: PScript5.dll Version 5.2.2
producer: Acrobat Distiller 9.0.0 (Windows)
creationDate: D:20130522104413-04'00'
modDate: D:20190718154905-07'00'
encryption: Standard V4 R4 128-bit AES
------------------------------- PDF trailer -------------------------------
<<
/DecodeParms <<
/Columns 5
/Predictor 12
>>
/Encrypt 1389 0 R
/Filter /FlateDecode
/ID [ <9252E9E39183F2A0B0C51BE557B8A8FC> <85227BE9B84B724E8F678E1529BA8351> ]
/Index [ 1388 258 ]
/Info 1387 0 R
/Length 253
/Prev 1510559
/Root 1390 0 R
/Size 1646
/Type /XRef
/W [ 1 3 1 ]
>>
埋め込みファイルコマンド#
以下のコマンドは埋め込みファイルに関するもので、MuPDF v1.14以降から完全に削除され、そのためすべてのコマンドラインツールからも削除されています。
情報#
埋め込みファイルの名前を表示します(長いフォーマットまたは短いフォーマット):
pymupdf embed-info -h
usage: fitz embed-info [-h] [-name NAME] [-detail] [-password PASSWORD] input
--------------------------- list embedded files ---------------------------
positional arguments:
input PDF filename
optional arguments:
-h, --help show this help message and exit
-name NAME if given, report only this one
-detail show detail information
-password PASSWORD password
例:
pymupdf embed-info some.pdf
'some.pdf' contains the following 15 embedded files.
20110813_180956_0002.jpg
20110813_181009_0003.jpg
20110813_181012_0004.jpg
20110813_181131_0005.jpg
20110813_181144_0006.jpg
20110813_181306_0007.jpg
20110813_181307_0008.jpg
20110813_181314_0009.jpg
20110813_181315_0010.jpg
20110813_181324_0011.jpg
20110813_181339_0012.jpg
20110813_181913_0013.jpg
insta-20110813_180944_0001.jpg
markiert-20110813_180944_0001.jpg
neue.datei
詳細な出力は、各エントリごとに以下のようになります:
name: neue.datei
filename: text-tester.pdf
ufilename: text-tester.pdf
desc: nur zum Testen!
size: 4639
length: 1566
抽出#
埋め込みファイルを以下のように抽出します:
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
"NAME" は既に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
ファイルのメタ情報を変更するために、この方法を使用します - 単に「PATH」を省略してください。詳細については、 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で新登場
任意の サポートされたドキュメント からテキストをテキストファイルに抽出します。現在、3つの出力フォーマットモードが利用可能です:シンプル、ブロックソート、物理的なレイアウトの再現。
シンプル なテキスト抽出は、ドキュメントページに表示される通りのすべてのテキストを再現します - 特定の読み取り順序に再配置する努力は行われません。
ブロックソート は、テキストブロック(MuPDFによって識別される)を垂直座標、水平座標の昇順に並べ替えます。これは、基本的なテキストページの「自然な」読み取り順序を確立するために十分です。
レイアウト は、入力ページの元の外観を再現しようとします。次のような結果が期待できます(コマンド
pymupdf gettext -pages 1 demo1.pdf
によって生成されたもの):
注釈
「gettext」コマンドは、XPDFソフトウェアのCLIツール pdftotext
と似た機能を提供します。http://www.foolabs.com/xpdf/ - これは特に「レイアウト」モードに当てはまり、このモードはそのツールの -layout
と -table
オプションを組み合わせています。
出力ファイルの各ページの後に、フォームフィード文字 hex(12)
が書き込まれます - 入力ページにテキストがない場合でもです。この動作はオプションを介して制御できます。
注釈
「レイアウト」モードでは、水平方向、左から右、上から下のテキストのみがサポートされ、他のテキストは無視されます。また、このモードでは、fontsize
が小さすぎる場合もテキストが無視されます。
対照的に、「シンプル」モードと「ブロック」モードでは、テキストのサイズや向きに関係なくすべてのテキストが出力されます。
コマンド:
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から始まる)を選択できます。
mode: (str) フォーマットモードを選択します - デフォルトは「レイアウト」です。
noligatures: (bool)
TEXT_PRESERVE_LIGATURES
に相当します。指定された場合、リガチャ(複数の文字を結合するグリフ、例:「fi」のようなもの)はその構成要素(つまり「f」、「i」)に分割されます。デフォルトはそのまま通過させることです。convert-white:
TEXT_PRESERVE_WHITESPACE
に相当します。指定された場合、すべての空白文字(タブなど)は1つ以上のスペースに置き換えられます。デフォルトはそのまま通過させることです。extra-spaces: (bool)
TEXT_INHIBIT_SPACES
に相当します。指定された場合、隣接する文字間の大きな間隔は1つ以上のスペースで埋められます。デフォルトはオフです。noformfeed: (bool)
hex(12)
(フォームフィード)の代わりに、出力ページの末尾に\n
個の改行を書き込みます。skip-empty: ((bool) テキストがないページをスキップします。
grid: 垂直座標の差がこの値(ポイント単位)を超えない行は、同じ出力行に結合されます。 「レイアウト」モードにのみ関連します。注意して使用してください: ほとんどの場合、3またはデフォルトの2が適切です。大きすぎると、元のフォントで異なる行が結合され、文字化けや不完全な出力が発生する可能性があります。低すぎると、入力行の一部の範囲で個別の出力行が生成されることがありますが、これはわずかに異なる特性を持つ別のフォントでコーディングされているためです。
fontsize: この値よりも大きな
fontsize
を持つテキストのみを含めます(デフォルト3)。 「レイアウト」オプションにのみ関連します。