注釈の塗りつぶし注釈に設定された塗りつぶしの色を変更します。
フリーテキスト注釈、ライン注釈、矩形注釈、円形注釈、折れ線注釈、多角形注釈はそれぞれ、内部色を持つことができます。PDF Tool APIではこれらの内部色を取得・変更できます。また、指定しない場合、内部色は透過になります。色の指定方法についての詳細は「『PDF CookBook』(第1巻)2.1.3 文字の色指定」を参照してください。
本サンプルプログラムでは、入力PDFに含まれているフリーテキスト注釈、ライン注釈、正方形注釈、円形注釈、折れ線注釈、多角形注釈のうち1種類を指定し、それを指定した色に塗り替えます。
package cookbook; import jp.co.antenna.ptl.*; public class ChangeAnnotsInteriorColor { // そのクラスのusageを表示する関数 private static void printUsage(){ System.out.println("usage: java ChangeAnnotsInteriorColor in-pdf-file" + " out-pdf-file 色変更の注釈種類" + " interior-color-R interior-color-G interior-color-B"); System.out.println("色変更の注釈種類"); System.out.println("0 : FreeText 1 : Line 2 : Square" + " 3 : Circle 4 : PolyLine 5 : Polygon"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 3) { printUsage(); return; } // 色変更の注釈種類 int annotKindNum = Integer.parseInt(args[2]); PtlAnnot.ANNOT_TYPE annotKind; switch (annotKindNum) { case 0: annotKind = PtlAnnot.ANNOT_TYPE.TYPE_FREE_TEXT; break; case 1: annotKind = PtlAnnot.ANNOT_TYPE.TYPE_LINE; break; case 2: annotKind = PtlAnnot.ANNOT_TYPE.TYPE_SQUARE; break; case 3: annotKind = PtlAnnot.ANNOT_TYPE.TYPE_CIRCLE; break; case 4: annotKind = PtlAnnot.ANNOT_TYPE.TYPE_POLYLINE; break; case 5: annotKind = PtlAnnot.ANNOT_TYPE.TYPE_POLYGON; break; default: printUsage(); return; } // コマンドライン引数の読み取り float colorR = Float.parseFloat(args[3]); float colorG = Float.parseFloat(args[4]); float colorB = Float.parseFloat(args[5]); try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlParamOutput outputFile = new PtlParamOutput(args[1]); PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); try (PtlPages pages = doc.getPages()) { //ページコンテナの取得 // ページコンテナが空かどうか if (pages.isEmpty()) { System.out.println("ページコンテナが空\n"); return; } int numPages = pages.getCount(); for(int i=0; i<numPages; i++) { System.out.println("ページ" + (i+1)); try (PtlPage page = pages.get(i)) { // 注釈コンテナが空かどうか if (!page.hasAnnots()) { System.out.println("注釈なし"); continue; } try (PtlAnnots annots = page.getAnnots()) { // 注釈数の取得 int numAnnots = annots.getCount(); System.out.println("注釈数 : " + numAnnots); for(int j=0; j<numAnnots; j++) { try (PtlAnnot annot = annots.get(j)) { if(annot.getType() == annotKind){ changeAnnotInteriorColor(annot, colorR, colorG, colorB); } } } } } } } // ファイルに保存します。 doc.save(outputFile); } ...【AppendAnnotStampDefault.javaと同じ処理のため省略 ・エラーメッセージ処理と出力】... } public static void changeAnnotInteriorColor(PtlAnnot annot, float colorR, float colorG, float colorB) throws PtlException, Exception, Error { try (PtlColorDeviceRGB color = new PtlColorDeviceRGB(colorR, colorG, colorB)) { annot.setInteriorColor(color); } } }
ChangeAnnotsInteriorColor.java
C:\samples>java cookbook.ChangeAnnotsInteriorColor usage: java ChangeAnnotsInteriorColor in-pdf-file out-pdf-file 色変更の注釈種類 interior-color-R interior-color-G interior-color-B 色変更の注釈種類 0 : FreeText 1 : Line 2 : Square 3 : Circle 4 : PolyLine 5 : Polygon C:\samples>java cookbook.ChangeAnnotsInteriorColor blank-annots.pdf change-color-0.pdf 0 0 1 0 ページ1 注釈数 : 15 -- 完了 -- C:\samples>java cookbook.ChangeAnnotsInteriorColor blank-annots.pdf change-color-4.pdf 4 0 1 0 ページ1 注釈数 : 15 -- 完了 -- C:\samples>java cookbook.ChangeAnnotsInteriorColor blank-annots.pdf change-color-5.pdf 5 0 1 0 ページ1 注釈数 : 15 -- 完了 --
左からフリーテキスト注釈(0)、折れ線(4)、多角形(5)の内部色の設定結果です。