PDFBox
2017/04/06
概要
pdfを作りたい。PDFlibを使おうと思ったが、現在は有償になっているらしい。
他のツールを探すことにしたが、
「今どきのJavaのPDFライブラリ まとめ (2017年版)」(http://weblabo.oscasierra.net/java-pdf-lib-2017/)にこれらのことがまとめられていた。
いろいろ選択肢があるようだが、最も簡単そうに見えたのでApache PDFBoxを選択した。
ダウンロード
つぎのものをダウンロードする。
wget http://ftp.tsukuba.wide.ad.jp/software/apache/pdfbox/2.0.5/pdfbox-2.0.5.jar
wget http://ftp.tsukuba.wide.ad.jp/software/apache/pdfbox/2.0.5/fontbox-2.0.5.jar
wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//commons/logging/binaries/commons-logging-1.2-bin.tar.gz
wget http://ftp.tsukuba.wide.ad.jp/software/apache/pdfbox/2.0.5/pdfbox-2.0.5-src.zip
tar xzf commons-logging-1.2-bin.tar.gz
unzip pdfbox-2.0.5-src.zip
Eclipse
Eclipse上でPDFBoxを使うときの注意
プロジェクトの中で3つのjarファイルを「外部JARの追加」でライブラリに追加する。
恒久的に使用する場合は/usr/share/java/lib/,$JAVA_HOME/lib/等の下にコピーするとよい。

PDFファイルを作ってみる
Eclipseでサンプルを作ってみる。
差し当たり、このような機能がほしい。
- 文字 日本語を含む,文字の色,フォントが指定できる
- 線 罫線,斜め線,色,破線,太さが指定できる
- イメージ 任意のイメージ(png)を入れることができる
- 複数ページ 2ページ目がある
細かい手順は省略する。
- EclipseでJavaプロジェクト「pdfApplication」等をつくる。
3つのjarファイルを「外部JARの追加」ライブラリに追加する。
後に追加することもできる。
- クラスファイルをつくる。
アプリケーション名は「HelloPdf」等にする。public static void main(String[] args)を忘れずに
- HelloPdf.javaを記述
public static void main(String[] args) まではEclipseが用意するので、この下に追記する。
- 実行すると~/workspace/pdfApplicaton/Hellopdf.pdfが作られる。

meshPDF
コンテンツの位置合わせが面倒になりそうなので、「位置合わせ用テンプレートmeshPDF.pdf」を用意した。

かわったこと
- A4縦長を指定すると 1ページの大きさは565 x 841 (画素?)
- 座標は数学とおなじ、xy座標。xが横軸、yが縦軸。左下が原点(0,0)
- 線・図形は絶対座標で指定 PDPageContentStream.moveTo(x,y), lineTo(x,y),...
文字は相対座標で指定 PDPageContentStream.newLineAtOffset(x,y)
参考:
PDFBox reactor 2.0.5 API
PDFBox サンプル集
PDFBox reactor 2.0.5 APISymfowareについての考察blog 「JavaのPDFライブラリ Apache PDFBoxでHello World」