Symfoware

Symfowareについての考察blog

PDFライブラリ Apache PDFBoxで線の描画と矩形の塗りつぶし

PDFBox 2.0系を使用すれば日本語が使えそうです。
Apache PDFBoxで日本語の出力とフォントの埋め込み

このまま2.0系で線や矩形の描画方法を調べてみます。


ラインの描画



簡単なサンプルは以下のとおり。
moveToで開始座標、lineToで終点座標を指定。
strokeで線の描画を行います。


  1. package com.fc2.blog68.symfoware;
  2. import org.apache.pdfbox.pdmodel.PDDocument;
  3. import org.apache.pdfbox.pdmodel.PDPage;
  4. import org.apache.pdfbox.pdmodel.PDPageContentStream;
  5. public class MainProccess {
  6.     public static void main(String... args) throws Exception {
  7.         PDDocument doc = new PDDocument();
  8.         // 新しいページを追加
  9.         PDPage page = new PDPage();
  10.         doc.addPage(page);
  11.         
  12.         // 出力用のストリームを開く
  13.         PDPageContentStream contents = new PDPageContentStream(doc, page);
  14.         
  15.         // ペンの位置を移動
  16.         contents.moveTo(100f,700f);
  17.         // ラインの終端座標を指定
  18.         contents.lineTo(300f, 600f);
  19.         // 線を描画
  20.         contents.stroke();
  21.         
  22.         // ストリームを閉じる
  23.         contents.close();
  24.         // pdfファイルを出力
  25.         doc.save("sample.pdf");
  26.         doc.close();
  27.     }
  28. }




これでこんなPDFが出力されます。

633_01.png





線の色、太さを指定



線の色と太さを指定してみます。
色はsetStrokingColor、太さはsetLineWidthで指定します。


  1. package com.fc2.blog68.symfoware;
  2. import java.awt.Color;
  3. import org.apache.pdfbox.pdmodel.PDDocument;
  4. import org.apache.pdfbox.pdmodel.PDPage;
  5. import org.apache.pdfbox.pdmodel.PDPageContentStream;
  6. public class MainProccess {
  7.     public static void main(String... args) throws Exception {
  8.         PDDocument doc = new PDDocument();
  9.         // 新しいページを追加
  10.         PDPage page = new PDPage();
  11.         doc.addPage(page);
  12.         
  13.         // 出力用のストリームを開く
  14.         PDPageContentStream contents = new PDPageContentStream(doc, page);
  15.         
  16.         // ペンの位置を移動
  17.         contents.moveTo(100f,700f);
  18.         // ラインの終端座標を指定
  19.         contents.lineTo(300f, 600f);
  20.         
  21.         // 線の色を指定
  22.         contents.setStrokingColor(Color.red);
  23.         // 線の太さを指定
  24.         contents.setLineWidth(10f);
  25.         
  26.         // 線を描画
  27.         contents.stroke();
  28.         
  29.         // ストリームを閉じる
  30.         contents.close();
  31.         // pdfファイルを出力
  32.         doc.save("sample.pdf");
  33.         doc.close();
  34.     }
  35. }



633_02.png




破線パターン



破線のパターンは、setLineDashPatternで指定します。
第一引数が間隔パターン、第二引数は・・・よくわかっていません。


  1. package com.fc2.blog68.symfoware;
  2. import java.awt.Color;
  3. import org.apache.pdfbox.pdmodel.PDDocument;
  4. import org.apache.pdfbox.pdmodel.PDPage;
  5. import org.apache.pdfbox.pdmodel.PDPageContentStream;
  6. public class MainProccess {
  7.     public static void main(String... args) throws Exception {
  8.         PDDocument doc = new PDDocument();
  9.         // 新しいページを追加
  10.         PDPage page = new PDPage();
  11.         doc.addPage(page);
  12.         
  13.         // 出力用のストリームを開く
  14.         PDPageContentStream contents = new PDPageContentStream(doc, page);
  15.         
  16.         // ペンの位置を移動
  17.         contents.moveTo(100f,700f);
  18.         // ラインの終端座標を指定
  19.         contents.lineTo(300f, 600f);
  20.         
  21.         // 線の色を指定
  22.         contents.setStrokingColor(Color.red);
  23.         // 線の太さを指定
  24.         contents.setLineWidth(10f);
  25.         
  26.         // 破線のパターンを指定
  27.         contents.setLineDashPattern(new float[]{10f, 5f}, 1f);
  28.         
  29.         // 線を描画
  30.         contents.stroke();
  31.         
  32.         // ストリームを閉じる
  33.         contents.close();
  34.         // pdfファイルを出力
  35.         doc.save("sample.pdf");
  36.         doc.close();
  37.     }
  38. }




こんな感じになります。

633_03.png




矩形の描画



矩形はaddRectで、座標と高さ、幅を指定します。
線で囲むには、strokeを実行します。


  1. package com.fc2.blog68.symfoware;
  2. import java.awt.Color;
  3. import org.apache.pdfbox.pdmodel.PDDocument;
  4. import org.apache.pdfbox.pdmodel.PDPage;
  5. import org.apache.pdfbox.pdmodel.PDPageContentStream;
  6. public class MainProccess {
  7.     public static void main(String... args) throws Exception {
  8.         PDDocument doc = new PDDocument();
  9.         // 新しいページを追加
  10.         PDPage page = new PDPage();
  11.         doc.addPage(page);
  12.         
  13.         // 出力用のストリームを開く
  14.         PDPageContentStream contents = new PDPageContentStream(doc, page);
  15.         
  16.         // 矩形を指定
  17.         contents.addRect(200f, 400f, 100f, 150f);
  18.         
  19.         // 線の色を指定
  20.         contents.setStrokingColor(Color.red);
  21.         // 線の太さを指定
  22.         contents.setLineWidth(10f);
  23.         
  24.         // 線を描画
  25.         contents.stroke();
  26.         
  27.         // ストリームを閉じる
  28.         contents.close();
  29.         // pdfファイルを出力
  30.         doc.save("sample.pdf");
  31.         doc.close();
  32.     }
  33. }




633_04.png






矩形の塗りつぶし



矩形を塗りつぶすには、fillを使用します。


  1. package com.fc2.blog68.symfoware;
  2. import java.awt.Color;
  3. import org.apache.pdfbox.pdmodel.PDDocument;
  4. import org.apache.pdfbox.pdmodel.PDPage;
  5. import org.apache.pdfbox.pdmodel.PDPageContentStream;
  6. public class MainProccess {
  7.     public static void main(String... args) throws Exception {
  8.         PDDocument doc = new PDDocument();
  9.         // 新しいページを追加
  10.         PDPage page = new PDPage();
  11.         doc.addPage(page);
  12.         
  13.         // 出力用のストリームを開く
  14.         PDPageContentStream contents = new PDPageContentStream(doc, page);
  15.         
  16.         // 矩形を指定
  17.         contents.addRect(200f, 400f, 100f, 150f);
  18.         
  19.         // 線の色を指定
  20.         contents.setStrokingColor(Color.red);
  21.         // 線の太さを指定
  22.         contents.setLineWidth(10f);
  23.         
  24.         // 線を描画
  25.         //contents.stroke();
  26.         // 矩形を塗りつぶし
  27.         contents.fill();
  28.         
  29.         // ストリームを閉じる
  30.         contents.close();
  31.         // pdfファイルを出力
  32.         doc.save("sample.pdf");
  33.         doc.close();
  34.     }
  35. }



633_05.png



塗りつぶし時の色の指定は、setNonStrokingColorで行います。


  1. package com.fc2.blog68.symfoware;
  2. import java.awt.Color;
  3. import org.apache.pdfbox.pdmodel.PDDocument;
  4. import org.apache.pdfbox.pdmodel.PDPage;
  5. import org.apache.pdfbox.pdmodel.PDPageContentStream;
  6. public class MainProccess {
  7.     public static void main(String... args) throws Exception {
  8.         PDDocument doc = new PDDocument();
  9.         // 新しいページを追加
  10.         PDPage page = new PDPage();
  11.         doc.addPage(page);
  12.         
  13.         // 出力用のストリームを開く
  14.         PDPageContentStream contents = new PDPageContentStream(doc, page);
  15.         
  16.         // 矩形を指定
  17.         contents.addRect(200f, 400f, 100f, 150f);
  18.         
  19.         // fill時の色を指定
  20.         contents.setNonStrokingColor(Color.blue);
  21.         
  22.         // 矩形を塗りつぶし
  23.         contents.fill();
  24.         
  25.         // ストリームを閉じる
  26.         contents.close();
  27.         // pdfファイルを出力
  28.         doc.save("sample.pdf");
  29.         doc.close();
  30.     }
  31. }




633_06.png



続きます。
PDFライブラリ Apache PDFBoxで画像をPDFに埋め込む
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/08/03(月) 22:24:08|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PDFライブラリ Apache PDFBoxで画像をPDFに埋め込む | ホーム | Apache PDFBoxで日本語の出力とフォントの埋め込み>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1778-3f4a2687
この記事にトラックバックする(FC2ブログユーザー)