📰

PDFを結合するツール (CLI)

2024/06/18に公開

概要

PDFを結合できるツールで良いのが無いか気になり、ちょっと調べてみた。社内システムのサーバーに組み込めそうなやつが欲しくて。

結論

PDFBoxすごく良さげ。💪

まとめ

tool command last version last update auther license platform memo
PDFBox merge
PDFMerger
3.0.2
2.0.31
2024-03
2024-03
Apache Apache License v2.0 java 8
java 6
安心のApache。javaライブラリもあり。
Poppler pdfunite 24.06.1
(24.02.0-0)
2024-06
(2024-02)
freedesktop.org GPL linux
(win (x64))
実行バイナリは3rdから。
PDFtk Free pdftk 2.02 2013-07 Sid Steward GPL+ win (x86) 古い。。。

「開発元が信頼できる大手」で、
「公式で実行バイナリが入手可能」で、
「マルチ プラットフォーム (Java)」で
「最近も更新されている」で、
「ライブラリ提供もあり、Javaで実装組み込みも可能」で、
「Apache License (弱いコピーレフト)」
とか、PDFBox強すぎる。。。

ツールと結合コマンド

PDFBox

https://pdfbox.apache.org/

PDFBox standalone が実行用ツール。v3.0系とv2.0系でコマンド引数が違う。実行結果については、簡単に行ってみたが、一応同様になった。

v3.x (java 8)

cmd
java -jar pdfbox-app-3.0.2.jar
USAGE
Usage: pdfbox [COMMAND] [OPTIONS]
Commands:
  debug          Analyzes and inspects the internal structure of a PDF document
  decrypt        Decrypts a PDF document
  encrypt        Encrypts a PDF document
  decode         Writes a PDF document with all streams decoded
  export:images  Extracts the images from a PDF document
  export:xmp     Extracts the xmp stream from a PDF document
  export:text    Extracts the text from a PDF document
  export:fdf     Exports AcroForm form data to FDF
  export:xfdf    Exports AcroForm form data to XFDF
  import:fdf     Imports AcroForm form data from FDF
  import:xfdf    Imports AcroForm form data from XFDF
  overlay        Adds an overlay to a PDF document
  print          Prints a PDF document
  render         Converts a PDF document to image(s)
  merge          Merges multiple PDF documents into one
  split          Splits a PDF document into number of new documents
  fromimage      Creates a PDF document from images
  fromtext       Creates a PDF document from text
  version        Gets the version of PDFBox
  help           Display help information about the specified command.
See 'pdfbox help <command>' to read about a specific subcommand
結合コマンド
java -jar pdfbox-app-3.0.2.jar merge -i in_1.pdf -i in_2.pdf -i in_3.pdf -i in_4.pdf -o out.pdf

v2.x (java 6)

cmd
java -jar pdfbox-app-2.0.31.jar
USAGE
PDFBox version: "2.0.31"
Usage: java -jar pdfbox-app-x.y.z.jar <command> <args..>

Possible commands are:
  Decrypt
  Encrypt
  ExtractText
  ExtractXMP
  ExtractImages
  OverlayPDF
  PrintPDF
  PDFDebugger
  PDFMerger
  PDFReader
  PDFSplit
  PDFToImage
  TextToPDF
  WriteDecodedDoc
結合コマンド
java -jar pdfbox-app-2.0.31.jar PDFMerger in_1.pdf in_2.pdf in_3.pdf in_4.pdf out.pdf

Poppler

https://poppler.freedesktop.org/

公式にはWindowsバイナリがないので、

https://pdf-file.nnn2.com/?p=863

こちらの記事を参考に、Windowsバイナリを入手。

cmd
pdfunite
USAGE
pdfunite version 24.02.0
Copyright 2005-2024 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011, 2022 Glyph & Cog, LLC
Usage: pdfunite [options] <PDF-sourcefile-1>..<PDF-sourcefile-n> <PDF-destfile>
  -v             : print copyright and version info
  -h             : print usage information
  -help          : print usage information
  --help         : print usage information
  -?             : print usage information
結合コマンド
pdfunite in_1.pdf in_2.pdf in_3.pdf in_4.pdf out.pdf

PDFtk

https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

どうやら PDFtk Free には PDFtk Server も同梱しているとのことで。無駄なものも入れたくなく、PDFtk Server をインストール。

image.png
(古い。。。)

コマンドは

https://www.pdflabs.com/docs/pdftk-cli-examples/

を参考。

cmd
pdftk
USAGE
SYNOPSIS
       pdftk <input PDF files | - | PROMPT>
            [ input_pw <input PDF owner passwords | PROMPT> ]
            [ <operation> <operation arguments> ]
            [ output <output filename | - | PROMPT> ]
            [ encrypt_40bit | encrypt_128bit ]
            [ allow <permissions> ]
            [ owner_pw <owner password | PROMPT> ]
            [ user_pw <user password | PROMPT> ]
            [ flatten ] [ need_appearances ]
            [ compress | uncompress ]
            [ keep_first_id | keep_final_id ] [ drop_xfa ] [ drop_xmp ]
            [ verbose ] [ dont_ask | do_ask ]
       Where:
            <operation> may be empty, or:
            [ cat | shuffle | burst | rotate |
              generate_fdf | fill_form |
              background | multibackground |
              stamp | multistamp |
              dump_data | dump_data_utf8 |
              dump_data_fields | dump_data_fields_utf8 |
              dump_data_annots |
              update_info | update_info_utf8 |
              attach_files | unpack_files ]

       For Complete Help: pdftk --help
結合コマンド
pdftxk in_1.pdf in_2.pdf in_3.pdf in_4.pdf cat output out.pdf

出力検証

サンプル

Microsoft Wordにてサンプルを作成、PDF出力。

オリジナル (Microsoft Word)

image.png

PDF

image.png

PDF (ASCII表示)

image.pdf

結果

結合PDF

基本的にはみんな一緒。縦横のドキュメントが混じった、ページ設定の違うドキュメントでも、それらを維持して結合されている。また、fontも。
image.png

結合PDF (ASCII表示)

ツールごとに出力されるPDFのバージョンは異なっていた。まぁでもこれは大した問題ではないかと思われる。「内部エンジンが同じで、どのツールで出力しても全く同じ結果になる。」というわけでは無いことがわかる。

tool PDF version
PDFBox 3.0.2 1.6
PDFBox 2.0.31 1.4
Poppler 1.7
PDFtk Free 1.7

image.png

その他

他にも Coherent PDF など、たくさんツールがあるかと思いうが、とりあえずはこのへんで。。。

謝辞🙇

Discussion