「PDFBox 1.0」の版間の差分
提供: 個人的記録
(→フォントの指定) |
(→フォントの指定) |
||
73行目: | 73行目: | ||
systeminfo.setString(COSName.ORDERING, "Japan1"); | systeminfo.setString(COSName.ORDERING, "Japan1"); | ||
systeminfo.setInt(COSName.SUPPLEMENT, 6); | systeminfo.setInt(COSName.SUPPLEMENT, 6); | ||
+ | |||
+ | //フォントの書体を設定 | ||
+ | PDFontDescriptorDictionary fd = new PDFontDescriptorDictionary(); | ||
+ | fd.setFontName("MSゴシック"); //使用するフォント名を指定。フォントの埋め込みはできるのだろうか? | ||
+ | fd.setFlags(4); | ||
+ | fd.setFontBoundingBox(new PDRectangle(new BoundingBox(-500, -300, 1200, 1400))); | ||
+ | fd.setItalicAngle(0); | ||
+ | fd.setAscent(1400); | ||
+ | fd.setDescent(-300); | ||
+ | fd.setCapHeight(700); | ||
+ | fd.setStemV(100); | ||
</pre> | </pre> | ||
2014年1月2日 (木) 16:18時点における版
Apache FoundationのPDF生成ライブラリ。
このページは1.8.3準拠で記述しています。
ライセンス
- APL
本家サイト
目次
Mavenでの導入
本家にもあるけど、今回はdependencyに以下を記述。
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>1.8.3</version> </dependency>
使い方
PDFページを追加する。
以下のコードで空白のページを追加することができる。
PDRectangleでページサイズを指定できるが、単位がポイントなのに注意(1ポイント=0.353mm)
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(横位置, 縦位置); //文字列を出力する位置の指定。 stream.drawString(文字列); //文字列の出力 stream.endText(); //文字列出力の終了を通知
フォントの指定
ASCII文字のみであれば組み込みのtype1フォントで用が足りるが、マルチバイト文字を出力することができない。
マルチバイト文字を出力するにはCIDフォントを設定する必要がある。
//日本語文字列であることをしめすPDF辞書を定義 COSDictionary systeminfo = new COSDictionary(); systeminfo.setString(COSName.REGISTRY, "Adobe"); systeminfo.setString(COSName.ORDERING, "Japan1"); systeminfo.setInt(COSName.SUPPLEMENT, 6); //フォントの書体を設定 PDFontDescriptorDictionary fd = new PDFontDescriptorDictionary(); fd.setFontName("MSゴシック"); //使用するフォント名を指定。フォントの埋め込みはできるのだろうか? fd.setFlags(4); fd.setFontBoundingBox(new PDRectangle(new BoundingBox(-500, -300, 1200, 1400))); fd.setItalicAngle(0); fd.setAscent(1400); fd.setDescent(-300); fd.setCapHeight(700); fd.setStemV(100);