Как добавить разделитель после каждого слова с помощью ghostscript -sDEVICE=txtwrite
Я использовал ghostscript для успешного извлечения текста из PDF-файлов с таблицами.
Эта простая команда работает очень хорошо:
gswin64c -sDEVICE=txtwrite -o test.txt "c:\reports\sample.pdf"
Однако некоторые слова объединяются, особенно из таблиц, например:
234801111111109-12-2014 16:17:04764030208117034 2883253100.00 Payment
234801111111109-12-2014 16:18:461088956908117033 2883253400.00 Payment
234801111111109-12-2014 16:19:48769948208117040 2883253750.00 Payment
на самом деле должно быть:
2348011111111 09-12-2014 16:17:04 764030208117034 2883253 100.00 Payment
2348011111111 09-12-2014 16:18:46 1088956908117033 2883253 400.00 Payment
2348011111111 09-12-2014 16:19:48 769948208117040 2883253 750.00 Payment
Пожалуйста, есть способ добавить символ разделителя в конце каждого слова.
Это решило бы это прекрасно.
1 ответ
Нет, извините, эта идея просто не сработает.
В PDF-файле нет такого понятия, как "слово", есть просто последовательность кодов и позиций символов. Код txtwrite делает все возможное, чтобы попытаться восстановить слова, посмотрев на положение каждого фрагмента текста и метрики используемых шрифтов, но в оригинале нет слов.
Я не утверждаю, что это идеально, если вы хотите, чтобы я посмотрел на него, вам нужно будет предоставить оригинальный файл. Лучшее решение - открыть отчет об ошибке и прикрепить к нему файл.
Я по-прежнему рассматриваю эту область для другого проекта (вывод RTF), поэтому сейчас самое время сообщить об этом. Я не могу гарантировать, что смогу ее решить, но вполне может быть так, что код "перестроить макет страницы" слишком прост для определения местоположения текста.
Однако вы можете получить выходные данные более низкого уровня, а XML-подобный вывод даст вам каждый фрагмент текста в отдельности и его положение на странице. Вы можете использовать эту информацию самостоятельно, чтобы перестроить контент.
Опция по умолчанию пытается построить простое представление страницы, используя пробельные символы для максимально возможного воспроизведения макета оригинала, но у меня нет иллюзий, что ошибок нет:-)