PDFからスプレッドシートに何千ものテキストスニペットを取得する必要があります。それらは短く、めったに2〜3行を超えることはありませんが、改行ごとに新しいセルが作成されます。手動で修正する必要があるため、多くの時間がかかります。
私はそれらをたくさん持っているので、「Wordに貼り付けて検索と置換」の回避策を使用するのは、私にとって時間の浪費に過ぎません。コピー時に改行を消す方法はありますか?多分これのための特別なコピーモードを提供する、またはプラグインを持っているビューアがありますか?
ドキュメントは科学記事です。テキストの配置は非常に直線的です。私がコピーしているテキストは、テーブルやフロートの内部ではなく、回転したものでも何でもないと想定できます。 (そのようなことが発生した場合は、手動で対処すると思います)。テキストは2つの列に設定されることがよくありますが、その列から必要なテキストだけをマークしても問題ありません。特別なフォーマットを保存する必要はありません。たとえば、印刷できない文字をすべて削除するソリューションを試してみます。テキストは英語です。ソリューションがASCII /ストリップでのみ機能する場合は問題ありません。コピーされたテキストのすべての非英数字ASCII=.
Linuxで動作するソリューション、ある種のOkularプラグインが非常に好みです。しかし、もしWindowsのみのソリューションがあったら、それについても聞きたいです。 Windowsマシンでの最近のAcrobat Proのライセンスを持っています。
しばらく前にテキスト読み上げスクリプトを作成しているときにも、同様の問題が発生しました。私のスクリプトは、改行を探すことによってテキスト入力をチャンクに分割しようとします。 PDFファイルを使用すると、各行が改行で終了する方法が原因で混乱が生じます。
したがって、私が行ったのは、いくつかのsed
およびtr
コマンドを作成して、改行が実際の改行と見なされるようにすることです。あまりきれいではありませんでしたが、うまくいきました。
このスニペットを使用して、私が役立つことを願って、小さなスクリプトを作成しました。
#!/bin/bash
# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# license: MIT license
# Parses currently selected text and removes
# newlines that aren't preceded by a full stop
SelectedText="$(xsel)"
ModifiedText="$(echo "$SelectedText" | \
sed 's/\.$/.|/g' | sed 's/^\s*$/|/g' | tr '\n' ' ' | tr '|' '\n')"
# - first sed command: replace end-of-line full stops with '|' delimiter and keep original periods.
# - second sed command: replace empty lines with same delimiter (e.g.
# to separate text headings from text)
# - subsequent tr commands: remove existing newlines; replace delimiter with
# newlines
# This is less than elegant but it works.
echo "$ModifiedText" | xsel -bi
スクリプトはxsel
を使用して、現在強調表示されているテキストを解析し、上記のsed
およびtr
コマンドラインで変更します。処理されたテキストは、xsel -bi
を介してクリップボードに戻されます。
シナリオでスクリプトを使用する方法は次のとおりです。
xsel
がインストールされていることを確認してください((K)UbuntuのSudo apt-get install xsel
)copy_without_linebreaks
または同様の名前で保存し、実行可能にしますこれは何年もの間私を悩ませてきたので、私は Autohotkey を使用した一般的な(Windows)ソリューションを考え出しました。 Autohotkeyは、Windows用の軽量で無料のオープンソーススクリプトソフトウェアであり、考えられるほとんどすべてのホットキーを作成できます。
いつ Ctrl+c ヒットした場合、コードはアクティブウィンドウがPDFリーダーの場合にのみ起動します。それ以外の場合は、通常どおり指定された選択範囲をコピーします。PDFリーダーの場合、選択範囲をコピーし、改行とダブルスペースを削除して、結果をクリップボードに書き込みます。何も選択されていない場合、クリップボードは実質的に変更されていません。
#IfWinActive ahk_class classFoxitReader
^c::
old := ClipboardAll
clipboard := ""
send ^c
clipwait 0.1
if clipboard =
clipboard := old
else {
tmp := RegExReplace(clipboard, "(\S.*?)\R(.*?\S)", "$1 $2")
clipboard := tmp
StringReplace clipboard, clipboard, % " ", % " ", A
clipwait 0.1
}
old := ""
tmp := ""
return
このコードを適用する前の唯一のタスクは、ウィンドウクラス名( ahk_class
)あなたの読者の。私は単一のPDFリーダーをすべての場合に使用します(そして、ほとんどの人がそうだと思います)、FoxitReader、およびそのahk_class
はclassFoxitReader
です。 WinGetClass
コマンド(たとえば、Acrobat Readerの場合はAcrobatSDIWindow
)を使用して、独自のソフトウェアのクラスを簡単に把握できます。
ブラウザでPDF-sを読みたい場合、これはソリューションではありません。または、単に#IfWinActive ahk_class classFoxitReader
lineコードが常に実行されるようにしますが、この場合、結果は常に改行と二重スペースが取り除かれます。
私にとってうまくいったもう1つのことは、pdfファイルをhtmlとして保存することでした。 HTMLの段落はそのまま残り、コピー&ペーストの準備ができています。 txtやrtfなどの他のファイル形式も同様に機能します...これはLinuxシステムでも機能するはずです。
マクロを使用した3番目のアプローチを示します here ですが、まだ試していません。将来の参考のためにここにマクロを貼り付けました。マクロ2はソースの作成者である「Deborah Savadra」で、マクロ1は読者の「Benjamin」によるものです。
マクロ1:
Sub pagebreaks()
'
' pagebreaks Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p^p"
.Replacement.Text = "¬ ¬"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "¬"
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
マクロ2:
Sub pagebreaks()
'
' pagebreaks Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p^p"
.Replacement.Text = "|"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "^p"
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "|"
.Replacement.Text = "^p^p"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
これは古い質問であることはわかっていますが、これほど簡単に使えるソリューションは他にないので、答えるのは有益だと思いました。
Okularという名前のLinuxアプリを使用して、PDFファイルを開きます。次に、[ツール]-> [テーブル選択ツール]をクリックします。次に、テキストをテーブル形式のまま選択します。次にCtrl + Cで準備完了です。
クレジットは ケン に送られます。
グルタニメートのスクリプトに基づいています。
ソース: https://github.com/SidMan2001/Scripts/tree/master/PDF-Copy-without-Linebreaks-Linux
このbashスクリプトは、PDFからテキストをコピーするときに改行を削除します。 Linuxのプライマリ選択とクリップボードの両方で動作します。
#!/bin/bash
# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# modifier: Siddharth (github.com/SidMan2001)
# license: MIT license
# Parses currently selected text and removes
# newlines
while ./clipnotify;
do
SelectedText="$(xsel)"
CopiedText="$(xsel -b)"
if [[ $SelectedText != *"file:///"* ]]; then
ModifiedTextPrimary="$(echo "$SelectedText" | tr -s '\n' ' ')"
echo -n "$ModifiedTextPrimary" | xsel -i
fi
if [[ $CopiedText != *"file:///"* ]]; then
ModifiedTextClipboard="$(echo "$CopiedText" | tr -s '\n' ' ' )"
echo -n "$ModifiedTextClipboard" | xsel -bi
fi
done
Sudo apt-get install xsel
clipnotifyをコンパイルするには:Sudo apt install git build-essential libx11-dev libxtst-dev
git clone https://github.com/cdown/clipnotify.git
cd clipnotify
Sudo make
chmod +x "copy_without_linebreaks.sh"
.\copy_without_linebreaks.sh
Acrobatを使用している場合は、カーソルをクリックして、テキスト内でカーソルを点滅させます。 (そうしないと機能しません。)[詳細設定]、[ユーザー補助]、[タグの追加]に移動します。大きなドキュメントの場合は数分かかりますが、手動で改行を削除するよりもはるかに高速です。出来上がり!