終了

AppleScriptでハイパーリンクを編集したいが一部の処理がすごく遅い

Community Expert ,
Jun 15, 2023 Jun 15, 2023

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

コピー完了

お世話になっております

季刊の案件で、PDF上の全てのハイパーリンクにJavaScriptを追加する必要があり、

年に4回ほどのペースで自動化を模索しては諦めて、

現状、PDFを編集、リンクを1つずつカチカチ、アクション、JavaScriptを実行、追加ボタン、

this.zoom = 100; と入力(2つめ以降はコピペ)、OKボタン、さらにOKボタン

という泥めいた手作業を行っています。

季刊の夏号はリンクが100個弱あり、肩にきます。

Acrobatのアクションを利用できないものかとUSフォーラムで質問したこともありましたが、ノーウェイ的なことを言われ、諦めるしかなかったです。

 

今回、全自動は諦めて半自動でまた模索しだして、

今日はAppleScriptでGUI操作をしてみることにしました。

まあまあ快適そうに動くのですが、

アクションの追加 > アクションを選択 > JavaScript を実行 のくだりの

JavaScriptエディター への入力のところで謎に6秒ほど待たされてしまいます。

以下コードです。

 

tell application "Adobe Acrobat"
	activate --スクリプトエディタからのテスト用
end tell
tell application "System Events"
	--set the clipboard to "this.zoom = 100;" --没案_クリップボード
	key code 36 --ハイパーリンクを選択中のリターンキー リンクのプロパティを出す
	delay 0.2
	tell process "AdobeAcrobat"
		tell tab group 1 of window "リンクのプロパティ"
			click radio button "アクション"
			tell group "アクションの追加"
				tell pop up button "アクションを選択 :"
					click
					tell menu "アクションを選択 :"
						click menu item "JavaScript を実行"
					end tell
				end tell
				click button "追加..."
				--key code 102 --ココがすごくおそい
				--keystroke "this.zoom=100;" --ココもおそい
				--key code 9 using {command down} --没案_クリップボード
				--delay 0.5
			end tell
		end tell
		tell window "JavaScript エディター"
			tell text area 1 of scroll area 1 of group "JavaScript の作成と編集"
				set value to "this.zoom = 100;" --結局おそい
				delay 0.5
			end tell
			click button "OK"
		end tell
		tell window "リンクのプロパティ"
			click button "OK"
		end tell
	end tell
end tell

 

 

見にくそうなのでスクショも。

スクリーンショット 2023-06-15 17.18.44.png

 

なんとなくですが key code および key stroke が原因なのかと思い、

テキストエリアに文字列を直接ぶちこむように改変してみたところまでです。

(何ら改善ありませんでした)

 

もうひとつわからないのが、

JavaScriptエディターが表示された状態までは手で行って、

値を入力するところだけをやると、理想的な速度で実行されます。

 

tell application "System Events"
	tell process "AdobeAcrobat"
		tell window "JavaScript エディター"
			tell text area 1 of scroll area 1 of group "JavaScript の作成と編集"
				set value to "this.zoom = 100;"
			end tell
		end tell
	end tell
end tell

 

 

もともとAppleScriptには明るくないので打開に苦しんでおります。

・高速な処理方法

・数秒待たされる原因

について教えていただけるとうれしいです。

ムダに長くてすみません。よろしくお願いいたします。

 

macOS 11.7.4

Acrobat 2023.003.20201

キーワード
PDF の編集と変換 , 手順

表示

576

翻訳

翻訳

レポート

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

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

コピー完了

やってみたこと

 

スクリプトを入力直前、入力以降の2つに分けて実行

スクリーンショット 2023-06-15 17.27.42.png

 

たてつづけに実行したところ、やはり6秒ほど待たされました。

試しに6秒ほど待ってから2つめのスクリプトを実行したところ、即実行されました。

この時間、なんなんでしょうか…

 

さらに試しに、2つめのスクリプトの値入力をコメントアウトしておき、

1つめ実行、入力は自分でペースト、2つめ実行

としてみても、やはり謎6秒。

 

今のところ、1つめ実行(JavaScriptエディターを開くまで)、

コードをペースト、手でOKボタンを2回

が最速の作業となっています。最悪まあこれでもいいかなと思いますが、まあかっこわるいですね。

投票

翻訳

翻訳

レポート

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

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

コピー完了

はいぱーりんく検索しながら処理するのはJavaScriptでメニューに組み込めないこともないんだけど、JavaScriptの実行って何するんでしょか?

投票

翻訳

翻訳

レポート

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

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

コピー完了

アップしたコードに仕込んである通り、ただただズーム値100%にする代物です。それしきの事すらままならなくて2年間もがいてますw

投票

翻訳

翻訳

レポート

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

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

コピー完了

zoomを設定しているって事は、
WEBサイト参照のURLリンクではなく
同一ドキュメント内のページビューの移動
Link Annotationですよね?


WEBリンクの『Link Annotation』と
同一ドキュメント内の他のページへの移動の
『Link Annotation』では処理が違うんです。


同一ドキュメント内の他のページへの移動の場合は
javascript使わなくてもzoom値変えられると思いますが…

https://quicktimer.cocolog-nifty.com/icefloe/2023/06/post-02f8f0.html
参考まで

投票

翻訳

翻訳

レポート

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

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

コピー完了

QuickTimerさんありがとうございます。例文までご用意いただき感激ですー!

おっしゃる通り同一ドキュメント内のページビュー移動だけのものです。具体的には目次やイベントのプログラムに集約しています。

 

手でリンクを作成する際にズーム値を仕込めるのは前任者がやっていて把握していたのですが、

目次の文言の範囲選択、文言に応じたジャンプ先ページの設定などがまあ煩雑なため、作成元のInDesign側でスクリプト処理しているという前提がありまして。。

今回のAppleScriptでアクションあと乗せ策がこけたら根本からワークフロー見直しかなと思っています。

 

InDesignで作ったリンクをもとにboundsやらジャンプ先をいただいてAcrobat上で作り直す、というのはアリかもです。いいヒントいただきました。

投票

翻訳

翻訳

レポート

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

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

コピー完了

リンク注釈は『注釈パネル』に表示されないので
javascriptでthis.selectedAnnotsが利用できないので
『どれ』を処理するか?について
どうしても人間が介在する必要があります。
(まぁ普通の注釈も選択しないとアレだけどね…苦笑)
なので
InDesign側で『zoom=100』が必要になるリンク注釈には
特定なprefixを入れた『name』を設定してもらえるようになれば
if (name of some Annotation) start with "someprefix" then
set zoom factor to 100
end if

瞬殺です。
いやSystemEventで…って事なら
注釈は『ページ』に紐ついています
(Xページ目のX個目の注釈とか)
なので、tell front page内で処理したら
『もしかしたら』改善される。『かも』しれません
(お試しを、私は試さないけど…SystemEvent苦手…)
参考まで

投票

翻訳

翻訳

レポート

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

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

コピー完了

今回、ドキュメント上のリンクはすべて対象となるので

なんでもかんでもやってしまいたいのですが、

コレで「100に設定できません」とエラーが出ます。

tell application "Adobe Acrobat"
	tell active doc
		tell front PDF Window
			tell front page
				set listAnnot to (every annotation)
				repeat with itemAnnot in listAnnot
					tell itemAnnot
						set color to {255, 0, 0}
						--set destination page number to 1
						set zoom factor to 100
					end tell
				end repeat
			end tell
		end tell
	end tell
end tell

 

おっそらく、リンクに設定されたアクションのラジオボタンが「移動先を使用」ではなく「ページ番号を使用」のほうになっていないと受け付けないのではないかと想像しています。

スクリーンショット 2023-06-16 11.10.05.png

 

この「移動先」の取得方法がわからず、わかったところで「.589:1」が何を意味するのかもわからず、ページ番号に転用する手段がおぼつかない感じです。

 

この案件、しおり(ブックマーク)でも同様の処理を施す必要があり、そちらはしおりを発火させて飛んだ先のページ番号を取得して新規作成、古いの削除、という手法をとっています。

もしリンクにinvokeやexecuteに相当するメソッドがあるようなら似た手段で済ませられるかも、などとも考えています。見つかりません。。

投票

翻訳

翻訳

レポート

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

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

コピー完了

ありゃりゃ
ダメでしたか…トホホ
じゃぁ
元に戻って
移動先のアクションが上書きされちゃうかも?しれないけど
Javascriptアクションの追加をお試しください
https://quicktimer.cocolog-nifty.com/icefloe/2023/06/post-de6b21.html

参考まで

 

---追記
applescript からのLink Annotationの設定は
あくまでも
destination page number と destination rectangle(位置)で
destination nameが無いですから
名前指定の移動先はapplescriptからは操作出来ない『かも』しれないなぁ

投票

翻訳

翻訳

レポート

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

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

コピー完了

ありがとうございますー

上書きされ…ましたw

スクリーンショット 2023-06-16 12.33.14.png

投票

翻訳

翻訳

レポート

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

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

コピー完了

annotationオブジェクトのことをよく理解できていないのですが、

紐づいたリンクオブジェクトを捕まえるのは可能なのでしょうか…

そしたらclickして、飛んだ先のページ名を拾えるなあ、なんて。

投票

翻訳

翻訳

レポート

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

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

コピー完了

AppleScriptでのLink Annotationの処理は『多分無理』なので
javascriptでとなりますが
例で出したのが 表示中ページの最初のリンク注釈にアクションセットする方法が
0ページ=1ページ目に拡大100%で移動のsetActionアクションが

 

var numPageNo = this.pageNum;
var listRect = this.getPageBox("Crop", numPageNo);
var listLinkAnnot = this.getLinks(numPageNo, listRect);
var numGoToPageNo = 0;
var numZoomNo = 100;
listLinkAnnot[0].setAction("this.pageNum = numGoToPageNo;this.zoom = numZoomNo;");

 


なので

 

var someGoToName to "名前のついたリンク先"
listLinkAnnot[0].setAction("someGoToName;this.zoom = numZoomNo;");

 

とか
できれば良さそうな気がしますが、やり方わからーんですm(_ _)m
お力になれずすみません。m(_ _)m
System eventに戻った方が良いのかも…汗
javascriptエキスパートな方から、ヒントが出るといいのですが…他力本願
参考まで

投票

翻訳

翻訳

レポート

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

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

コピー完了

最新

Quick Timerさん、たくさんの案と貴重なお時間をいただき感謝恐縮ですっ

 

今回の顛末ですが、スレッドのリンクをSNSに貼ったところ

通りすがりの親切な方が2案出してくださり、

・当初のスクリプトの時間がかかる部分(追加ボタンのクリックからウィンドウ出現まで)をボタンクリックではなくtabでフォーカスを送ってreturnキーで実行、で改善

・リンク編集画面で「すべてを選択」でページ内一括でアクションにスクリプトを追加できること

で、とりあえず1ページ1回の処理ができるようになりました。当初の作業量を思えば大躍進なのでここで満足してしまってます。

 

tell application "Adobe Acrobat"
	activate --スクリプトエディタからのテスト用
end tell
tell application "System Events"
	key code 0 using {command down} --困A すべてのリンクを選択
	key code 36 --ハイパーリンクを選択中のリターンキー リンクのプロパティを出す
	tell process "AdobeAcrobat"
		tell tab group 1 of window "リンクのプロパティ"
			click radio button "アクション"
			tell group "アクションの追加"
				tell pop up button "アクションを選択 :"
					click
					tell menu "アクションを選択 :"
						click menu item "JavaScript を実行"
					end tell
				end tell
				--click button "追加..."
				key code 48 --tab
				key code 48 --もっかいtab
				key code 49 --space で追加ボタン実行
			end tell
		end tell
		tell window "JavaScript エディター"
			tell text area 1 of scroll area 1 of group "JavaScript の作成と編集"
				set value to "this.zoom = 100;"
			end tell
			click button "OK"
		end tell
		tell window "リンクのプロパティ"
			click button "OK"
		end tell
	end tell
end tell

 

 

あ、でもこれ、ページのループをかませばますます完成なのでは…

投票

翻訳

翻訳

レポート

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

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

コピー完了

あっやっぱり…上書きされちゃうよね…そうだよね…汗

すまーんですm(_ _)m申し訳ない…m(_ _)m(ホントごめんなさい)

投票

翻訳

翻訳

レポート

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

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

コピー完了

System eventとは直接は関係無いかもだけど
repeatとかで
処理件数が多い時は
スクリプトエディタの
設定>>履歴『ログの履歴』をOFFにすると
若干…ほんと気のせいレベルだけど
動作が改善します。(改善したような気がします)
参考まで

投票

翻訳

翻訳

レポート

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