「PDFBox」の版間の差分

提供: 個人的記録
移動: 案内検索
(Gonbe がページ「PDFBox」を「PDFBox 1.0」に移動しました)
 
(OTFフォントの場合)
 
(同じ利用者による、間の2版が非表示)
1行目: 1行目:
#転送 [[PDFBox 1.0]]
+
Apache FoundationのPDF生成ライブラリ。
 +
このページは3.0.3準拠で記述しています。
 +
ライセンス
 +
 
 +
APL
 +
本家サイト
 +
 
 +
http://pdfbox.apache.org/
 +
 
 +
= Mavenでの導入 =
 +
本家にもあるけど、今回はdependencyに以下を記述。
 +
<pre>
 +
<dependency>
 +
<groupId>org.apache.pdfbox</groupId>
 +
<artifactId>pdfbox</artifactId>
 +
<version>3.0.3</version>
 +
</dependency>
 +
</pre>
 +
= 使い方 =
 +
== PDFページを追加する。 ==
 +
以下のコードで空白のページを追加することができる。<br>
 +
PDRectangleでページサイズを指定できるが、単位がポイントなのに注意(1ポイント=0.353mm)
 +
A判であればPDRectangleクラスに定数が定義されている。
 +
<pre>
 +
PDDocument doc = new PDDocument();
 +
PDRectangle rec = new PDRectangle(幅,高さ);
 +
doc.addPage(new Page(rec));
 +
doc.save("出力先.pdf");
 +
doc.close();
 +
</pre>
 +
=== 紙のサイズとおおよそのポイント ===
 +
{| class="wikitable" style="width: 20em;"
 +
|+ 紙サイズ変換表
 +
! サイズ || mm表記 || ポイント表記
 +
|-
 +
|| A3 || 297×427 || 842×1191
 +
|-
 +
|| A4 || 210×297 || 595×842
 +
|-
 +
|| A5 || 148×210 || 420×595
 +
|-
 +
|| B4 || 250×353 || 729×1032
 +
|-
 +
|| B5 || 176×250 || 516×729
 +
|-
 +
|| B6 || 125×176 || 363×516
 +
|}
 +
 
 +
== 文字列/図形の描画 ==
 +
PDFの文字列や図形はstreamで行う。streamはさまざまなオペレータの集合になっている。イメージ的にはdrawマクロみたいなもの。<br>
 +
streamはページに対し、以下のコードで生成する。
 +
<pre>
 +
PDPageContentStream stream = new PDPageContentStream(PDDocument, PDPage)
 +
</pre>
 +
図形や文字列のPDFのオペレータに対応するメソッドがある。<br>
 +
streamは必ずcloseすること。closeしないと描画が行われない。
 +
=== 文字列の出力 ===
 +
PDFでの文字列の出力は以下の手順で行う。
 +
<pre>
 +
PDPageContentStream stream = new PDPageContentStream(PDDocument, PDPage);
 +
stream.beginText()  //文字列出力の開始を通知
 +
stream.setFont(PDFont,フォントサイズ);  //フォントとサイズの指定。マルチバイト文字を出力する場合、対応するフォントの指定が必須。
 +
stream.moveTextPositionByAmount(横位置, 縦位置);    //文字列を出力する位置の指定。左下を 0,0 として指定する。
 +
stream.showText(文字列);              //文字列の出力
 +
stream.endText();              //文字列出力の終了を通知
 +
</pre>
 +
 
 +
==== フォントの指定 ====
 +
pdfbox 2.0 以後でマルチバイトフォントがちゃんとサポートされた。
 +
フォント埋め込みにも対応しており、埋め込まない理由もないので埋め込む前提での例を記述。
 +
 
 +
<pre>
 +
PDFont font = PDType0Font.load(PDDocument, TTFフォントファイルを指定); //TTCやOTFは取り扱いが異なる
 +
PDPageContentStream stream = new PDPageContentStream(PDDocument, PDPage);
 +
stream.beginText();
 +
stream.setFont(font, 11);
 +
stream.newLineAtOffset(100, 100);
 +
stream.showText(文字列);
 +
stream.endText();
 +
stream.close();
 +
</pre>
 +
 
 +
===== OTFフォントの場合 =====
 +
以下の記述で OTF からPDFontを作成できる。
 +
 
 +
<pre>
 +
OTFParser otfParser = new OTFParser();
 +
OpenTypeFont otf = otfParser.parse(new RandomAccessReadMemoryMappedFile(new File(OTFのフォントファイル)));
 +
PDFont font = PDType0Font.load(document, otf, false);
 +
</pre>
 +
 
 +
===== TTCフォントの場合 =====
 +
以下の記述で TTC からPDFontを作成できる。
 +
 
 +
<pre>
 +
try (TrueTypeCollection collection = new TrueTypeCollection(new File(TTCフォントファイル))) {
 +
    PDFont font = PDType0Font.load(doc, collection.getFontByName(フォント名), true); //TTCは複数のフォントの組み合わせなので、そのうち使用するフォント名を指定する必要がある
 +
    *** 出力処理は省略。 TrueTypeCollection をクローズするとフォントもクローズされるので注意が必要 ***
 +
}
 +
</pre>

2024年8月23日 (金) 23:39時点における最新版

Apache FoundationのPDF生成ライブラリ。 このページは3.0.3準拠で記述しています。 ライセンス

APL 本家サイト

http://pdfbox.apache.org/

Mavenでの導入

本家にもあるけど、今回はdependencyに以下を記述。

<dependency>
	<groupId>org.apache.pdfbox</groupId>
	<artifactId>pdfbox</artifactId>
	<version>3.0.3</version>
</dependency>

使い方

PDFページを追加する。

以下のコードで空白のページを追加することができる。
PDRectangleでページサイズを指定できるが、単位がポイントなのに注意(1ポイント=0.353mm) A判であればPDRectangleクラスに定数が定義されている。

PDDocument doc = new PDDocument();
PDRectangle rec = new PDRectangle(幅,高さ);
doc.addPage(new Page(rec));
doc.save("出力先.pdf");
doc.close();

紙のサイズとおおよそのポイント

紙サイズ変換表
サイズ mm表記 ポイント表記
A3 297×427 842×1191
A4 210×297 595×842
A5 148×210 420×595
B4 250×353 729×1032
B5 176×250 516×729
B6 125×176 363×516

文字列/図形の描画

PDFの文字列や図形はstreamで行う。streamはさまざまなオペレータの集合になっている。イメージ的にはdrawマクロみたいなもの。
streamはページに対し、以下のコードで生成する。

PDPageContentStream stream = new PDPageContentStream(PDDocument, PDPage)

図形や文字列のPDFのオペレータに対応するメソッドがある。
streamは必ずcloseすること。closeしないと描画が行われない。

文字列の出力

PDFでの文字列の出力は以下の手順で行う。

PDPageContentStream stream = new PDPageContentStream(PDDocument, PDPage);
stream.beginText()   //文字列出力の開始を通知
stream.setFont(PDFont,フォントサイズ);   //フォントとサイズの指定。マルチバイト文字を出力する場合、対応するフォントの指定が必須。
stream.moveTextPositionByAmount(横位置, 縦位置);    //文字列を出力する位置の指定。左下を 0,0 として指定する。
stream.showText(文字列);               //文字列の出力
stream.endText();              //文字列出力の終了を通知

フォントの指定

pdfbox 2.0 以後でマルチバイトフォントがちゃんとサポートされた。 フォント埋め込みにも対応しており、埋め込まない理由もないので埋め込む前提での例を記述。

PDFont font = PDType0Font.load(PDDocument, TTFフォントファイルを指定); //TTCやOTFは取り扱いが異なる
PDPageContentStream stream = new PDPageContentStream(PDDocument, PDPage);
stream.beginText();
stream.setFont(font, 11);
stream.newLineAtOffset(100, 100);
stream.showText(文字列);
stream.endText();
stream.close();
OTFフォントの場合

以下の記述で OTF からPDFontを作成できる。

OTFParser otfParser = new OTFParser();
OpenTypeFont otf = otfParser.parse(new RandomAccessReadMemoryMappedFile(new File(OTFのフォントファイル)));
PDFont font = PDType0Font.load(document, otf, false);
TTCフォントの場合

以下の記述で TTC からPDFontを作成できる。

try (TrueTypeCollection collection = new TrueTypeCollection(new File(TTCフォントファイル))) {
    PDFont font = PDType0Font.load(doc, collection.getFontByName(フォント名), true); //TTCは複数のフォントの組み合わせなので、そのうち使用するフォント名を指定する必要がある
    *** 出力処理は省略。 TrueTypeCollection をクローズするとフォントもクローズされるので注意が必要 ***
}