ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

PDFファイルの任意のページを抽出する

(2024-09-17 初稿 )

PDFファイルの任意の複数ページを選んで、新たなPDFファイルを作成したいときがある。

このようなときDebianLinuxでは、コマンドラインで操作する pdftk が便利だ。

pdftkは、任意ページの抽出だけでなく、結合や回転等、様々な操作を行うことができるツールだ。

pdftkの使い方は、以下のサイトがわかりやすく解説してくれている。多謝。

ただし、pdftkで任意のページの抽出する場合、コマンドの引数が多く、覚えにくいのが難点。

具体的には、abc.pdfのP2、P5、P8を抽出する場合は、以下のコマンドになる。

$ pdftk abc.pdf cat 2 5 8 output output.pdf

とても、筆者には覚えられそうにない。^^;

そこで、bashでpdfファイルから任意ページを抽出するだけの簡単なスクリプトを作成することにした。

準備

スクリプトの作成の前に、pdftkがインストールされていない場合は、インストールする必要がある。

Debian等では、インストールは以下のとおり。

$ sudo apt install pdftk

スクリプトの作成とちょっと解説

スクリプトの名前は、pdf-cutと安直な名前にした。(^^ゞ

使い方は、以下のとおり、コマンドの後、ターゲットPDFファイル名と抽出するページを任意の数だけ列挙する。

$ pdf-cut target.pdf 2 3 5 8

上記の例では、target.pdfファイルから、P2、3、5、8を抽出し、target-p2-8.pdfを生成する。

単独のページ、例えばP2のみ抽出する場合は、target-p2.pdfファイルができる。

 

スクリプト掲載の前に、2〜3解説する。

Outfile=${1%.*}             # PDFファイルの拡張子を取り除く
arg_num=$#                  # 引数の数
last_arg=${@:$arg_num:1}    # 引数の全配列から最後の要素を1つ取り出す
${@:2}                      # 引数の全配列の2番目以降の要素

たぶん、これくらい理解すれば、簡単なスクリプトなので、全体を理解できると思う。

以下に全スクリプトを掲載する。

#!/usr/bin/env bash
# pdf cut page script
# PDFファイルから特定のページを抽出する
# pdftk 必須
# 2024-09-17 ver0.01 start

Usage="pdf-cut A script to extract specific pages from a PDF file
  need: pdftk ( Debian: sudo apt install pdftk )
  [Usage] pdf-cut target-PDF cut-page 
          [output] target-PDF-p(cut-page).pdf

Infile=${1}                     # Input PDF file
Outfile=${1%.*}                 # Output PDF file remove extension

args_num=$#                     # 引数の数
last_arg=${@:$args_num:1}       # 最後の引数

[[ (( $args_num < 3 )) ]]  && page=${2} || page=${2}-$last_arg
#echo $page

/usr/bin/pdftk $Infile cat ${@:2} output $Outfile-p${page}.pdf

[[ "$?" == 0 ]] && echo "done"

実行の前に、chmod +x pdf-cut 等として実行権を与えて、実行してね。

抽出したPDFファイルをLibreOfficeのdrawで読み込むと、全体が画像ファイルのページでなければ、ある程度の加工ができるので、資料の作成にとても便利。

需要は少なそうなスクリプトだけど、どなたかの参考になれば幸い。

関連ページ