[[SystemHelp/PDF/crop]]
#author("2017-10-04T08:16:54+00:00","","")
[[Computer/PDF/crop]]

*PDF の余白の切り取り(LaTeX) [#tb8e66e1]

LaTeX で元の PDF を切り出して画像として張り付けることで余白の切り取りを実現します。

+PDF を1ページごとにバラバラにする
+PDF の Bounding Box を求める
+切り取るサイズを決める
+LaTeX ファイルを書く
+latex -> dvipdfmx で処理する
+でき上がった PDF を結合する

の手順でできます。ここでは次のソフトを使うことにします(同じ機能を持つ他のソフトでも大丈夫です)。

-pdftk(PDF の分割、結合)
-ImageMagick(Bounding Box の計算)
-LaTeX
-dvipdfmx
-シェルスクリプトなど

**1, PDF を1ページごとにバラバラにする [#q1f478f5]

下の方のシェルスクリプトに書き込んでおくとよいでしょう。

 $ pdftk input.pdf burst

pg_0001.pdf といったファイルができます。

**2, PDF の Bounding Box を求める [#h85b010e]

 $ identify pg_0001.pdf
 pg_0001.pdf PDF 622x842 622x842+0+0 PseudoClass 256c 16-bit 511.516kb

622x842 だということがわかります。

**3, 切り取るサイズを決める [#w0cc1f36]

最終的に LaTeX ファイルには

 bb=x1 y1 x2 y2

の形で座標を書き込むので、それぞれの値を決めておきます。

***座標 [#xa821f65]

|~記号|~意味|
|x1|左下のx座標|
|y1|左下のy座標|
|x2|右上のx座標|
|y2|右上のy座標|

**4, LaTeX ファイルを書く [#n90d69d7]

ここでは page0000.tex というファイル名にしておきます。

 \documentclass[a5paper]{jsarticle}
 \usepackage[dvipdfm]{graphicx}
 
 \setlength{\hoffset}{1in}
 \setlength{\voffset}{1in}
 \setlength{\oddsidemargin}{0pt}
 \setlength{\topmargin}{0pt}
 \setlength{\headheight}{0pt}
 \setlength{\headsep}{0pt}
 \setlength{\textheight}{597pt}
 \setlength{\textwidth}{423pt}
 \setlength{\marginparsep}{0pt}
 \setlength{\marginparwidth}{0pt}
 \setlength{\footskip}{0pt}
 \setlength{\marginparpush}{0pt}
 \setlength{\hoffset}{0pt}
 \setlength{\voffset}{0pt}
 \setlength{\paperwidth}{423pt}
 \setlength{\paperheight}{597pt}
 
 \begin{document}
 
 \begin{center}
 \includegraphics[width=148mm,bb=93 252 529 842]{pg_0000.pdf}
 %\includegraphics[width=148mm,bb=x1 y1 x2 y2]{pg_0000.pdf}
 \end{center}
 
 \end{document}

**5, latex -> dvipdfmx で処理する [#g54afde5]

 $ platex page0001 && dvipdfmx page0001

各ページに対して行うのは面倒なので、自動化するのが簡単です。

***シェルスクリプト [#ga78f4dc]

 #!/bin/sh
 
 i=1
 
 while [ $i -le 9 ]
 do
    cat page0000.tex | sed s/pg_0000/pg_000$i/g >page000$i.tex
    platex page000$i && dvipdfmx -p a5 page000$i
    i=`expr $i + 1`
 done

**6, でき上がった PDF を結合する [#v23141d5]

上のシェルスクリプトに書き込んでおくとよいでしょう。

 $ pdftk page000?.pdf cat output output.pdf


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS