Конвертировать .docx в .pdf с помощью pandoc


19

Я пытаюсь преобразовать .docx, полученный по почте, в правильный pdf с помощью pandoc (я использую GNU / Linux).

У меня есть ошибка, связанная с кодировкой символов:

$ pandoc file.docx -o file.pdf
pandoc: Cannot decode byte '\x87': Data.Text.Encoding.decodeUtf8: Invalid UTF-8 stream

Я попытался определить кодировку:

$ file -i file .docx 
file.docx: application/vnd.openxmlformats-officedocument.wordprocessingml.document; charset=binary

Я немного удивлен charset=binary(я ожидал charset=iso8859-15). Однако я все равно попытался преобразовать .docx в utf8, и он не работает:

 $ iconv -t utf-8 file.docx
P!      $iconv: séquence d'échappement non permise à la position 16

У меня та же ошибка с командной строкой из документации pandoc :

iconv -t utf-8 file.docx | pandoc | iconv -f utf-8

Как я могу преобразовать этот .docx в pdf с помощью pandoc?


Почему бы вам не использовать Zamzar - один раз ... Я должен использовать Kingsoft для редактирования моей работы, хотя, вероятно, это запрещено в Северной Америке ...
Уилф

Я предлагаю предоставить iconvисходный набор символов, используя -fфлаг. Например, iconv -f ISO-8859-15 -t utf-8 file.docxможет сработать. Хотя понятия не имею, что это за формат файла .docx.
Дероберт

@ я попробовал. Вывод неправильный (обычно Замзар отлично справляется со своей работой, но не для этого файла).
апреля

1
@ wilf спасибо (pandoc очень мощный, иногда я забываю, что у него есть ограничения).
апреля

2
@derobert: запуск iconvнепосредственно над .docxфайлом вряд ли сработает. iconvПредполагается, что его ввод представляет собой текстовый файл в некотором указанном или предполагаемом формате. .docxФайл на самом деле почтовый файл (сжатый архив) , содержащий ( в основном) файлы XML. Возможно, вам повезет, разархивировав .docxфайл, запустив iconvсоставляющие файлы, а затем снова переархивировав все обратно в новый .docx, но я бы не стал ставить на то, что он работает. С одной стороны, xml-файл, содержащий фактическое содержимое документа, указывает его кодировку: encoding="UTF-8"например.
Кит Томпсон

Ответы:


16

В документации здесь , .docxне перечислен как совместимый вход :

Pandoc - это библиотека Haskell для преобразования из одного формата разметки в другой и инструмент командной строки, который использует эту библиотеку. Он может читать разметку и (подмножество) текстиля, reStructuredText, HTML, LaTeX, разметки MediaWiki, разметки Haddock, OPML и DocBook; и он может писать простой текст, разметку, reStructuredText, XHTML, HTML 5, LaTeX (включая слайд-шоу проектора), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, разметку MediaWiki, EPUB (v2 или v3) ), FictionBook2, Текстиль, справочные страницы groff, Emacs Org-Mode, AsciiDoc и Slidy, Slideous, DZSlides, reve.js или HTML-слайд-шоу S5. Он также может выводить PDF в системах, где установлен LaTeX.

Попробуйте что-нибудь еще, например Libreoffice - который может делать docx, если вы не возражаете против нескольких ошибок форматирования.

РЕДАКТИРОВАТЬ:

Теперь в описании говорится, что теперь Pandoc поддерживает чтение из Word DOCX (а также DocBook и некоторых других форматов):

Pandoc - это библиотека Haskell для преобразования из одного формата разметки в другой и инструмент командной строки, который использует эту библиотеку. Он может читать разметку и (подмножества) текстиля, reStructuredText, HTML, LaTeX, разметки MediaWiki, разметки TWiki, разметки Haddock, OPML, Emacs Org-mode, DocBook, txt2tags, EPUB и Word docx ; и это можно написатьпростой текст, разметка, reStructuredText, XHTML, HTML 5, LaTeX (включая слайд-шоу проектора), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, разметка MediaWiki, разметка DokuWiki, разметка Haddock, EPUB (версия 2) или v3), FictionBook2, Текстиль, справочные страницы groff, Emacs Org-Mode, AsciiDoc, InDesign ICML и слайд-шоу Slidy, Slideous, DZSlides, reve.js или HTML S5. Он также может выводить PDF в системах, где установлен LaTeX.


Как предположил @evilsoup, это может сработать:

cd /DIRECTORY/WITH/FILE/IN && libreoffice --headless --convert-to html 'FILE.docx' && pandoc 'FILE.html' -o 'FILE.pdf'

Да, вы можете использовать команду libreoffice с --outdir, но вывод html не всегда работает таким образом ...

Я быстро проверил это, и это, похоже, сработало, кроме падения Пандока из-за изображения в формате gif в документе. смайлик


Гм .... Word Docx прямо в вашем цитируемом тексте (сразу после OpenDocument и ODT). Тем не менее, docx по-прежнему не является хорошо документированным форматом, и поэтому фактическая совместимость в открытом мире .... пятнистая, скажем так, и ваше предложение для LibreOffice (вместе с различиями в форматировании ) хорошо.
SuperMagic

@SuperMagic - это то, в чем он может писать ... Выделил его, чтобы было проще.
Уилф

1
Если вы действительно хотите PDF в стиле pandoc (фактически LaTeX), вы также можете использовать LibreOffice для преобразования docx в html, а затем использовать его в качестве входных данных для pandoc (в зависимости от компетенции человека, который сделал исходный документ, вам может понадобиться удалить кучу <BR>s из HTML).
evilsoup

1
В OSX исполняемый файл называется soffice, и его можно найти в /Applications/LibreOffice.app/contents/MacOS/bin. Более подробную информацию можно найти здесь: ask.libreoffice.org/en/question/12084/…
Тим

2
Pandoc теперь перечисляет Word docx как поддерживаемый формат в документации.
cledoux

12

Это все еще встречается при поиске в Google, поэтому я хотел указать это в записи: pandoc не смог прочитать docx, когда был задан этот вопрос (ошибка возникает из-за попытки прочитать двоичный файл), но, начиная с версии 1.13, он может и делает довольно хорошая работа этого.


2
Однако Pandoc не сохраняет оригинальное оформление дизайна. Смотрите это сообщение: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.