JavaのApache PDFBoxでHellowWorld出力してみた
タイトルの通り、PDFBoxというライブラリを使用して、PDF出力をやってみようと思います。
pom.xml
まずは準備、pom.xmlに依存関係を追加しましょう。
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.12</version> </dependency>
HelloWorldPDFBox.java
早速コードを記述してみましょう。
package pdfbox; import java.io.File; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType0Font; public class HelloWorldPDFBox { public static void main(String[] args) { try(PDDocument doc = new PDDocument()) { PDPage page = new PDPage(); doc.addPage(page); PDFont font = PDType0Font.load(doc, new File("C:/Windows/Fonts/ARIALUNI.TTF")); try (PDPageContentStream content = new PDPageContentStream(doc, page)){ content.beginText(); content.setFont(font,12); // content.newLineAtOffset(100f, 500f); //文字位置の調整 content.showText("HelloWorld"); content.endText(); font = null; //GC用?必要かよくわからない。 } doc.save("C:\\tmp\\helloworld.pdf"); }catch(IOException e) { e.printStackTrace(); } } }
4行目、11行目のようにtry文の後にリソースを宣言する記述方法を「try-with-resources文」といいます。
簡単に説明するとリソースが文の終わりで確実に閉じられます。
詳細についてはググってみてください。
try(PDDocument doc = new PDDocument()) {
try (PDPageContentStream content = new PDPageContentStream(doc, page)){
18行目は、PDFontでメモリリークが起きるという記事を見かけたのでGCされやすいようにnullを入れているのですが必要なのかよくわかりません。
詳しいかたいらっしゃったら教えて下さい。m(__)m
PDFBoxでjava.lang.OutOfMemoryErrorと性能問題に悩まされたお話
font = null; //GC用?必要かよくわからない。
コメント