今日も微速転進

ここではないどこかへ

macOS でPDF分割(コマンドライン編)


スポンサーリンク

以前はpdftk というツールがHomebrew 経由で簡単にインストールできたみたいだが、現在はインストールできない。

開発元のサイト自体は存在しているし、Windows用のバイナリは配布されている。

多分、GCCJavaのサポートを外したとか、諸事情が重なったんだろうと思う。

GUIの場合はOS標準のプレビュー.appを使えば可能

代替手段としてMuPDFというのを試してみる。

MuPDF

インストール

Homebrew はセットアップ済みという前提。MuPDFの本体は特に用はないのでスルーする。

$ brew install mupdf-tools

コマンド一発。

使い方

mutoolコマンドに続けてサブコマンドと引数を指定する形式。詳細はman mutoolで確認のこと。

mutool サブコマンド 入力PDF

サブコマンドによってオプションと引数の形式は異なる。

mutool command man page - mupdf | ManKier

対応している入力ファイルフォーマット

マニュアルページより。

  • PDF
  • XPS
  • cbz (Comic Book Zip ?)
  • epub

PDFとXPSは理解できるがが他はPDFリーダーの仕事かと言われると疑問。便利なのはいいことだけど不思議。

対応している出力ファイルフォーマット

マニュアルページより。

  • 画像ファイル系(pbm、pgm、ppm、pam,、png、tga、pwg、pcl、ps)
  • ベクトル形式のフォーマット(SVG、PDF、 XML (debug trace)
  • 構造家テキスト系(plain text、HTML、structured text (as xml))

知らないファイル形式がいくつかあるが、使わないのでスルーする。

きになる場合は、Wikipedia を参照(特に末尾の表)。

画像ファイルフォーマット - Wikipedia

サブコマンドの一覧

サブコマンドは以下のとおり。一部のサブコマンドを除き、カンマ区切り or ハイフンでのページ範囲指定可能。

  • draw : PDF を1ページずつ画像に変換
  • clean : 壊れたPDFの修復、画像データの圧縮・展開、不要なページの除去
  • extract : PDFに含まれる画像データやフォントを取り出す
  • info : PDFに含まれるリソースの情報を表示する
  • create : “Special comments” を含むテキストファイルから新しいPDFを作成する
  • pages : PDF内のページについてサイズや方向などの情報を表示する
  • poster : PDFの各ページをM x N のタイル上に分割する(名前の通り学会のポスター発表用?)
  • show : PDFに埋め込まれたデータを出力する
  • run : 引数に指定されたJavascript を実行する
  • convert : PDFから他形式に変換(EPUBなど)
  • merge : 複数のPDFを結合して新しいPDFファイルを作成する

具体例

全ての機能を試すのはしんどいので必要なやつだけ。

特定ページを抜き取る

サブコマンドの使い分けがはっきりしないが、1ページ1ファイルで画像化したいならmutool draw、一つのファイルにしたいならmutool cleanか。

指定したページを1ページずつ画像として出力

入力PDFから特定のページを画像として出力する場合はdrawサブコマンドを使う。出力ファイルが複数になる場合は"%d"形式で連番の数字フォーマトをコントロールできる。

実行例:

$ mutool draw -o page%d.png   input.pdf  1,2,3

以下のように1ページ1ファイルで出力される。

$ ls *.png
page1.png page2.png page3.png

ビットマップ系の画像データにする場合は日本語のPDFでも動作する。ただし、下記のような警告が表示される。

warning: not building glyph bbox table for font 'IQKVNB+HiraMinProN-W3' with 22921 glyphs

出力ファイル形式をPDFにした場合は1つのファイルに出力される。この場合、日本語フォントの埋め込まれたPDFでは上手くいかない。

特定のページだけを抜き出して新しいPDFを作成

mutool cleanに続けて「入力ファイル名」、「出力ファイル名」、「ページ範囲」を指定する形式。細かいオプションはマニュアル参照。

実行例:

$ mutool clean  input.pdf  output.pdf 1,2,3

特にオプションを指定しない限り日本語のフォントが埋め込まれていても問題ない。

まとめ

他の機能も機会があれば説明を追加するかも。


とりあえずここまで。

広告