Apache PDFBoxはjavaでPDFをごにょごにょできるライブラリです。
https://pdfbox.apache.org/
2016年3月に2.0系がリリースされ日本語が出力できるようになってました。
以前からSNAPSHOT版が出ており、試している人がいたので下記参考に試してみた結果を書きます。
http://symfoware.blog68.fc2.com/blog-entry-1777.html
試したソースコード
pom.xmlに下記を追記。
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.1</version>
</dependency>
下記が実行してみたソースコード
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
//・・・
public static void main(String[] args) throws IOException {
//Windowsで、C:/Windows/Fonts/ARIALUNI.TTFにフォントがないと動きません。
Path path = Paths.get("pdf.pdf");
try (OutputStream out = Files.newOutputStream(path)) {
make(out);
}
System.out.println(path.toAbsolutePath());
}
public static void make(OutputStream out) throws IOException {
try (PDDocument doc = new PDDocument()) {
float fontSize = 50;
PDRectangle rectangle = PDRectangle.A6;
PDPage page = new PDPage(rectangle);
doc.addPage(page);
// フォントファイルを読み込み(2.0系から追加されたメソッド)
PDFont font = PDType0Font.load(doc, new File("C:/Windows/Fonts/ARIALUNI.TTF"));
try (PDPageContentStream contents = new PDPageContentStream(doc, page)) {
contents.beginText();
contents.setFont(font, fontSize);
contents.newLineAtOffset(10, rectangle.getHeight() - fontSize - 10);
contents.showText("こんにちは");
contents.newLineAtOffset(0, -fontSize);
contents.showText("世界");
contents.endText();
}
doc.save(out);
}
}
結果
こんな感じ。
あとがき
僕はApache大好きなので、もうiTextの時代は終わったと勝手に思っています。