
注釈の塗りつぶし注釈に設定された塗りつぶしの色を変更します。
フリーテキスト注釈、ライン注釈、矩形注釈、円形注釈、折れ線注釈、多角形注釈はそれぞれ、内部色を持つことができます。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)の内部色の設定結果です。
