Skip to main content
Inspiring
November 12, 2025
Answered

JavaScriptを利用した時の注釈の文字色を変えたい

  • November 12, 2025
  • 1 reply
  • 190 views

お世話になります。

PDFにファイル名を入れて印刷したくて、ChatGPTに頼って試行錯誤しているのですが、文字色のところで、どうにもなりません。

JavaScriptを使用する場合、文字の色は、今設定しているプロパティの設定値でしかどうにもならないのでしょうか?


作業環境(古いのは重々承知なのでツッコミはご遠慮ください)
MacOS10.14.5
Build: 22.1.20112.0


以下、ChatGPTの回答です。

-------------------------------

対処法:プロパティを完全リセットして黒文字で上書きする

次のコードは、addAnnot 後に内部 appearance を再描画して強制的に黒文字に変更します。
この方法だと、どんな注釈プロパティを持っていても確実に黒になります。

 

if (this.documentFileName) {
var fileName = this.documentFileName;

for (var i = 0; i < this.numPages; i++) {
var rect = this.getPageBox("Crop", i);
var left = rect[0] + 10;
var top = Math.max(rect[1], rect[3]) - 20;

// 注釈を追加
var annot = this.addAnnot({
type: "FreeText",
page: i,
rect: [left, top - 12, left + 400, top],
contents: fileName,
strokeColor: color.transparent,
fillColor: color.transparent,
alignment: 0,
textFont: "HeiseiKakuGo-W5",
textSize: 9
});

if (annot) {
// appearance を完全リセットして黒文字で強制描画
annot.textColor = color.black;
annot.strokeColor = color.transparent;
annot.fillColor = color.transparent;
annot.defaultAppearance = "/HeiseiKakuGo-W5 9 Tf 0 g";
annot.refreshAppearance();
}
}

app.alert("左上に黒文字でファイル名を追加しました。");
} else {
app.alert("ファイル名が取得できません。保存されたファイルを開いてください。");
}

    Correct answer とろ57_2

    ChatGPTの回答で文字色が変えられない理由は分かりませんが、ファイル名をそのままcontentsプロパティに設定するのではなく、文字色の指示を含めたspanオブジェクトとしてrichContentsプロパティの方に設定するやり方を試してみてはいかがでしょうか。FreeText注釈(テキストボックス)では文字列範囲を選択してその部分だけ文字色や文字サイズを変更することができます。その際に、各テキスト範囲の文字列、文字色、文字サイズ、フォントを指定するspanオブジェクトの配列を保持するのがrichContentsです。
    具体的には、

    var fileName = this.documentFileName;

    のところで以下のようにspanオブジェクトの配列を設定するようにします。fontFamilyやtextSizeもここで指定します。

    var fileName = new Array();
    fileName[0] = new Object();
    fileName[0].text = this.documentFileName;
    fileName[0].textColor = color.black;
    fileName[0].textSize = 9;
    fileName[0].fontFamily = ["Heisei Kaku Gothic Std W5"];

    そして、addAnnotで注釈コンテンツを設定する際には

    contents: fileName,

    ではなく、

    richContents: fileName,

    とします。
    (Windows 11 Home 25H2、Acrobatバージョン 2025.001.20844で動作確認しました)


    なお、richContentsプロパティの詳細についてはこちらをご参照ください。

    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#richcontents

    1 reply

    Inspiring
    November 12, 2025

    追記です。このコードの後に、ChatGPTは、

    ----------------------------

    もしこれでも色が赤いままの場合、Acrobat のキャッシュや PDF 表示の再描画が影響している可能性があります。
    その場合は最後にこの1行を入れてみてください:

     

    this.dirty = true;
    this.refreshAnnotAppearances();

     

    (これで注釈の見た目を全ページでリロードします)

    ----------------------------

    と提案してきてくれたのですが、これを挿入しても同じでした。

    とろ57_2Correct answer
    Participating Frequently
    November 14, 2025

    ChatGPTの回答で文字色が変えられない理由は分かりませんが、ファイル名をそのままcontentsプロパティに設定するのではなく、文字色の指示を含めたspanオブジェクトとしてrichContentsプロパティの方に設定するやり方を試してみてはいかがでしょうか。FreeText注釈(テキストボックス)では文字列範囲を選択してその部分だけ文字色や文字サイズを変更することができます。その際に、各テキスト範囲の文字列、文字色、文字サイズ、フォントを指定するspanオブジェクトの配列を保持するのがrichContentsです。
    具体的には、

    var fileName = this.documentFileName;

    のところで以下のようにspanオブジェクトの配列を設定するようにします。fontFamilyやtextSizeもここで指定します。

    var fileName = new Array();
    fileName[0] = new Object();
    fileName[0].text = this.documentFileName;
    fileName[0].textColor = color.black;
    fileName[0].textSize = 9;
    fileName[0].fontFamily = ["Heisei Kaku Gothic Std W5"];

    そして、addAnnotで注釈コンテンツを設定する際には

    contents: fileName,

    ではなく、

    richContents: fileName,

    とします。
    (Windows 11 Home 25H2、Acrobatバージョン 2025.001.20844で動作確認しました)


    なお、richContentsプロパティの詳細についてはこちらをご参照ください。

    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#richcontents

    Participating Frequently
    November 14, 2025

    すみませんが、richContentsプロパティを使用する先ほどの投稿について補足させてください。

    例でfontFamilyを指定していますが、ここで指定したフォントがインストールされていなかったり、フォント名が違っていたりすると正常に動作しません。ご注意ください。

    フォントの指定もできそうだという趣旨で例に挙げたものですので、まずは文字色の変更ということで、

    fileName[0].fontFamily = ["Heisei Kaku Gothic Std W5"];

    の行は削除してご検討いただければと思います。