mieki256's diary



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 を使って、作業を自動化してみた。処理内容は以下。
  1. PDFビューアをアクティブにして、選択範囲を Ctrl + C でコピー。
  2. クリップボード内のテキストに対して、改行をスペースに置換。
  3. DeepLデスクトップアプリをアクティブにして、自動で貼り付けをする。(Ctrl+A、Delete、Ctrl+V を送る。)

利用するには AutoIt3 のインストールが必要。

_Home - AutoIt
_AutoIt Downloads - AutoIt

スクリプトソース。 :

以下のような感じになった。

_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 のクラス名を調べて反映させれば動くかもしれず。

使い方。 :

  1. copypaste_gui.au3 を実行。
  2. ボタンが2つ並んだウインドウが表示されるので、適当な位置に置く。
  3. Adobe Acrobat Reader DC と、DeepLデスクトップアプリを起動しておく。
  4. Acrobat Reader DC で目的のPDFを開く。
  5. (重要) DeepLデスクトップアプリ上で、入力欄をクリックしてフォーカスを与えておく。これをしておかないと変な動作になる。
  6. PDF上の、翻訳したいテキストを選択して、copypaste_gui.au3 のウインドウの「Translation」をクリック。

以下のような感じで自動翻訳できる。




これで少しは英文pdfを眺めるのが楽になった…かな…。たぶん。

ところで。このくらいの処理なら、Python + PyAutoGUI を使ってもできるのではなかろうか…?

以上です。

過去ログ表示

Prev - 2022/04 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project