リンクをクリップボードにコピー
コピー完了
全国健康保険協会が提供している傷病手当金支給申請書(PDF)には、フォームコンポーネントのOKボタンをクリックするだけで文字列を丸で囲む機能が実装されています。
(PDF直リンク)https://www.kyoukaikenpo.or.jp/~/media/Files/honbu/g2/cat230/kenkouhokenkyuufu/k_shoute_n2505.pdf
上記PDFの振込先指定口座欄の「銀行」や「金庫」等の文字列をクリックすると、丸で当該文字列を囲む動作になっています。どうすればこのような機能を実装できるのか、ご存じの方がおりましたら教えてください。
リンクをクリップボードにコピー
コピー完了
Acrobat JavaScriptを使っています。私は環境設定でJavaScriptを無効にしているので、このような画面になります。
JavaScriptは情報があまりないのですが、公式のページはここからかなと思います。
https://helpx.adobe.com/jp/acrobat/using/add-debug-javascript.html
ボタンをクリックすることでJavaScriptが動作し、ボタンの周囲にカプセル状の線を表示し、既に表示されている線があればそれを非表示にすることをやっていると思われます。
リンクをクリップボードにコピー
コピー完了
教えていただきありがとうございます。やはり、JavaScriptを使用して描画処理を行っているのですね。調べて色々試してみます。
リンクをクリップボードにコピー
コピー完了
AIの力を借りて色々試した結果、次のJavascriptをOKボタンのアクション(JavaScript実行)にコピペして、楕円描画をトグル表示させることだけはできるようになりました。取り急ぎ報告まで。
(返信欄ではTABが効かないので見づらくてすみません。)
// 【ボタン2用】黒い楕円トグル
var MY_NAME = "SuperBlackOval_BUTTON2"; // ボタンごとに変更
// ───── 設定エリア(ここだけいじればOK!)──────────────
var ovalLeft = 180; // 左からの距離(pt)
var ovalTop = 680; // 上からの距離(pt)
var ovalWidth = 350; // 横幅(pt)
var ovalHeight = 180; // 縦幅(pt)
var ovalLine = 10; // 線の太さ
// ─────────────────────────────────────
this.syncAnnotScan();
var pageNum = this.pageNum;
var annots = this.getAnnots({nPage: pageNum});
var exists = false;
if (annots != null) {
for (var i = 0; i < annots.length; i++) {
if (annots[i].name == MY_NAME) {
exists = true;
break;
}
}
}
if (exists) {
// 消す
this.syncAnnotScan();
annots = this.getAnnots({nPage: pageNum});
for (var i = annots.length - 1; i >= 0; i--) {
if (annots[i].name == MY_NAME) {
annots[i].destroy();
}
}
} else {
// 描く
this.addAnnot({
page: pageNum,
type: "Circle",
name: MY_NAME,
rect: [ovalLeft, ovalTop, ovalLeft + ovalWidth, ovalTop - ovalHeight],
strokeColor: color.black,
fillColor: color.transparent,
width: ovalLine
});
}
リンクをクリップボードにコピー
コピー完了
協会けんぽのPDFのように、「銀行」「信金」「信組」のような複数文字列を排他的に楕円で囲む方法まではたどりつけました。以下がそのコードです。
(しかし、角丸四角形の描画方法については、色々試したのですが通常の四角形しか描画できず、あきらめました。)
// 【複数文字列の排他選択+解除可能】楕円トグル(○○文字列用:ボタン001)
//囲みたい各文字列の上にOKボタンを配置し、線の色と背景を無しにする。
var MY_NAME = "ExclusiveOval_001"; // グループ化したい複数の文字列に配置したボタンごとにユニークな名前にする
var GROUP_PREFIX = "ExclusiveOval_"; // グループ化したい全ボタン共通の接頭辞(絶対変えない!)
// ───── 設定エリア───────────────────────────────
// ボタン上に描画する楕円の位置と大きさ(ボタンのプロパティ(配置のpt表示)で確認)
var ovalLeft = 40; // ボタンの左 -3pt くらい
var ovalTop = 381; // ボタンの上 +1pt くらい
var ovalWidth = 130; // ボタンの幅 +6pt くらい
var ovalHeight = 15; // ボタンの高さ +2pt くらい
var ovalLine = 3; // 線の太さ(1=細い、3=普通、15=超太い)
var ovalColor = color.black; // 線の色( color.red, color.blue, color.green など)
// ──────────────────────────────────────────
this.syncAnnotScan();
var pageNum = this.pageNum;
var annots = this.getAnnots({nPage: pageNum});
// 現在の自分の状態を調べる
var myExists = false;
for (var i = 0; i < annots.length; i++) {
if (annots[i].name == MY_NAME) {
myExists = true;
break;
}
}
// 【自分の楕円がついている状態】→ 自分の楕円を消して終了(排他解除)
if (myExists) {
this.syncAnnotScan();
annots = this.getAnnots({nPage: pageNum});
for (var i = annots.length - 1; i >= 0; i--) {
if (annots[i].name == MY_NAME) {
annots[i].destroy();
}
}
}
// 【自分の楕円がついていない状態】→ 他の楕円を全部消して、自分だけ描画
else {
this.syncAnnotScan();
annots = this.getAnnots({nPage: pageNum});
// まずグループ内の全楕円を消去(自分以外も含めて全部)
for (var i = annots.length - 1; i >= 0; i--) {
if (annots[i].name.indexOf(GROUP_PREFIX) == 0) {
annots[i].destroy();
}
}
// 自分だけ新しく描画
this.addAnnot({
page: pageNum,
type: "Circle",
name: MY_NAME,
rect: [ovalLeft, ovalTop, ovalLeft + ovalWidth, ovalTop - ovalHeight],
strokeColor: ovalColor,
fillColor: color.transparent,
width: ovalLine
});
}
リンクをクリップボードにコピー
コピー完了
ボタンの位置は、this.getField(event.target.name).rectで自動取得できることがわかったので、改良したコードが以下です。
これで、楕円の位置と大きさを手入力する手間が省けます。
//OKボタン用【複数文字列の排他選択+解除可能】楕円トグル
//囲みたい各文字列の上にOKボタンを配置し、線の色と塗りつぶしを無しにする。
var MY_NAME = "ExclusiveOval_001"; // グループ化したい複数の文字列に配置したボタンごとに接頭辞の後のみ変更する
var GROUP_PREFIX = "ExclusiveOval_"; // グループ化したい全ボタン共通の接頭辞(絶対変えない!)
// ───── 設定エリア(位置と大きさをボタンから自動取得し、少し大きめにする。)
var r = this.getField(event.target.name).rect; //ボタンの位置・大きさ [left, top, right, bottom] を配列で返す
var ovalLeft = r[0] - 3; // ボタンの左 - 3pt
var ovalTop = r[1] + 1; // ボタンの上 + 1pt
var ovalWidth = r[2] - r[0] + 6; // ボタンの幅 + 6pt
var ovalHeight = r[1] - r[3] + 2; // ボタンの高さ + 2pt
var ovalLine = 1; // 楕円の線の太さ(1=細い、3=普通、15=超太い 小数点OK)
var ovalColor = color.black; // 線の色( color.red, color.blue, color.green など)
// ─────────────────────────────────────────
this.syncAnnotScan();
var pageNum = this.pageNum;
var annots = this.getAnnots({nPage: pageNum});
// 現在の自分の状態を調べる
var myExists = false;
for (var i = 0; i < annots.length; i++) {
if (annots[i].name == MY_NAME) {
myExists = true;
break;
}
}
// 【自分の楕円がついている状態】→ 自分の楕円を消して終了(排他解除)
if (myExists) {
this.syncAnnotScan();
annots = this.getAnnots({nPage: pageNum});
for (var i = annots.length - 1; i >= 0; i--) {
if (annots[i].name == MY_NAME) {
annots[i].destroy();
}
}
}
// 【自分の楕円がついていない状態】→ 他の楕円を全部消して、自分だけ描画
else {
this.syncAnnotScan();
annots = this.getAnnots({nPage: pageNum});
// まずグループ内の全楕円を消去(自分以外も含めて全部)
for (var i = annots.length - 1; i >= 0; i--) {
if (annots[i].name.indexOf(GROUP_PREFIX) == 0) {
annots[i].destroy();
}
}
// 自分だけ新しく描画
this.addAnnot({
page: pageNum,
type: "Circle",
name: MY_NAME,
rect: [ovalLeft, ovalTop, ovalLeft + ovalWidth, ovalTop - ovalHeight],
strokeColor: ovalColor,
fillColor: color.transparent,
width: ovalLine
});
}
新しいアドビコミュニティで、さらに多くのインスピレーション、イベント、リソースを見つけましょう
今すぐ検索