Skip to main content
MSAII
Inspiring
July 10, 2023
Answered

Acrobat上でJavaScriptを実行したらFile()やFolder()などの通常使えるはずの関数が存在しなかった

  • July 10, 2023
  • 1 reply
  • 2082 views
Ten_A様の技術紹介を見てやってみたいことができたのでスクリプトを参考に組んでいたのですが、ごく単純なFile()を使用したtxtファイルの読み込みなどが一切できず、typeofで確認しても存在しないといわれてしまいます。
 
もしかしてAcrobat上のJavaScriptってAdobe側が提供している関数以外一切動かない仕様でしょうか。
 
Ten_A様紹介ページ
 
以下サンプル
 
//「編集」メニューの一番上にサブメニューを設置
app.addSubMenu(
    {
        cName: "自動化スクリプト",
        cParent: "Edit", nPos: 0 
    }
);
 
//設置したサブメニューにメニュー項目を設置。
app.addMenuItem(
    {
        cName: "testFunctionName",
        cParent: "自動化スクリプト",
        nPos:0,
        cEnable:!1,
        cExec: "testFunction ()"
    }
);
 
//サブメニューの項目がクリックされたら実行される関数内容
testFunction = app.trustedFunction(
    function (){
        if (typeof Folder == 'function') {
            app.alert("関数は存在する");
        } else {
            app.alert("関数は存在しない");
        }
    }
);
 
結果
関数は存在しないと返却されるし、File()などを書いてもNot DefinedとしてReferenceErrorになる。
This topic has been closed for replies.
Correct answer MSAII

コメントありがとうございます。

本件の最終目標は

PDF内のテキストに対して、特定の単語の部分をハイライトで全部着色していくことを自動化できないかと考えて色々とテストしておりました。

 

そのなかで、日本語・英語・数字・基本的な記号程度であればプログラムから検索条件として自動的に設定し、正しい件数のヒットが確認できました。

 

しかし、実運用の予定としては中国語の単語を検索してハイライト着色したいと考えておりました。

 

そのため、検索の引数に中国語の文字が受け渡しできないと検索結果が得られないのですが、SJIS形式に強制キャストされている疑惑があり、UTF8形式のままでは化け、ユニバーサル文字に置き換えても化け、事前にSJISに置き換えればそもそもサポートしていない文字なので当然化け、という感じで中国語の文字が正しく検索用のプログラムに受け渡しできないことが事の発端でした。

 

Acrobat側が提供している関数を利用する形になるのでユーザー側の定義で特にクリアする方法が見つからず、いったん保留にして将来のAcrobatのアップデートで対応されることを期待するしかないかなというところで本件クローズしようかなと考えている次第です。

 

ご提案のUTF16等でエンコードデコードをおこなってみたところ、app.alert上は特に問題なくてもsearch.query()でSJIS準拠になってしまい化けるの繰り返しとなっているようで半ば諦め方針となっております。

ご提案については大変ありがとうございました。


追記:

ユニコードが正常に組み込めないことに関して、Acrobatの起動メニュー(Ctrlキーを押しながらAcrobatを起動したときに表示される言語選択メニュー)から英語に変更すると前述のsearchを実行したとき、正常に表示できていた漢字も追加で化けるようになる現象を確認しました。

 

このことから、Acrobat自体が使用されている環境言語に依存し、手動での入力以外でのプログラム動作からのリクエストを完全に遮断していることが考えられます。

 

想定されるべきだが、想定外の仕様と言いましょうか。普通に不具合レベルなので報告するべきなんでしょう。

 

という感じでした。なので現状で打破する方法はありませんでした。

お騒がせしまして申し訳ありませんでした。

どうもありがとうございました。

1 reply

Ten A
Community Expert
Community Expert
July 10, 2023

AcrobatのJavaScriptAPIはWeb向けの一般的なものとはかなり異なり、Fileオブジェクト自体実装されていません。

以下のドキュメントが参考になるでしょう。

 

https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/pdfs/acrobatsdk_jsapiref.pdf

MSAII
MSAIIAuthor
Inspiring
July 10, 2023

Ten_A様

ありがとうございます!

 

段階的にですが、searchオブジェクトを使って高度な検索を行おうとしたところ、jsファイルがs-jisコードだったのが原因で中国語文字が化けてしまい、File()とかからインポートすればいいかと考えた矢先に転んだので助かりました。

 

急いで確認してきます。