Перетворіть .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?


Чому б ти не скористався Замзаром - одноразово ... Я повинен використовувати Kingsoft для редагування своєї роботи, хоча це, мабуть, незаконно використовувати в Північній Америці ...
Вільф

Я пропоную надати iconvджерельний набір символів, використовуючи -fпрапор. Наприклад, iconv -f ISO-8859-15 -t utf-8 file.docxможе спрацювати. Поняття про те, який формат файлу .docx, не має.
дероберт

@wilf Я спробував. Вихід невірний (як правило, Zamzar дуже добре виконує свою роботу, але не для цього файлу).
ппр

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

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

Відповіді:


16

У документації тут , .docxне перераховано як сумісний вхід :

Pandoc - це бібліотека Haskell для перетворення одного формату розмітки в інший та інструмент командного рядка, який використовує цю бібліотеку. Він може читати розмітку та (підмножини) Textile, 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, Textile, groff man pages, Emacs Org-Mode, AsciiDoc та Slidy, Slideous, DZSlides, Discover.js або S5 HTML-слайд-шоу. Він також може виробляти вихід PDF у системах, де встановлено LaTeX.

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

Редагувати:

Опис тепер говорить про те, що Pandoc тепер, здається, підтримує читання з Word DOCX (а також з DocBook та кількох інших форматів):

Pandoc - це бібліотека Haskell для перетворення одного формату розмітки в інший та інструмент командного рядка, який використовує цю бібліотеку. Він може читати розмітку та (підмножини) Textile, 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 (v2 або v3), FictionBook2, Textile, groff man pages, Emacs Org-Mode, AsciiDoc, InDesign ICML та Slidy, Slideous, DZSlides, Discover.js або S5 HTML-слайд-шоу. Він також може виробляти вихід PDF у системах, де встановлено LaTeX.


Як @evilsoup запропонував, це може працювати:

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

Так, ви можете використовувати команду libreoffice за допомогою --outdir, але вихід HTML не завжди працює таким чином ...

Я дав це швидке випробування, і, здавалося, це спрацювало, окрім того, що Pandoc вийшов з ладу через gif-зображення в документі смайлик


Гм .... Word docx знаходиться прямо у вашому цитованому тексті (відразу після OpenDocument і ODT). Однак, docx все ще не є добре задокументованим форматом, тому фактична сумісність у відкритому світі є .... плямистою, якщо говорити, і ваша пропозиція щодо LibreOffice (разом із відмінностями у форматуванні ) є хорошою.
SuperMagic

@SuperMagic - це, трохи, він може написати на ... Виділив це, щоб зробити його простіше.
Вільф

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

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/isissue/2206#issuecomment-107994587
orschiro
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.