LoginSignup
30
33

More than 5 years have passed since last update.

Apache PDFBoxが日本語出力できるようになった件

Last updated at Posted at 2016-06-03

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);
        }
    }

結果

こんな感じ。

image

あとがき

僕はApache大好きなので、もうiTextの時代は終わったと勝手に思っています。

30
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
33