JavaのApache PDFBoxでHellowWorld出力してみた

スポンサーリンク
スポンサーリンク

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用?必要かよくわからない。

コメント

タイトルとURLをコピーしました