バツ印に見える注釈を作成したいので、長方形の対角線位置に直線を追加する方法を考える。
// テスト環境: Acrobat Reader (2024年3月頃), Windows 11 // ファイル名: %APPDATA%\Adobe\Acrobat\Privileged\DC\JavaScripts\test.js // エンコード: ANSI // 起動時に毎回JavaScriptデバッガーを表示 console.show(); console.println("// コンソールでの実行はテキストを範囲選択して Ctrl + Enter"); console.println("// app.getPath('user', 'javascript');"); // #=> /C/Users/xxx/AppData/Roaming/Adobe/Acrobat/Privileged/DC/JavaScripts // メニューに登録 app.addSubMenu({ cParent: "Help", nPos: 0, cName: "MyTest", cUser: "テスト" }); app.addSubMenu({ cParent: "Help", nPos: 1, cName: "-", cUser: "" }); app.addMenuItem({ cParent: "MyTest", cName : "MyTestShowConsole", cUser : "コンソールを表示", cEnable: "event.rc = true;", cExec : "(() => { console.show(); })();" }); app.addMenuItem({ cParent: "MyTest", cName : "-", cExec : "" }); app.addMenuItem({ cParent: "MyTest", cName : "MyTestShowAnnotProps", cUser : "注釈のプロパティを表示", cEnable: "event.rc = (event.target != null);", cExec : util.printf("(%s)();", (() => { console.clear(); const annots = this.selectedAnnots; if (annots === undefined) return; var str = ""; annots.forEach((annot, i) => { const prop = annot.getProps(); for (name in prop) { switch (name) { case "points": var x1mm = prop[name][0][0] * 25.4 / 72; var y1mm = prop[name][0][1] * 25.4 / 72; var x2mm = prop[name][1][0] * 25.4 / 72; var y2mm = prop[name][1][1] * 25.4 / 72; str += util.printf("%02d %s : [[%.1f, %.1f], [%.1f, %.1f]] // mm\r", i, name, x1mm, y1mm, x2mm, y2mm); break; case "popupRect": case "rect": if (prop[name] !== undefined) { var x1mm = prop[name][0] * 25.4 / 72; var y1mm = prop[name][1] * 25.4 / 72; var x2mm = prop[name][2] * 25.4 / 72; var y2mm = prop[name][3] * 25.4 / 72; str += util.printf("%02d %s : [%.1f, %.1f, %.1f, %.1f] // mm\r", i, name, x1mm, y1mm, x2mm, y2mm); break; } default: str += util.printf("%02d %s : %s\r", i, name, prop[name]); } } }); console.println(str); console.show(); }).toString()) }); app.addMenuItem({ cParent: "MyTest", cName : "-", cExec : "" }); app.addMenuItem({ cParent: "MyTest", cName : "MyTestAddLine", cUser : "長方形の対角線位置に直線を追加", cEnable: "event.rc = (event.target != null);", cExec : util.printf("(%s)();", (() => { // 選択された注釈を取得 const annots = this.selectedAnnots; if (annots === undefined) return; annots.forEach(annot => { switch (annot.type) { case "Square" : break; // 長方形 case "FreeText": break; // テキストボックス default : return; } // 形状が長方形である注釈のプロパティを取得 const propRect = annot.getProps(); // 線のプロパティを設定 var propLine = { type : "Line", page : propRect.page, points : [[0, 0], [1, 1]], doCaption : false, leaderExtend: 0, leaderLength: 0, // 表示方法 arrowBegin : "None", arrowEnd : "None", style : "S", width : propRect.width, strokeColor: propRect.strokeColor, fillColor : propRect.fillColor, opacity : propRect.opacity, // 一般 author : propRect.author, subject: propRect.subject, modDate: propRect.modDate, // ロックなど lock: false, readOnly: false, hidden: false, noView: false, toggleNoView: false, print: true, delay: false }; // 線を追加 const annotLine1 = this.addAnnot(propLine); const annotLine2 = this.addAnnot(propLine); // 線の座標を変更 const [x1, y1, x2, y2] = propRect.rect; annotLine1.points = [[x1, y1], [x2, y2]]; annotLine2.points = [[x1, y2], [x2, y1]]; }); }).toString()) });