Как убрать пробелы при копировании из пдф
Перейти к содержимому

Как убрать пробелы при копировании из пдф

  • автор:

У вас большие запросы!

Точнее, от вашего браузера их поступает слишком много, и сервер VK забил тревогу.

Эта страница была загружена по HTTP, вместо безопасного HTTPS, а значит телепортации обратно не будет.
Обратитесь в поддержку сервиса.

Вы отключили сохранение Cookies, а они нужны, чтобы решить проблему.

Почему-то страница не получила всех данных, а без них она не работает.
Обратитесь в поддержку сервиса.

Вы вернётесь на предыдущую страницу через 5 секунд.
Вернуться назад

У вас большие запросы!

Точнее, от вашего браузера их поступает слишком много, и сервер VK забил тревогу.

Эта страница была загружена по HTTP, вместо безопасного HTTPS, а значит телепортации обратно не будет.
Обратитесь в поддержку сервиса.

Вы отключили сохранение Cookies, а они нужны, чтобы решить проблему.

Почему-то страница не получила всех данных, а без них она не работает.
Обратитесь в поддержку сервиса.

Вы вернётесь на предыдущую страницу через 5 секунд.
Вернуться назад

У вас большие запросы!

Точнее, от вашего браузера их поступает слишком много, и сервер VK забил тревогу.

Эта страница была загружена по HTTP, вместо безопасного HTTPS, а значит телепортации обратно не будет.
Обратитесь в поддержку сервиса.

Вы отключили сохранение Cookies, а они нужны, чтобы решить проблему.

Почему-то страница не получила всех данных, а без них она не работает.
Обратитесь в поддержку сервиса.

Вы вернётесь на предыдущую страницу через 5 секунд.
Вернуться назад

Есть ли эффективный способ скопировать текст из PDF без разрывов строк?

Мне нужно получить тысячи фрагментов текста из PDF-файлов в электронную таблицу. Они короткие, редко больше, чем 2-3 строки, но каждый разрыв строки создает новую ячейку, и мне приходится ремонтировать ее вручную, что стоит много времени.

Поскольку у меня их так много, использование обходного пути «вставь в Word и найди и замени» просто слишком трата времени для меня. Есть ли способ, чтобы разрыв строки исчез при копировании? Может быть, есть зритель, который предлагает специальный режим копирования для этого, или имеет плагин?

Документы являются научными статьями. Расположение текста довольно линейное. Вы можете предположить, что текст, который я копирую, не находится внутри таблицы или с плавающей точкой, и не вращается или что-то еще. (Если такое случится, я думаю, я справлюсь с этим вручную). Текст часто задается в двух столбцах, но у меня нет проблем с выделением нужного текста из его столбца. Мне не нужно сохранять какое-либо специальное форматирование. Я готов попробовать решение, которое удаляет все непечатаемые символы, например. Тексты на английском языке, это нормально, если решение работает только в ASCII / удаляет все не алфавитно-цифровые ASCII скопированного текста.

У меня есть очень сильное предпочтение для решения, которое будет работать на Linux, возможно, какой-то плагин Okular. Но если будет решение для Windows, я тоже хочу услышать об этом. У меня есть лицензия на несколько последних версий Acrobat Pro на компьютере с Windows.

Вы пробовали с Foxit Reader?

pdftotext, как правило, лучший, но вам все равно понадобится постобработка. См linuxquestions.org/questions/programming-9/.

@Kasun FoxitReader или любой другой читатель, который вы используете, не имеет значения: PDF-файл — это тот, который вводит переносы строк.

У меня была похожая проблема, когда я работал над сценарием преобразования текста в речь некоторое время назад. Мой сценарий попытался бы разбить ввод текста на куски, ища строки. С 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. Убедитесь, что вы xsel установили ( sudo apt-get install xsel на (K) Ubuntu)
  2. сохранить скрипт как copy_without_linebreaks или что-то похожее и сделать его исполняемым
  3. назначьте скрипт на горячую клавишу по вашему выбору в настройках WM
  4. выделите текст и нажмите горячую клавишу
  5. Буфер обмена должен автоматически заполняться измененным текстом

Это беспокоило меня годами, поэтому я нашел общее (Windows) решение с помощью Autohotkey . 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 Reader для всех случаев (и я предполагаю, что большинство людей делают это), FoxitReader, и ahk_class это так classFoxitReader . Вы можете легко определить класс для своего собственного программного обеспечения с помощью WinGetClass команды (например, AcrobatSDIWindow для Acrobat Reader).

Если вы предпочитаете читать PDF-файлы в своем браузере, это не ваше решение. Или вы можете просто удалить #IfWinActive ahk_class classFoxitReader строку, чтобы код всегда срабатывал, но в этом случае результат всегда будет лишен переносов и пробелов.

Раньше это работало для меня, но теперь кажется, что оно полностью сломало Ctrl + C. Windows 10.

@MiCl Это все еще работает на моем конце. Какой компьютер / OS / PDF Reader вы используете? Вы что-нибудь изменили? Как обновить ваш читатель? С другой стороны, кто знает, что было обновлено Win 10 .

Еще одна вещь, которая сработала для меня, это сохранение файла PDF в формате HTML. Параграфы в HTML остаются без изменений, готовые для копирования и вставки. Работают и другие форматы файлов, такие как txt или rtf . Это также должно работать в системах Linux.

Как сохранить файл PDF в формате HTML?

Третий подход с использованием макросов показан здесь , но я не пробовал. Я вставил здесь макросы для дальнейшего использования, макрос 2 — автор источника — «Дебора Савадра» — и макрос 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 
 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 

Существует решение для Windows показано здесь . Нужно скачать файл «PDF Copy-Paster.exe» и запустить его перед копированием и вставкой. Я попробовал это, и он работает просто отлично, за исключением того, что он удаляет все переводы строки. Поэтому, если вы скопируете несколько абзацев, у вас будет только один.

Есть вопрос по SU с небольшим объяснением, он может быть интересен для кого-то .

рассмотрите возможность разделения трех подходов на три ответа. Так будет легче голосовать за них по отдельности. (и, добро пожаловать в Superuser 🙂 )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *