2022/04/23(土) [n年前の日記]
#1 [windows] 英文PDFの自動翻訳をAutoIt3を使って少し快適にした
Moho 13.5.3 の英文マニュアルpdfを眺めているのだけど、英文なのでなかなかツライ。できれば DeepL等の自動翻訳サービスを利用して、日本語に変換しつつ読みたい。
ただ、ちょっと問題があるというか、操作が面倒臭いというか…。
DeepLデスクトップアプリは、Ctrl+C を2回叩くと、クリップボード内のテキストを DeepL の入力欄に貼り付けて翻訳してくれるので…。フツーなら、PDF上のテキストを選択しておいて、Ctrl+C を2回叩けば自動翻訳できそうなものなのだけど。
しかし、PDFからテキストをコピーしようとすると、改行コードも入ってしまうので…。英文の途中で改行されている状態になってしまって翻訳結果がおかしくなってしまう。
今までは、DeepL に貼り付けてから、手作業で改行を削除して、再度翻訳させていたけれど、これがとても面倒臭い。こんなこと何度もやってられない。
そこで、AutoIt3 3.3.16.0 x86 を使って、作業を自動化してみた。処理内容は以下。
利用するには AutoIt3 のインストールが必要。
_Home - AutoIt
_AutoIt Downloads - AutoIt
以下のような感じで自動翻訳できる。
これで少しは英文pdfを眺めるのが楽になった…かな…。たぶん。
ところで。このくらいの処理なら、Python + PyAutoGUI を使ってもできるのではなかろうか…?
ただ、ちょっと問題があるというか、操作が面倒臭いというか…。
- 環境は Windows10 x64 21H2。
- Adobe Acrobat Reader DC 64bit 2022.001.20117、もしくは、Google Chrome 100.0.4896.127 64bit を使ってPDFを表示。
- 自動翻訳は、DeepL デスクトップアプリ 3.4.15088+fb3ba1f を利用。
DeepLデスクトップアプリは、Ctrl+C を2回叩くと、クリップボード内のテキストを DeepL の入力欄に貼り付けて翻訳してくれるので…。フツーなら、PDF上のテキストを選択しておいて、Ctrl+C を2回叩けば自動翻訳できそうなものなのだけど。
しかし、PDFからテキストをコピーしようとすると、改行コードも入ってしまうので…。英文の途中で改行されている状態になってしまって翻訳結果がおかしくなってしまう。
今までは、DeepL に貼り付けてから、手作業で改行を削除して、再度翻訳させていたけれど、これがとても面倒臭い。こんなこと何度もやってられない。
そこで、AutoIt3 3.3.16.0 x86 を使って、作業を自動化してみた。処理内容は以下。
- PDFビューアをアクティブにして、選択範囲を Ctrl + C でコピー。
- クリップボード内のテキストに対して、改行をスペースに置換。
- DeepLデスクトップアプリをアクティブにして、自動で貼り付けをする。(Ctrl+A、Delete、Ctrl+V を送る。)
利用するには AutoIt3 のインストールが必要。
_Home - AutoIt
_AutoIt Downloads - AutoIt
◎ スクリプトソース。 :
以下のような感じになった。
_copypaste_gui.au3
スクリプトの最初のあたりの、Dim $pdfviewer = 〜 を書き換えれば、Google Chrome に対しても使えると思う。たぶん。手元の環境では一応動いた。もし動かない時は、AutoIt に付属している Au3Info.exe か Au3Info_x64.exe を起動して、Google Chrome のクラス名を調べて反映させれば動くかもしれず。
_copypaste_gui.au3
; Copy text from PDF viewer, ; replace CRLF in clipboard with space, ; paste it into deepl. #include <GUIConstantsEx.au3> ; Dim $pdfviewer = "[CLASS:Chrome_WidgetWin_1]" Dim $pdfviewer = "[CLASS:AcrobatSDIWindow]" Dim $deeplclass = "DeepL" Dim $state Local $btn1, $btn2 Local $msg ; create GUI window Local $hGUI = GUICreate("Copy Paste", 280, 70) $btn1 = GUICtrlCreateButton("Translation", 8, 8, 180, 50) GUICtrlSetFont($btn1, 18, 700, 0, "Arial") $btn2 = GUICtrlCreateButton("Exit", 200, 8, 70, 28) GUISetState() ; HotKeySet("{ESC}", "Terminate") While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ; Click window close button ExitLoop EndIf If $msg = $btn1 Then ; Click button 1 trans() EndIf If $msg = $btn2 Then ; Click button 2 ExitLoop EndIf WEnd GUIDelete($hGUI) Exit 0 Func Terminate() GUIDelete($hGUI) Exit 0 EndFunc Func trans() ; Activate PDF viewer $state = WinActivate($pdfviewer) If $state = 0 Then MsgBox(0, "Error", "Error: Not found PDF viewer") Exit 0 EndIf Send("^c") ; send Ctrl+C Sleep(500) ; Replace CRLF in clipboard with space ClipPut(StringReplace(ClipGet(), @CRLF, " ")) ; Activate DeepL $state = WinActivate($deeplclass) If $state = 0 Then MsgBox(0, "Error", "Error: Not found DeepL") Exit 0 EndIf Send("^a") ; send Ctrl+A Sleep(250) Send("{DELETE}") ; Delete key Sleep(250) Send("^v") ; send Ctrl+V EndFunc
スクリプトの最初のあたりの、Dim $pdfviewer = 〜 を書き換えれば、Google Chrome に対しても使えると思う。たぶん。手元の環境では一応動いた。もし動かない時は、AutoIt に付属している Au3Info.exe か Au3Info_x64.exe を起動して、Google Chrome のクラス名を調べて反映させれば動くかもしれず。
◎ 使い方。 :
- copypaste_gui.au3 を実行。
- ボタンが2つ並んだウインドウが表示されるので、適当な位置に置く。
- Adobe Acrobat Reader DC と、DeepLデスクトップアプリを起動しておく。
- Acrobat Reader DC で目的のPDFを開く。
- (重要) DeepLデスクトップアプリ上で、入力欄をクリックしてフォーカスを与えておく。これをしておかないと変な動作になる。
- PDF上の、翻訳したいテキストを選択して、copypaste_gui.au3 のウインドウの「Translation」をクリック。
以下のような感じで自動翻訳できる。
これで少しは英文pdfを眺めるのが楽になった…かな…。たぶん。
ところで。このくらいの処理なら、Python + PyAutoGUI を使ってもできるのではなかろうか…?
[ ツッコむ ]
以上です。