क्या लाइन को तोड़ने के बिना एक पीडीएफ से पाठ को कॉपी करने का एक कुशल तरीका है?


12

मुझे पीडीएफ से स्प्रेडशीट तक पाठ के हजारों स्निपेट प्राप्त करने की आवश्यकता है। वे कम हैं, शायद ही कभी 2-3 पंक्तियों से अधिक, लेकिन प्रत्येक पंक्ति विराम एक नया सेल बनाता है, और मुझे इसे मैन्युअल रूप से मरम्मत करना होगा, जिसमें बहुत समय लगता है।

क्योंकि मेरे पास उनमें से कई हैं, "पेस्ट में वर्ड का उपयोग करें और एक खोज और बदलें" वर्कअराउंड मेरे लिए सिर्फ समय बर्बाद कर रहा है। क्या कॉपी पर लाइन ब्रेक गायब होने का कोई तरीका है? शायद एक दर्शक है जो इसके लिए एक विशेष कॉपी मोड प्रदान करता है, या एक प्लगइन है?

दस्तावेज वैज्ञानिक लेख हैं। पाठ व्यवस्था काफी रैखिक है। आप यह मान सकते हैं कि मैं जो पाठ कॉपी कर रहा हूं वह किसी तालिका या फ्लोट के अंदर नहीं है, और न ही घुमाया गया है और न ही कुछ। (यदि ऐसा कुछ होता है, तो मुझे लगता है कि मैं इसके साथ मैन्युअल रूप से निपटूंगा)। पाठ अक्सर दो स्तंभों में सेट किया जाता है, लेकिन मुझे केवल उस पाठ को चिह्नित करने में कोई परेशानी नहीं है जो मुझे उसके कॉलम से चाहिए। मुझे किसी विशेष प्रारूपण को संरक्षित करने की आवश्यकता नहीं है। मैं एक समाधान की कोशिश करने को तैयार हूं जो सभी अचूक पात्रों को हटा देता है, उदाहरण के लिए। ग्रंथ अंग्रेजी में हैं, यह ठीक है अगर समाधान केवल एएससीआईआई में काम करता है / कॉपी किए गए पाठ के सभी गैर-अल्फ़ान्यूमेरिक एएससीआईआई स्ट्रिप्स।

मेरे पास एक समाधान के लिए एक बहुत मजबूत प्राथमिकता है जो लिनक्स पर काम करेगा, संभवतः किसी तरह का ओकुलर प्लगइन। लेकिन अगर वहाँ एक विंडोज केवल समाधान होना चाहिए, मैं इसके बारे में भी सुनना चाहता हूँ। मेरे पास विंडोज मशीन पर कुछ हद तक एक्रोबेट प्रो का लाइसेंस है।


क्या आपने लोमड़ी पाठक के साथ प्रयास किया?
कसुन

2
pdftotext आमतौर पर सबसे अच्छा है, लेकिन आपको अभी भी कुछ पोस्ट-प्रोसेसिंग की आवश्यकता होगी। देखें linuxquestions.org/questions/programming-9/...
निमो

@ कासून फॉक्सिट्रेडर या जो भी पाठक एक का उपयोग करता है वह अप्रासंगिक है: पीडीएफ फाइल वह है जो लाइनब्रेक का परिचय देती है।
इस्तवान ज़चार

जवाबों:


5

जब मैं कुछ समय पहले एक स्क्रिप्ट पर स्पीच स्क्रिप्ट पर काम कर रहा था तो मुझे भी ऐसी ही समस्या थी। मेरी स्क्रिप्ट नए इनपुट की तलाश में पाठ इनपुट को विखंडू में तोड़ने की कोशिश करेगी। पीडीएफ फाइलों के साथ यह एक गड़बड़ होगा क्योंकि जिस तरह से प्रत्येक पंक्ति एक नई रेखा के साथ समाप्त होती है।

इसलिए मैंने जो कुछ किया था, वह कुछ नया करने के लिए था 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. क्लिपबोर्ड को स्वचालित रूप से संशोधित पाठ से भरना चाहिए

3

यह मुझे सालों से परेशान कर रहा है, इसलिए मैंने ऑटोहोटकी का उपयोग करके एक सामान्य (विंडोज) समाधान निकाला । ऑटोहोटेक लगभग कुछ भी कल्पना करने के लिए हॉटकी बनाने के लिए विंडोज के लिए एक हल्का, मुफ्त, ओपन-सोर्स स्क्रिप्टिंग सॉफ्टवेयर है।

जब Ctrl+ cहिट हो जाता है, तो कोड केवल फायर करता है यदि सक्रिय विंडो एक पीडीएफ रीडर है, अन्यथा यह दिए गए चयन को हमेशा की तरह कॉपी करता है। पीडीएफ रीडर के मामले में, यह चयन को कॉपी करता है, लाइनब्रेक और डबल स्पेस को हटाता है और क्लिपबोर्ड में परिणाम डालता है। यदि कुछ नहीं चुना गया है, तो क्लिपबोर्ड व्यावहारिक रूप से अछूता है।

#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आपके पाठक का विंडो क्लास नाम ( ) है। मैं सभी मामलों के लिए एक एकल पीडीएफ रीडर का उपयोग करता हूं (और मुझे लगता है कि ज्यादातर लोग ऐसा करते हैं), फॉक्सिट्रेडर, और यह ahk_classहै classFoxitReader। आप WinGetClassकमांड द्वारा अपने स्वयं के सॉफ़्टवेयर के लिए आसानी से कक्षा का पता लगा सकते हैं (जैसे AcrobatSDIWindowएक्रोबेट रीडर के लिए)।

यदि आप अपने ब्राउज़र में पीडीएफ-एस पढ़ना पसंद करते हैं, तो यह आपका समाधान नहीं है। या आप बस #IfWinActive ahk_class classFoxitReaderलाइन को हटा सकते हैं ताकि कोड हमेशा आग लग जाए, लेकिन इस मामले में परिणाम हमेशा लाइनब्रेक और डबल रिक्त स्थान से छीन लिया जाएगा।


यह पहले मेरे लिए काम करता था, लेकिन अब यह पूरी तरह से Ctrl + C को तोड़ने के लिए लगता है। विंडोज 10.
mic

@MiCl यह अभी भी मेरे अंत में काम करता है। आप किस मशीन / ओएस / पीडीएफ रीडर का उपयोग करते हैं? क्या आपने कुछ बदला? अपने पाठक को अपडेट करने की तरह? दूसरी ओर, कौन जानता है कि विन 10 द्वारा क्या अपडेट किया गया था ...
इस्तवान ज़चार

1

मेरे लिए काम करने वाली एक और चीज़ पीडीएफ फाइल को html के रूप में सहेज रही थी। HTML में पैराग्राफ बरकरार रहें, कॉपी और पेस्ट के लिए तैयार रहें। अन्य फ़ाइल स्वरूप भी काम करते हैं, जैसे txt या rtf ... यह लिनक्स सिस्टम पर भी काम करना चाहिए।


आप HTML के रूप में एक पीडीएफ फाइल कैसे सहेजते हैं?
साइमन ईस्ट

1

मैक्रोज़ का उपयोग करने वाला एक तीसरा दृष्टिकोण यहां दिखाया गया है , लेकिन मैंने इसकी कोशिश नहीं की है। मैंने भविष्य के संदर्भ के लिए मैक्रोज़ को यहां चिपकाया, मैक्रो 2 स्रोत के लेखक द्वारा है - "डेबोरा सवद्र" - और मैक्रो 1 उसके पाठक "बेंजामिन" द्वारा:

मैक्रो 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

1

यहाँ एक विंडोज समाधान दिखाया गया है । एक को "पीडीएफ कॉपी-पेस्टस्टर" फ़ाइल डाउनलोड करना होगा और कॉपी और पेस्ट-एक्शन से पहले इसे चलाना होगा। मैंने इसे आज़माया और यह ठीक काम करता है, सिवाय इसके कि यह सभी लाइनब्रेक को हटा देता है। इसलिए यदि आप गुणा पैराग्राफ की नकल करते हैं तो आपके पास बाद में केवल एक ही है।

थोड़ा स्पष्टीकरण के साथ एसयू पर एक संबंधित प्रश्न है , यह किसी के लिए रुचि का हो सकता है ...


अपने तीन दृष्टिकोणों को तीन उत्तरों में विभाजित करने पर विचार करें। उन्हें व्यक्तिगत रूप से वोट देना आसान होगा। (और, सुपरसुसर में आपका स्वागत है :-))
nik

ठीक है, मैं ऐसा करूँगा। (और स्वागत के लिए धन्यवाद)
क्वासिमोडो

मेरे लिए लाइन ब्रेक को हटाने के लिए प्रतीत नहीं होता है, विंडोज 10 पर फॉक्सिट रीडर से कॉपी करना
माइक

1

मुझे पता है कि यह एक पुराना सवाल है, हालांकि मुझे लगा कि इसका जवाब देना उपयोगी होगा क्योंकि कोई अन्य समाधान इस रूप में उपयोग करना आसान नहीं था।

अपनी पीडीएफ फाइल को खोलने के लिए ओकुलर नाम के लिनक्स ऐप का उपयोग करें। फिर टूल्स-> टेबल चयन टूल। फिर अपने टेक्स्ट का चयन करें क्योंकि यह टेबल फॉर्म में था। फिर Ctrl + C और आप जाने के लिए तैयार हैं।


यह लिबरऑफिस (ctrl + shift + V) में अनफ़ॉर्मेट पेस्ट करके बहुत अच्छी तरह से काम करता है, इसलिए यह एक टेबल नहीं बनाता है। यह उत्तर इसे शीर्ष के करीब बनाना चाहिए, क्योंकि यह अन्य उत्तरों (यानी एक सरल लिनक्स + ओकुलर समाधान) की तुलना में प्रश्न के लिए अधिक प्रासंगिक है।
स्ट्रगू

बस यह कोशिश की और मैं अभी भी लाइन अंत था जब मैं विशेष चिपकाया और unformatted पाठ का चयन किया। शायद चीजें बदल गई हैं। ऑकुलर संस्करण 0.24.2 लिब्रे ऑफिस संस्करण 5.1.6.2 है
frederickjh

1

वास्तविक प्रश्न: /ubuntu/1167026/detect-clipboard-copy-paste-event-and-modify-clipboard-contents

श्रेय केएन को जाता है ।

Glutanimate की स्क्रिप्ट पर आधारित।

स्रोत: https://github.com/SidMan2001/cripts/tree/master/PDF-Copy-without-Linebreaks-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

निर्भरताएँ:

  1. xsel
    sudo apt-get install xsel
  2. क्लिपनोटिफ़ ( https://github.com/cdown/clipnotify )
    आप रिपॉजिटरी में दिए गए पूर्व-संकलित क्लिपनोटिफ़ का उपयोग कर सकते हैं या खुद को संकलित कर सकते हैं।

अपने आप को क्लिपनोट संकलित करने के लिए:
sudo apt install git build-essential libx11-dev libxtst-dev
git clone https://github.com/cdown/clipnotify.git
cd clipnotify
sudo make

उपयोग करने के लिए :

  1. इस रिपॉजिटरी को जिप के रूप में डाउनलोड करें या टेक्स्ट एडिटर में स्क्रिप्ट को कॉपी और पेस्ट करें और इसे copy_without_linebreaks.sh के रूप में सहेजें।
  2. सुनिश्चित करें कि स्क्रिप्ट और क्लिपनोटिफ़ाइ (डाउनलोड या पूर्वनिर्धारित) एक ही फ़ोल्डर में हैं।
  3. स्क्रिप्ट के फ़ोल्डर में टर्मिनल खोलें और अनुमति सेट करें
    chmod +x "copy_without_linebreaks.sh"
  4. टर्मिनल में प्रवेश करके स्क्रिप्ट पर डबल क्लिक करें या चलाएं:
    .\copy_without_linebreaks.sh
  5. पीडीएफ में टेक्स्ट कॉपी करें और कहीं भी पेस्ट करें। लाइनों को तोड़ दिया जाएगा।

0

यदि आपके पास एक्रोबैट है, तो अपने कर्सर पर क्लिक करें ताकि टेक्स्ट में कर्सर ब्लिंक हो। (यदि आप ऐसा नहीं करते हैं तो यह काम नहीं करेगा।) उन्नत, पहुंच, टैग जोड़ें पर जाएं। यदि आपके पास एक बड़ा दस्तावेज़ है, तो कुछ मिनट लगेंगे, लेकिन मैन्युअल रूप से विराम हटाने की तुलना में बहुत तेज़। देखा!


-1

इस पृष्ठ से आसान समाधान; http://www.iom3.org/news/how-instantly-remove-unwanted-line-breaks-when-copying-pdf

  1. पीडीएफ से मनचाहा टेक्स्ट कॉपी करें
  2. एक नए वर्ड डॉक्यूमेंट में पेस्ट करें
  3. फिर "बदलें" पर क्लिक करें
  4. सुनिश्चित करें कि आप "क्या खोजें" फ़ील्ड में हैं
  5. "अधिक" और फिर "विशेष" पर क्लिक करें
  6. "पैराग्राफ मार्क" चुनें (सूची के ऊपर)
  7. "के साथ बदलें" फ़ील्ड में क्लिक करें
  8. स्पेस बार को एक बार दबाएं
  9. "सभी को बदलें" पर क्लिक करें
  10. "ठीक" पर क्लिक करें और फिर "ढूंढें और बदलें" बॉक्स को बंद करें।

थोड़ा फीका लेकिन एक बार जब आप अपनी उंगलियों के नीचे शॉर्टकट प्राप्त करते हैं तो यह बहुत तेज होता है


1
कॉपी और पेस्ट विश्वसनीय नहीं है, यह प्रश्न का संपूर्ण बिंदु है। यदि कोई खोज और प्रतिस्थापित करके सफाई करना चाहता है, तो thed पहले पाठ के साथ परिवर्तित हो जाएगा pdftotextऔर फिर वे किसी भी पाठ संपादक का उपयोग करें जिसे वे पसंद करते हैं (मानक regex के साथ)।
नेमो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.