xlogI125’s blog

パソコン作業を効率化したい

Acrobat Reader: 添付ファイル名をJavaScriptで表示

メモ

  • this.dataObjects.map(obj => obj["path"])
  • this.getAnnots().filter(annot => annot.type == "FileAttachment").map(annot => annot.getProps()["contents"])

使い捨てスクリプト

  • 環境設定 → JavaScriptJavaScript デバッガー → 「エラーとメッセージをコンソールに表示」にチェックを入れておいてください
  • コンソールでの実行はテキストを範囲選択して Ctrl + Enter
// テスト環境: Acrobat Reader (2023年11月頃), Windows 11
// ファイル名: %APPDATA%\Adobe\Acrobat\Privileged\DC\JavaScripts\test.js
// エンコード: ANSI

// メニューバー の ヘルプ に項目を追加
app.addMenuItem({cName: "ConsoleShow",        cParent: "Help", cExec: "console.show();"});
app.addMenuItem({cName: "TestFileAttachment", cParent: "Help", cExec: "my.f(this);"});
app.addMenuItem({cName: "TestDataObjects",    cParent: "Help", cExec: "my.g(this);"});

var my = {};

// FileAttachment
my.f = doc => {
  const docGetAnnots = doc.getAnnots();
  if (docGetAnnots === null) {
    throw new Error("doc.getAnnots() ... null");
  }
  const annots = docGetAnnots.filter(annot => annot.type == "FileAttachment");
  var annot, propName, str = "";
  for (annot of annots) {
    const objLiteral = annot.getProps();
    str += "-------------------- | --------------------\r";
    for (propName in objLiteral) {
      str += util.printf('%s | %s\r', propName, annot[propName]);
    }
  }
  console.println(str);
  console.show();
};

// dataObjects
my.g = doc => {
  const docDataObjects = doc.dataObjects || (() => {
    throw new Error("doc.dataObjects ... null");
  })();
  var propName, str = "";
  docDataObjects.forEach((obj, numObjs) => {
    str += "-----------------------------------\r";
    for (propName in obj) {
      str += util.printf('this.dataObjects[%d]["%s"]\r%s\r\r', numObjs, propName, obj[propName]);
    }
  });
  console.println(str);
  console.show();
};