終了

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

エクスプローラー ,
Jul 09, 2023 Jul 09, 2023

リンクをクリップボードにコピー

コピー完了

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になる。
キーワード
Acrobat SDK と JavaScript

表示

722

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

エクスプローラー , Jul 16, 2023 Jul 16, 2023

追記:

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

 

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

 

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

 

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

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

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

投票

翻訳

翻訳
Community Expert ,
Jul 10, 2023 Jul 10, 2023

リンクをクリップボードにコピー

コピー完了

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

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

 

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
エクスプローラー ,
Jul 10, 2023 Jul 10, 2023

リンクをクリップボードにコピー

コピー完了

Ten_A様

ありがとうございます!

 

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

 

急いで確認してきます。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
エクスプローラー ,
Jul 11, 2023 Jul 11, 2023

リンクをクリップボードにコピー

コピー完了

お世話になっております。

いただいたリファレンスを確認するなどいくばくか進めておりますが、つまづいておりご存じでしたら教えてください。

 

本件の最終目標は

高度な検索>条件設定+キーワード入力の自動設定>検索結果の表示>検索リストを制御

なのですが、search.query()を使用して検索を行うことは成功しております。

しかし、入力文字が中国語の時など文字が化けてしまう現象に悩まされており、外部ファイルを読み込めばいけるのでは?という考えから質問していました。

 

jsファイルのエンコードがUTFの場合、そのままでは日本語が化けてしまいます。

ユニバーサル文字の\u0000形式に置き換えると日本語は表示できます。

 

SJISにエンコードしておくとそのままのタイピングで正常に出力できます。

SJIS内でもユニバーサル文字から文字起こしは可能ですが同じく中国語文字が化けます。

 

app.alertだけはユニバーサル文字なら常時正しく表示することができます。

例:app.alert("\u56FD\u9645\u7EA7");//正常な表記:国际级 , 化けると:国..

 

search.query()だけはSJISフォーマットに置き換えられてしまうのか、化けてしまいます。

 

FileStreamから読み込む方法がネットにあったのでやってみたのですが、エラーで実行自体が失敗し続けているのでいったん保留状態です。

参考文献:stackoverflow.com/questions/62310777/
var
fileStream = util.readFileIntoStream("C:/ ~ /TextFile.txt"); var fileString = util.stringFromStream(fileStream, "utf-8"); app.alert(fileString);

 

中国語文字が扱えると嬉しい限りなのですが、現実的な感じがしますでしょうか?

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jul 11, 2023 Jul 11, 2023

リンクをクリップボードにコピー

コピー完了

う〜ん、よくわかってないんですけど、入力自体が取れるのなら化けててもchaCodeAtで文字コード自体は取れるのでそちらから処理できないかと…

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
エクスプローラー ,
Jul 11, 2023 Jul 11, 2023

リンクをクリップボードにコピー

コピー完了

testFunction = app.trustedFunction(
function (){

 

//開くファイルを選択:テキストファイルに検索ワードを半角スペースで区切ったテキストが含まれる
var fileStream = util.readFileIntoStream();

//ファイルを開いてUTF8形式で読み込んで変数に格納

var fileString = util.stringFromStream(fileStream, "utf-8");

app.alert(fileString);//これは正常にディスプレイ上に表示される


//各種検索条件の設定
search.wordMatching = "MatchAnyWord"; //単語の一致方法(語句、すべての語、いずれかの語、ブールクエリ)を指定します。
search.matchWholeWord = false; //完全に一致する語のみを検索します。
search.matchCase = false; //クエリで大文字と小文字を区別するかどうかを指定します。
search.proximityRange = false; //近似検索をする場合の、単語間のワード数を指定します。
search.stem = false; //語幹を含む単語を検索します。
search.bookmarks = false; //文書のしおりを検索します。
search.markup = false; //注釈を検索します。
search.attachments = false; //ベースとなる文書だけでなく、PDF 添付ファイルも検索します。


//文言検索
search.query(fileString, "ActiveDoc");//やはり化ける

}
);

 

ご返信ありがとうございます。

一応、readFileIntoStream()の使い方を理解した結果、外部ファイルを正常にインポートすることはできました。最初の質問のFolder関数などが無くてもなんとか外部ファイルを読み込むことはできました。手元の古いAcrobat9ではライブラリが中途半端すぎてなにもできませんでしたが、DCの環境が用意できたのでテストしたところ、外部ファイルを読み込むことはできました。

 

しかし、外部ファイルから読み込んでも結局search.query()が正しく中国文字を読み込めないようで煮詰まってしまいましたのでいったんここまでで保留にしようと思います。

 

Ten_A様わざわざご提案までしていただきご迷惑をおかけして申し訳ございませんどうもありがとうございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
ファン ,
Jul 11, 2023 Jul 11, 2023

リンクをクリップボードにコピー

コピー完了

途中からなので、何してるのか?アレなんですが
UTF16とかBig5なら通るとか?かしら?
website_image00261116_212311.png

 



参考まで 10年近く前の記事なのでアレですが…
https://force4u.cocolog-nifty.com/skywalker/2014/11/post-9312.html

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
エクスプローラー ,
Jul 11, 2023 Jul 11, 2023

リンクをクリップボードにコピー

コピー完了

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

本件の最終目標は

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

 

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

 

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

 

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

 

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

 

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

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
エクスプローラー ,
Jul 16, 2023 Jul 16, 2023

リンクをクリップボードにコピー

コピー完了

最新

追記:

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

 

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

 

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

 

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

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

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines