Я экспортирую содержимое MS Word в обычный текст для использования с текстовыми и файловыми утилитами. У меня есть ограничение, когда функция нумерации строк была включена в программном обеспечении MS, и любая ссылка на номера строк в конечном выводе должна соответствовать этой нумерации. Итак, введите «нумерация строк»:
( Poe, EA )
Очевидно, что для Word такая нумерация не разбивает строки на новой строке , она разбивает «строки» после правого поля (или чего-то еще). Похоже docx2txt
, что сценарий не учитывает это по умолчанию и разрывает строки на новую строку. Поэтому, если я использую grep -n
нумерацию, строки не будут соответствовать функции нумерации исходных строк, как показано выше. Из документации не совсем понятно, как мне нужно отредактировать скрипт Perl для преобразования файлов так, как мне нужно в этом случае:
our $config_newLine = "\n"; # Alternative is "\r\n".
our $config_lineWidth = 80; # Line width, used for short line justification.
Я попытался подставляя \n
для \r\n
но это не похоже на работу для меня. Поэтому я прибег к экспорту документов напрямую из Word со следующими настройками (сохранить в виде обычного текста на v.2013,64pc):
- Unicode (UTF-8)
- Вставить разрывы строк + конец строк с помощью (CR / LF)
- Разрешить замену персонажа
И теперь действительно , когда я использовать те .txt
файлы , есть идеальное совпадение между номерами строк , в особенности нумерации источника и grep -n
выводе.
- Есть ли какая-то конкретная конфигурация / процесс, о котором я должен знать,
docx2txt
или подобная утилита командной строки, которая позволила бы мне конвертировать мои файлы .docx в обычный текст, сохраняя разрывы строк, не прибегая к Word, как я? - Каковы наилучшие практики для экспорта документов MS Word (которые могут содержать символы с акцентом) в простой текст для использования с файловыми / текстовыми утилитами в отношении разрывов строк и форматирования; и есть ли какие-либо негативные последствия с настройками, которые я выбрал для экспорта, т.е. вставкой CR / LF?
Образец
Как предложено, я предоставлю образец. В этом архиве rar я упаковал файл .docx с простыми абзацами и его экспортированный файл .txt, используя Word с вышеупомянутыми параметрами. Последнее можно сравнить с запуском по умолчанию для docx2txt
исходного файла.
источник
Ответы:
docx2txt
работает с информацией вdocx
файле, который представляет собой сжатый набор файлов XML.Что касается переноса строк,
.docx
данные XML включают в себя только информацию о параграфах и жестких переносах , а не о мягких переносах. Мягкие разрывы являются результатом рендеринга текста с использованием определенного шрифта, размера шрифта и ширины страницы.docx2txt
обычно просто пытается разместить текст в 80 столбцах (можно настроить 80 столбцов), не обращая внимания на шрифт и размер шрифта. Если ваш файл.docx
содержит информацию о шрифтах из системы Windows, которая недоступна в Unix / Linux, то выполнение экспорта в.txt
через Open / LibreOffice также вряд ли приведет к такой же компоновке, хотя она и пытается сделать хорошую работу¹.Так
docx2txt
или любая другая утилита командной строки, включая управляемую командной строкой обработку Open / LibreOffice, не гарантированно преобразует текст в ту же компоновку, что и экспорт из Word².Если вы хотите (или вынуждает требования клиента) выполнять рендеринг точно так, как это делает Word, то, по моему опыту, есть только один способ: пусть Word выполняет рендеринг. Столкнувшись с такой же проблемой, как у вас, и получив несовместимые результаты с использованием других инструментов, включая OpenOffice, я вернулся к установке виртуальной машины Windows на хост-сервере Linux. На клиентской виртуальной машине программа наблюдает за тем, чтобы входящие файлы были преобразованы на хосте, который запускается и запускает Word, чтобы выполнить преобразование, а затем копировать обратно результат⁴.
Решения об использовании только CR / LF или LF, или UTF-8, или какой-либо другой кодировки в
.txt
значительной степени зависят от того, как используются полученные файлы. Если полученные файлы используются в Windows, я бы определенно выбрал CR / LF, UTF-8 и спецификацию UTF-8 . Современные программы в Linux могут сделать вывод, что файл имеет формат UTF-8, но не будут раздражать спецификацию и / или использовать эту информацию. Вы должны проверить все ваши целевые приложения на совместимость, если они известны заранее.Sort Такая несовместимость является основной причиной, по которой некоторые из моих друзей не могут перейти на Linux с Windows, хотя им бы этого хотелось. Они должны использовать MicroSoft Word, так как Open / LibreOffice время от времени искажает тексты, которыми они обмениваются с клиентами.
² Вы можете установить все шрифты, используемые в файлах Word, и иногда вам может повезти с некоторыми текстами.
³ Рендеринг PDF-файлов из
.doc/.docx
⁴ Программа использует автоматизацию графического интерфейса - как будто кто-то щелкает по ее меню - и не пытается управлять Word через API. Я почти уверен, что последнее может быть выполнено и будет иметь преимущество в том, что не сломает вещи, если Word будет обновлен
источник
vim
и я понял, что это действительно все о xml - я должен изучить его дальше. Не думал о шрифтах или даже переносах. Также во время какой-то операции мне пришло сообщение от текстового редактора с жалобой на спецификацию, поэтому я прочитаю ссылку (так как понятия не имел, что это было). Я был удивлен вашим решением VM! Я немного знаком с автоматизацией графического интерфейса - я видел, как она использовалась для создания рабочей станции после репликации базового образа; не думал об этом ...grep
; если строки длинные, это снижает «точность» на выходе. Я предполагаю, что ограничения зависят от характера контента и от того, как он используется. С другой стороны, таких вопросов не было бы, если бы в документах не использовалась функция нумерации Word. Создание структуры документа, чтобы охватить унаследованные материалы, является серьезным бизнесом. Ура!