줄 바꿈 없이 PDF에서 텍스트를 복사하는 효율적인 방법이 있습니까?

줄 바꿈 없이 PDF에서 텍스트를 복사하는 효율적인 방법이 있습니까?

PDF에서 스프레드시트로 수천 개의 텍스트 조각을 가져와야 합니다. 길이가 짧고 2~3줄을 넘는 경우가 거의 없지만 줄이 바뀔 때마다 새 셀이 생성되므로 수동으로 수정해야 하므로 시간이 많이 걸립니다.

너무 많아서 "Word에 붙여넣고 찾기 및 바꾸기" 해결 방법을 사용하는 것은 나에게 너무 시간 낭비입니다. 복사할 때 줄 바꿈을 사라지게 하는 방법이 있나요? 이를 위한 특수 복사 모드를 제공하는 뷰어가 있거나 플러그인이 있습니까?

문서는 과학 기사입니다. 텍스트 배열은 매우 선형적입니다. 내가 복사하는 텍스트는 테이블이나 플로트 내부에 있지 않고 회전되지도 않은 것으로 가정할 수 있습니다. (이런 일이 발생하면 수동으로 처리할 것 같습니다.) 텍스트는 두 개의 열로 설정되는 경우가 많지만 해당 열에서 필요한 텍스트만 표시하는 데 어려움이 없습니다. 특별한 형식을 유지할 필요가 없습니다. 예를 들어 인쇄할 수 없는 모든 문자를 제거하는 솔루션을 시도해 보겠습니다. 텍스트는 영어로 되어 있습니다. 솔루션이 ASCII에서만 작동하거나 복사된 텍스트의 영숫자가 아닌 모든 ASCII를 제거하면 괜찮습니다.

저는 Linux에서 작동하는 솔루션, 아마도 일종의 Okular 플러그인을 매우 선호합니다. 하지만 Windows 전용 솔루션이 있다면 그에 대해서도 듣고 싶습니다. Windows 시스템에 최신 Acrobat Pro에 대한 라이센스가 있습니다.

답변1

얼마 전 텍스트를 음성으로 변환하는 스크립트를 작업하는 동안 비슷한 문제가 발생했습니다. 내 스크립트는 줄 바꿈을 찾아 텍스트 입력을 덩어리로 나누려고 합니다. 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.

시나리오에서 스크립트를 사용하는 방법은 다음과 같습니다.

  1. ((K)Ubuntu에)를 xsel설치 했는지 확인하세요 .sudo apt-get install xsel
  2. 스크립트를 copy_without_linebreaks다른 이름으로 저장하고 실행 가능하게 만듭니다.
  3. WM 기본 설정에서 원하는 단축키에 스크립트를 할당하세요.
  4. 일부 텍스트를 강조 표시하고 단축키를 누르세요.
  5. 클립보드는 수정된 텍스트로 자동으로 채워져야 합니다.

답변2

이것은 수년 동안 저를 괴롭혀 왔기 때문에 다음을 사용하여 일반적인 (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명령(예: AcrobatSDIWindowAcrobat Reader의 경우).

브라우저에서 PDF를 읽는 것을 선호한다면 이는 귀하의 솔루션이 아닙니다. 또는 코드가 항상 실행되도록 간단히 줄을 제거할 수도 있지만 #IfWinActive ahk_class classFoxitReader이 경우 결과는 항상 줄 바꿈과 이중 공백이 제거됩니다.

답변3

나에게 도움이 된 또 다른 일은 PDF 파일을 html로 저장하는 것이었습니다. HTML의 단락은 그대로 유지되어 복사 및 붙여넣기가 가능합니다. txt 또는 rtf와 같은 다른 파일 형식도 작동합니다. 이는 Linux 시스템에서도 작동합니다.

답변4

Windows 솔루션이 표시됩니다.여기. 복사 및 붙여넣기 작업을 수행하기 전에 "PDF Copy-Paster.exe" 파일을 다운로드하여 실행해야 합니다. 나는 그것을 시험해 보았고 모든 줄 바꿈을 제거한다는 점을 제외하고는 잘 작동합니다. 따라서 여러 단락을 복사하면 나중에 하나만 남게 됩니다.

이있다관련 질문SU에 대해 약간의 설명을 곁들이면 누군가에게는 흥미로울 수도 있습니다.

관련 정보