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's fitz 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]]'

注釈

  1. 各入力は「ファイル名、パスワード、ページ」の形式で入力してください。パスワードとページはオプションです。

  2. パスワードエントリは「ページ」エントリが使用される場合に必要です。PDFにパスワードが必要ない場合は、2つのコンマを指定してください。

  3. 「ページ」のフォーマットは、このセクションの先頭で説明したものと同じです。

  4. 各入力ファイルは使用後すぐに閉じられます。したがって、出力ファイル名の1つとして使用し、上書きすることができます。

例: 以下のファイルを結合する

  1. file1.pdf: すべてのページ、最前面から最後尾、パスワードなし

  2. file2.pdf: 最後のページ、最前面、パスワード: "secret"

  3. 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 によって生成されたもの):

_images/img-layout-text.jpg

注釈

「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)。 「レイアウト」オプションにのみ関連します。


This software is provided AS-IS with no warranty, either express or implied. This software is distributed under license and may not be copied, modified or distributed except as expressly authorized under the terms of that license. Refer to licensing information at artifex.com or contact Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States for further information.

Discord logo