Конвертировать docx в PDF

41

Я пытаюсь конвертировать файлы docx в pdf на моем сервере Ubuntu с помощью командной строки, но ни один из конвертеров, которые я пробовал до сих пор, похоже, не конвертирует файлы Word 2007/2010/2013 правильно.

По-видимому, он-лайн конвертеры могут управлять им без проблем, но веб-сервисы не подходят, потому что файлы содержат конфиденциальные данные. Для тестов я использую этот файл Word 2007, потому что он содержит некоторые важные элементы (формулы, векторная графика, изображения, списки и т. Д.). Я протестировал следующие инструменты (частично из этого поста ):

lowriter (LibreOffice Writer) - неправильный вывод (круг должен быть на последней странице, а не на первой)

введите описание изображения здесь

unoconv- так же, как LibreOffice, так как он не использует свой собственный конвертер. Преобразование в формат odt, а затем в pdf полностью испортило файл.

abiword --to=pdf filename.doc - неверно и неполно (многие элементы отсутствуют):

введите описание изображения здесь

OpenOffice Writer - тот же результат, что и для abiword

wvPDF - сбой со следующим сообщением об ошибке:

~ $ wvPDF 2007_Office_DocEncryption.docx test.pdf

Текущий каталог: / home / webmt / dev / test /

Некоторые проблемы с запуском латекса.

Проверьте на ошибки в test.log

Продолжение ...

Преобразование в DVI не удалось

Есть ли способ правильно конвертировать docx файлы в PDF на Linux? Это также помогло бы мне, если бы я знал, что это работает для кого-то с любой из программ, которые я уже упоминал. Я начну вознаграждение, как только SE позволит мне.

PS Я использую сервер Ubuntu 12.04


Вывод :

Я должен был сделать вывод, что на данный момент у меня нет надежного инструмента, который будет работать с новыми форматами MS Word и всеми его элементами в Ubuntu и создавать копию файлов docx «один к одному». Ни один из протестированных мной инструментов не смог правильно преобразовать файл примера. Поскольку я буду сталкиваться с совершенно разными видами версий / содержимого документов, а качество вывода имеет один из самых высоких приоритетов, я в конечном итоге выполню преобразования с помощью макросов VB в Word на сервере Windows, подключенном к моему Linux.

Я установлю сообщение, получающее лучшие результаты как принятый ответ. Тем не менее, награда была предназначена для решения с абсолютно правильным преобразованием. Спасибо всем, снова.

Скептик Джул
источник
3
дал попробовать латекс?
Брайам
@ScepticalJule, да, есть проблема в конце. Я только что посмотрел на первую страницу.
1
@Braiam Не могли бы вы оставить ссылку на преобразование с латексом?
Скептически июль
2
@ScepticalJule Я думаю, Брайам имел в виду, что вы должны немедленно написать свой документ в латексе. Преобразование из docx в латекс намного более болезненно, чем преобразование из docx в pdf. Вы можете попытаться сделать конвертацию из docx в doc, а затем из doc в pdf. Но вам нужно найти независимый инструмент для этого. Дайте мне знать, могу ли я чем-нибудь помочь, и помог ли вам мой ответ.
don.joey

Ответы:

58

Этот ответ проходит все тесты, но блок-схема одна в вашем тестовом документе.

sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx

Почему это лучше, чем предлагают другие методы до сих пор?

Я проверил другие методы, предложенные до сих пор (особенно oowriterи ebook-convert), но они проходят меньше тестов, чем этот метод. ebook-convertМетод полос полей и часть текстов из документа.

Этот метод даже дает лучшие результаты, чем профессиональный конвертер, как rainbowpdf .

Я также попытался преобразовать его в HTML, но чертеж с квадратом в круге и блок-схема неверны.

Почему проверка блок-схемы не проходит?

Кажется, что у libreoffice и unoconv есть некоторые проблемы с правильным отображением блок-схемы, которая находится в файле .docx. Это, вероятно, потому, что это было сделано с использованием смарт-искусства в Microsoft Office. Это проблема. Эта ошибка также обсуждается в этой теме . Текстовая и визуальная информация присутствует в pdf, как видно из вышеприведенного метода (я должен был выбрать текст, хотя).

Блок-схема не отображается полностью, как ожидалось.

Например, цвет шрифта неправильно читается, а некоторые строки слишком длинные. Я не знаю ни одного решения Linux, способного правильно отображать смарт-арт. :(

Это также причина, по которой все printрешения, размещенные на этой странице, не удовлетворят вас.

Короче

Короче говоря, то, что вы делаете, действительно сложно, и в настоящее время нет решений, которые бы полностью вас удовлетворили. Ахиллесова пята преобразований docx2pdf - умное искусство. Если вы можете жить без этого или если вы можете найти способ обнаружить умное искусство и каким-то образом превратить его в изображение, вы можете достичь своей цели.

Вариант 1. Заставьте своих пользователей справиться с проблемой

Это очень не элегантное решение. Создатели контента могут сохранить свои умные изображения в формате jpg, как описано на страницах справки Office, и, следовательно, конвертация будет возможна на вашем сервере.

Вариант 2. Решите проблему

Если блок-схемы часто очень похожи и в зависимости от того, насколько вы хороши в разработке, вы можете попробовать преобразовать умное искусство отдельно. Вы можете извлечь файл Drawing1.xml из кластера документов .docx, а затем использовать обработку на естественном языке и некоторые сумасшедшие хаки, чтобы восстановить умное искусство. Например, вам придется возиться с этим типом xml:

<dsp:txBody>
<a:bodyPr spcFirstLastPara="0" vert="horz" wrap="square" lIns="8255" tIns="8255" rIns="8255" bIns="8255" numCol="1" spcCol="1270" anchor="ctr" anchorCtr="0">
<a:noAutofit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:pPr lvl="0" algn="ctr" defTabSz="577850">
<a:lnSpc><a:spcPct val="90000"/>
</a:lnSpc>
<a:spcBef>
<a:spcPct val="0"/>
</a:spcBef>
<a:spcAft>
<a:spcPct val="35000"/>
</a:spcAft>
</a:pPr>
<a:r>
<a:rPr lang="en-US" sz="1300" b="1" kern="1200"/>
<a:t>All three sides are different lengths
</a:t>
</a:r>
</a:p>
</dsp:txBody>

Или, как минимальное решение, вы хотя бы извлекаете текст ( <a:t>?) Из файла и сохраняете его более простым способом. Или, если блок-схемы ваших PDF-файлов одинаковы, вы можете написать скрипт для изменения цвета текста и длины строки в самом xml. Тогда вы можете запустить, doc2pdfи у вас будет файл, который по существу содержит всю необходимую информацию, но, возможно, не форматирование. В случае блок-схем вы, возможно, также захотите включить некоторые из форматирования, потому что форматирование является частью информации.

Вариант 3. Использовать сторонний сервис

За последние несколько дней я провел еще несколько исследований и нашел сервис, который отлично выполняет конверсию: zamzar . Zamzar позволяет загрузить файл DOCX, а затем отправляет вам ссылку по электронной почте. У них также есть услуга (платная?), Где вы можете отправить любой файл по адресу pdf@zamzar.com, а затем получить преобразованный файл обратно в свой почтовый ящик. Вы можете легко построить систему вокруг этого, где вы автоматически отправляете файл и анализируете его по электронной почте. Это не так много работы, и это лучший результат.

Заметки

  • Если у кого-то есть другие службы, которые делают то же самое, пожалуйста, не стесняйтесь редактировать их в.
  • Я отправил по почте поддержку Замзар, чтобы спросить, есть ли у них API. Это было бы еще проще.
  • Может быть, помощь для .NET и Java также могут помочь? Или docx4java, как в этом очень похожем посте .
  • Другой вариант - заглянуть в odf-конвертер, который выглядит устаревшим и зависит от openoffice, а не от libreoffice.
  • Теперь я могу подтвердить, что java jodconverter также терпит неудачу при преобразовании блок-схемы.

Я действительно потратил время, чтобы проверить различные методы, предложенные на этой странице. Пожалуйста, поддержите любые комментарии с фактическими тестами.

don.joey
источник
1
Я получил новости от zamzar: «В настоящее время у нас есть API, который мы надеемся запустить в бета-версии в ближайшие пару месяцев - мы могли бы добавить вас в бета-версию, если это будет интересно?» Они также упомянули, что их система преобразования - это то, что они разработали собственными силами.
don.joey
@jasonplutext Я согласен с рецензентами, что ваше редактирование не помогло. Как автор plutext (я полагаю?), Я бы предложил вам добавить собственный ответ с заявлением об отказе от ответственности, указывающим на вашу принадлежность. Спасибо.
don.joey
Какие-нибудь обновления за последние пару лет?
Бекко
@becko Я не следил за этим. Может быть, установить награду за кого-то еще?
don.joey
Примечание из будущего: правильное использование в последних версиях lowriterсейчас lowriter --convert-to pdf input_file.docx. Использование --pt pdfне удастся молча.
ACK_stoverflow
6

Это решение командной строки, которое работает прилично - но использует проприетарное программное обеспечение.

Я думаю, что основная проблема в том, что форматы Microsoft Word полностью понятны только для Microsoft Word (даже там, есть различия между версиями - есть файлы Word из прошлого, которые открываются неправильно отформатированными в более новых версиях). Все остальные решения являются аппроксимациями и взломами, поэтому они будут работать или нет в зависимости от файла.

Поэтому, чтобы быть уверенным, что вам нужно обработать файлы .docx с помощью установки Microsoft Word (и да, я думаю, что это их вариант, и это справедливо. Если вы не хотите использовать Word, не используйте его - я иду с LaTeX для моей работы, но трудно убедить остальной мир вокруг ...).

Я использую Crossover возрастов для запуска Microsoft Office на моем рабочем столе Linux (1), и считаю его весьма полезным. Может быть, это работает с вином тоже --- никогда не пробовал.

Я делаю преобразование, используя эту конфигурацию:

1) У меня установлен кроссовер

2) У меня установлена ​​версия Microsoft Office под кроссовером

3) В Microsoft Word отключите «фоновую печать»

4) У меня cups-pdfустановлен принтер и выбран принтер по умолчанию.

5) Чтобы сделать преобразование, запустите (подсказки здесь ):

~/cxoffice/bin/wine --cx-app winword.exe respondus-docx-sample-file.docx /q /n /mFilePrintDefault /mFileExit

6) Ваш преобразованный файл появится в ~/PDF/каталоге.

Ваш документ получился почти идеально (в ответе № 2 есть некоторое смещение, которое отображается в моем Office Word 2007 при работе под Crossover - я не знаю, связано ли это с моей версией Windows).

Страница 1-2

страницы 3-4

Теперь проблема в том, что всплывающий графический интерфейс слов --- я не знаю, как сделать его "безголовым". Параметры командной строки для Word не помогли ...

(1) Я никоим образом не связан с Codeveawers - просто счастливый пользователь.

Rmano
источник
4

У меня также была эта проблема в прошлом, мне не приходилось использовать ее в последнее время, поэтому я не знаю, влияет ли она на меня.

Что касается ответа на вопрос:

Этот вопрос: Как выполнить пакетное преобразование .doc или .docx в .pdf, в комментариях объясняется причина, по которой ваше преобразование с lowriterможет быть неудачным:

Остерегайтесь использования символа «пробел» из командной строки ... Когда вы доберетесь до символа пробела, просто нажмите «tab»;) - Pitto 16 ноября '12 в 13:11

Ответ на этот вопрос также может помочь:

Как я могу преобразовать файл ODT в PDF?

Ты бы побежал libreoffice --headless --convert-to pdf *.odt. Вы можете получить больше информации о libreoffice с помощью команды, man libreofficeесли вам нужна помощь в понимании или настройке команды для работы.

Тем не менее, вы не можете открыть LibreOffice в то время, согласно этой ошибке: https://bugs.freedesktop.org/show_bug.cgi?id=37531


Этот вопрос также связан с Ubuntu, хотя он и на SuperUser: https://superuser.com/questions/156189/how-to-convert-word-doc-to-pdf-in-linux

Первый ответ имеет два варианта: один с использованием CUPS и созданием принтера PDF, другой с использованием LaTex, хотя вы и говорили, что LaTex провалился.

Что касается преобразования в PDF через CUPS PDF, вы должны запустить, sudo apt-get install cups-pdfа затем oowriter -pt pdf your_word_file.doc(x). Это может помочь с вашей проблемой oowriter.

Вероятно, это связано с тем, что вы пытаетесь преобразовать PDF в DOC / DOCX, когда большинство инструментов используют ODT, поскольку они связаны с LibreOffice / OpenOffice / AbiWord. Таким образом, они либо терпят неудачу при попытке конвертировать его из формата Microsoft DOCX, либо при конвертации в ODT.

Есть несколько ошибок с конвертацией из .docx w. Word Art (версия включена):

Это из форума LibreOffice, касающегося конвертации из .doc и несколько .docx: http://en.libreofficeforum.org/node/5096 . Это с января 2013 года, поэтому оно должно применяться несколько.

Помимо всего этого, я действительно не знаю. Надеюсь, вы решите свою проблему!

RPiAwesomeness
источник
Извините, но ни один из предложенных вами инструментов не может сделать чистое преобразование.
Скептически июль
2

Если у вас установлен Libreoffice, вы можете попробовать конвертировать, используя это. Просто нажмите Ctrl+ Alt+ Tна клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команду (ы) ниже:

libreoffice --headless -convert-to pdf <file_name>.docx -outdir output/path/for/pdf

Другой вариант - установить чашки PDF .

Для этого просто нажмите Ctrl+ Alt+ Tна клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команду (ы) ниже:

sudo apt-get install cups-pdf

Затем создайте новый принтер, установите его как принтер PDF-файлов и назовите его как хотите, если вы знаете его имя, затем запустите:

oowriter -pt pdf your_word_file.docx

И ваш файл PDF будет в ~/PDF.

Митч
источник
1
Не было никакого успеха с ними.
Скептически, июль
Это может ответить почему.
Скептически июль
Я ценю ваш ответ. Это имеет большой смысл, но я удивлен, что печать не сработала, так как это похоже на печать на бумаге ... :)
Митч
Основная проблема заключается в том, что LibreOffice даже не может правильно открыть и отобразить документ. Следовательно, вывод тоже неверный. Это работало на вашем Linux?
Скептически июль
Это хорошо знать. Я использую офис только для базовых документов, нет необходимости придумывать что-то более сложное, но когда это произойдет, я позабочусь об этом и сошлюсь на это. Спасибо за отличный вопрос, и я обязательно добавлю его в избранное для дальнейшего использования. Я буду хранить этот ответ и комментарии в качестве ссылки для просмотра другими пользователями.
Митч
2

Вот горькая правда: офисные решения для Linux - это полный провал! Я был постоянным пользователем GNU / Linux много лет, и я постоянно искал и пробовал различные офисные решения, от старого Open-Office, до более поздних Libre-Office, Abi-Word и т. Д. Они все не смогли помочь мне сделать мою офисную работу. Это даже ухудшается, когда речь идет о нелатинских языках (справа налево, таких как персидский, арабский и т. Д.). Пользователь должен бороться с этим программным обеспечением, чтобы сделать свою работу! И совместимости с офисом Microsoft просто нет. Я могу говорить часами о том, сколько я пробовал, и все они подвели меня, но суть этого вопроса не в этом.

Я также пытался установить и запустить Microsoft Office, используя WINE, и, в некоторой степени, успешно, но это не получилось, и в большинстве случаев он падал, когда я пытался открыть свои офисные файлы.

LaTeX - это хорошо, но это не офисное решение. LaTeX предназначен для набора текста, он больше похож на инструмент для профессионалов, и в нем нет ни таблиц, ни презентаций.

Так в чем же решение?

Это не решение командной строки. Единственное решение, которое я придумал за все эти годы, чтобы держать меня в своей операционной системе GNU / Linux и выполнять свои офисные работы, - это использовать минимальную установку Microsoft Windows на виртуальной машине (например, VirtualBox) и установить костюм Microsoft Office.

введите описание изображения здесь

Это может звучать не очень красиво, но это единственное решение, которое работает безупречно и спасает меня от борьбы с плохими офисными решениями в мое драгоценное время. Сначала я сам думал, что это не очень хорошее решение, но после неудачи со всеми остальными и работы над этой виртуальной машиной в течение более 2 лет, я действительно доволен этим :)

================================================== ==============================

ПРИМЕЧАНИЕ-1: я не рекламирую продукты Microsoft! Просто пытаюсь помочь решить проблему и двигаться дальше по жизни.

ПРИМЕЧАНИЕ-2: Как подчеркивалось выше, это НЕ решение для командной строки. Так зачем публиковать ответ? Потому что это проверенный и хорошо работающий вариант! Если РАБОЧЕЕ решение для командной строки недоступно (что, я подозреваю, так и есть), то вариант ALTERNATIVE лучше, чем NO.

Сейед Мухаммед
источник
1
Почему просто использовать слово MS wineвместо виртуальной машины?
Всего
1
Как я уже упоминал, мой опыт установки и использования MS-Office WINEне прошел успешно. Программа не работала, как в Windows (показала некорректное поведение), а также сильно зависала!
Сейед Мохаммед
3
Нет Оха имеет downvoted еще , но вопрос явно просит командную строку решения. Это не бесполезно из-за MS, это бесполезно, потому что он полностью игнорирует вопрос.
djeikyb
3
Пожалуйста, обратите внимание, что OP явно запрашивает решение для командной строки, которое будет работать на его сервере Ubuntu (который, вероятно, даже не имеет графического интерфейса!). Ваш ответ не плохой, но в данном случае он не актуален.
Glutanimate
2
@ScepticalJule Смешно. Вы явно назначаете награду за решение командной строки. Затем вы выбираете ответ, который даже не является ответом на вопрос. Вы даже изучали другие ответы. Включая этот и мой?
don.joey
1

Вот пара приложений, которые вы можете попробовать и посмотреть, работают ли они FF Multi Converter, или вы можете попробовать Kingsoft Office .

rstreeter78
источник
Установил FF Multi Converter, выполнил команду ... ничего не произошло. У Kingsoft есть приятный графический интерфейс, но он не мог правильно открыть / показать файл (формулы отсутствовали даже после того, как я установил необходимые шрифты. Буквы в круге также отсутствовали).
Скептически июль
0

Установите Caliber из Центра программного обеспечения или Synaptic и установите вывод по умолчанию PDF.

В командной строке выполните

ebook-convert dummyfilename .docx .pdf -h

K7AAY
источник
Это как-то вырезает текст.
don.joey
Сбой с ValueError: No plugin to handle input format: docx. Google не помог в этом, поэтому я сообщу об ошибке.
Скептически июль