【python, pyperclip】pdfをコピーするときの改行をなくすプログラム

英語で書かれたpdf文書を翻訳したいとき、そのままコピーして翻訳ソフトに貼り付けると余計な改行が入っていてうまく翻訳できないことがあります。

ネットで調べると様々な対策があるようですが、今回はpythonでクリップボードの文章の改行を削除するという手法を取ってみようと思います。

早速ですがプログラムです。

import pyperclip
import keyboard
import tkinter as tk

# 改行の削除
def remove_newlines(text):
    """Remove newline characters (\n) from the given text."""
    new_text = text.replace('\r\n', ' ').replace('\n', ' ').replace('\r', ' ')
    return new_text

# クリップボード中の改行を削除
def paste_new_text():
    clipboard_text = pyperclip.paste()
    modified_text = remove_newlines(clipboard_text)
    pyperclip.copy(modified_text)
    popup_window()
    print("改行が削除されたテキストをクリップボードにコピーしました。")

# ポップアップ表示
def popup_window():
    popup = tk.Tk()
    popup.title("ポップアップ")
    popup.geometry("250x100")
    popup.lift()  # ウィンドウを最前面に表示
    label = tk.Label(popup, text="改行削除完了", padx=10, pady=10)
    label.pack()
    popup.after(1000, popup.destroy)  # 1000ミリ秒後にウィンドウを閉じる
    popup.mainloop()

# 入力待ち
def main():
    print("Ctrl+Bを押すとクリップボードの文章から改行が削除されます。")
    keyboard.add_hotkey("ctrl+b", lambda: paste_new_text())
    keyboard.wait('esc')  # プログラムが終了されるまで待機

if __name__ == "__main__":
    main()

keyboardにて常にキーボード入力を監視し、指定したキーボード入力があったときにクリップボード中の文章の改行を削除します。

また、処理が完了したことをわかりやすくするため、改行削除時にtkinterでポップアップが出るようにしました。

今回のプログラムではCtrl+Bを押した際に改行が削除されるようになっています。

Ctrl+Bで改行を削除し、Ctrl+Vで貼り付ければ指の動きもそこまで大きくならないかなという考えです。

クリップボードの文書の処理についてはpyperclipというライブラリを使用しました

pyperclip.paste()でクリップボード中の文章を取得します。

pyperclip.copy()でクリップボードに任意のテキストをコピーできます。

あまりきれいなコードではないかもしれませんが、、一応これで動作することは確認できています。

参考になりましたら幸いです。

コメント

タイトルとURLをコピーしました