PDFBoxを使ってPDFを作成しようとしたところ・・・という話でした。
5.改行、改ページができない
できない、と書きましたができるんです。
改行は
cos.newLine();
改ページは
page = new PDPage();
document.addPage(page);
でできます。でもそうじゃないんです!
長い文やページを超える文を出力するときに、自動で改行や改ページしてほしいんです!
結論。できません。
そういうものかもしれませんが、なんとなく自動でできるような気がしていました。
ということで、文字数/行数を自分でカウントして、よきところで改行/改ページを入れる方法で解決しました。
コードは汚いので割愛します。。
6.ファイル保存でOutOfMemoryError発生
今回、1000ページ(数百MB)以上のPDFを作成することもあったのですが、
document.save("sample.pdf")
のところでOutOfMemoryが発生することがありました。
調べたところ、ページ数が多いと発生することがあるという記事を見つけました。
(ちなみにJDK1.6限定で、1.7だと発生しないとのことです。今回の環境は1.6でした。)
この記事なんですが、リンク切れで表示できません。一応、URLはこちらです。
http://www.gcgate.jp/engineerblog/2013/12/06/223/
記事によると
・ある一定ページ数になったらPDFをファイルに書き込む
・その書き込んだPDFファイルを読み込みページを追加する
・繰り返す
で解決したということだったので、これを試したのですが解決せず。
いろいろ試して、PDFファイルを分割して保存する方法で解決できました。
これもコードは割愛しますが、ページ数を自分でカウントして、決まった件数のときにファイルを保存する、という流れです。
今回のケースは、ページ数が多いというより、ファイルサイズの大きさによるような気がします。
分割する際ファイルサイズでできればいいのですが、それは厳しいのでページ数で区切りました。
7.作成したファイルで検索ができない
すみません。これはまだ解決できていません。
1つ前の記事で書いた通り、今回日本語を表示するためにIPAゴシックを使いました。
すると、作成したPDFをAdobeのPDFリーダー等で開いて、検索しようとすると
検索できるファイルと検索できないファイルがありました。何か特定の文字が含まれると検索できないようなのですが、原因となる文字は特定できていません。
また、PDFBoxで何かしら対策ができるのか、も今のところ不明です。
他のライブラリは使っていないので比較ができないのですが、PDFBox、便利は便利だけどすごく使いやすくはない、というふわっとした感想で終わりたいと思います。
あ、公式サイトのFAQは結構役立ちました。