「PDFBox」の版間の差分
提供: 個人的記録
(Gonbe がページ「PDFBox」を「PDFBox 1.0」に移動しました) |
(→OTFフォントの場合) |
||
| (同じ利用者による、間の2版が非表示) | |||
| 1行目: | 1行目: | ||
| − | + | 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 本家サイト
目次
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 をクローズするとフォントもクローズされるので注意が必要 ***
}