Konvertieren Sie eine .docx in eine .pdf mit pandoc

19

Ich versuche, eine per Mail erhaltene .docx-Datei mit pandoc in eine korrekte PDF-Datei umzuwandeln (ich verwende GNU / Linux).

Ich habe einen Fehler bezüglich der Zeichenkodierung:

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

Ich habe versucht, die Codierung zu identifizieren:

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

Ich bin ein wenig überrascht von charset=binary(ich hatte erwartet charset=iso8859-15). Allerdings habe ich trotzdem versucht, die .docx nach utf8 zu konvertieren und es funktioniert nicht:

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

Ich habe den gleichen Fehler mit der Befehlszeile aus der Pandoc-Dokumentation :

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

Wie kann ich diese .docx zu pdf mit Pandoc konvertieren?

ppr
quelle
Warum benutzt du nicht Zamzar - für eine einmalige ... Ich muss Kingsoft verwenden , um meine Arbeit zu bearbeiten, obwohl es wahrscheinlich illegal ist, in Nordamerika zu verwenden ...
Wilf
Ich schlage vor, iconveinen Quellzeichensatz mithilfe des -fFlags bereitzustellen. Zum Beispiel iconv -f ISO-8859-15 -t utf-8 file.docxkönnte funktionieren. Keine Ahnung, wie das Format einer DOCX-Datei lautet.
Derobert
@wilf Ich habe es versucht. Die Ausgabe ist nicht korrekt (normalerweise macht Zamzar seine Arbeit sehr gut, aber nicht für diese Datei).
17.
1
@wilf danke (Pandoc ist so mächtig, manchmal vergesse ich, dass es Einschränkungen hat).
17.
2
@derobert: Es ist unwahrscheinlich, dass iconveine direkte Ausführung in einer .docxDatei funktioniert. iconvgeht davon aus, dass es sich bei seiner Eingabe um eine Textdatei in einem bestimmten oder abgeleiteten Format handelt. Eine .docxDatei ist eigentlich eine Zip-Datei (ein komprimiertes Archiv), die (meistens) XML-Dateien enthält. Möglicherweise haben Sie Glück, wenn Sie die .docxDatei entpacken , sie iconvauf den einzelnen Dateien ausführen und sie dann wieder in eine neue Datei packen .docx, aber ich würde nicht darauf wetten, dass sie funktioniert. Zum einen gibt die XML-Datei, die den tatsächlichen Inhalt des Dokuments enthält, die Kodierung an: encoding="UTF-8"zum Beispiel.
Keith Thompson

Antworten:

16

In der Dokumentation hier , .docxals kompatibel nicht aufgelistet Eingang :

Pandoc ist eine Haskell-Bibliothek zum Konvertieren von einem Markup-Format in ein anderes und ein Befehlszeilentool, das diese Bibliothek verwendet. Es kann Markdowns und (Teilmengen von) Textilien, reStructuredText, HTML, LaTeX, MediaWiki-Markups, Haddock-Markups, OPML und DocBook lesen. und es kann schreiben Klartext, Abschlag, reStructuredText, XHTML, HTML 5, Latex (einschließlich Beamer Dia - Shows), Kontext, RTF, OPML, DocBook, OpenDocument-, ODT, Word- docx, GNU Texinfo, MediaWiki Markup, EPUB (v2 bzw. v3 ), FictionBook2, Textile, Handbuchseiten, Emacs Org-Mode, AsciiDoc und Slidy, Slideous, DZSlides, disclose.js oder S5 HTML-Diashows. Es kann auch PDF-Ausgaben auf Systemen erzeugen, auf denen LaTeX installiert ist.

Versuchen Sie es mit etwas anderem, wie Libreoffice, das docx ausführen kann, solange Ihnen einige Formatierungsfehler nichts ausmachen.

BEARBEITEN:

Die Beschreibung besagt nun, dass Pandoc das Lesen von Word DOCX (sowie von DocBook und einigen anderen Formaten) offenbar unterstützt:

Pandoc ist eine Haskell-Bibliothek zum Konvertieren von einem Markup-Format in ein anderes und ein Befehlszeilentool, das diese Bibliothek verwendet. Es kann Markdowns und (Teilmengen von) Textilien, reStructuredText, HTML, LaTeX, MediaWiki-Markups, TWiki-Markups, Haddock-Markups, OPML, Emacs Org-Modus, DocBook, txt2tags, EPUB und Word Docx lesen . und es kann schreibenKlartext, Markdown, reStructuredText, XHTML, HTML 5, LaTeX (einschließlich Beamer-Diashows), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, WordDocx, GNU Texinfo, MediaWiki-Markup, DokuWiki-Markup, Haddock-Markup, EPUB (v2 oder v3), FictionBook2, Textile, große Manpages, Emacs Org-Mode, AsciiDoc, InDesign ICML und Slidy, Slideous, DZSlides, disclose.js oder S5 HTML-Diashows. Es kann auch PDF-Ausgaben auf Systemen erzeugen, auf denen LaTeX installiert ist.


Wie @evilsoup vorschlug, könnte dies funktionieren:

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

Ja, Sie können den Befehl libreoffice mit verwenden --outdir, aber die HTML-Ausgabe funktioniert nicht immer so ...

Ich habe dies kurz getestet und es schien zu funktionieren, abgesehen davon, dass Pandoc aufgrund eines GIF-Bildes im Dokument abstürzte smiley

Wilf
quelle
Um .... Word docx ist genau dort in Ihrem zitierten Text (direkt nach OpenDocument und ODT). Das hieß, docx ist noch nicht ein gut dokumentiertes Format und so die Vereinbarkeit in der offenen Welt ist .... pickelig, sagen wir mal, und Ihr Vorschlag für Libreoffice (zusammen mit der Formatierung Unterschieden ) ist gut.
SuperMagic
@SuperMagic - es ist, in dem Stück kann es schreiben ... Hervorgehoben, um es einfacher zu machen.
Wilf
1
Wenn Sie wirklich eine PDF-Datei im Pandoc-Stil (tatsächlich mit LaTeX erstellt) möchten, können Sie LibreOffice auch zum Konvertieren von docx in html verwenden und diese dann als Eingabe für pandoc verwenden (abhängig von der Kompetenz der Person, die das Originaldokument erstellt hat). Möglicherweise müssen Sie ein paar <BR>s aus dem HTML-Code entfernen .
Übelsuppe
1
Unter OSX heißt die ausführbare Datei soffice und befindet sich unter /Applications/LibreOffice.app/contents/MacOS/bin. Weitere Details finden Sie hier: ask.libreoffice.org/en/question/12084/…
Tim Saylor
2
Pandoc listet Word docx jetzt als unterstütztes Format in der Dokumentation auf.
Cledoux
12

Dies taucht immer noch bei Google-Suchen auf, daher wollte ich Folgendes aufzeichnen: pandoc konnte docx nicht lesen, als diese Frage gestellt wurde (der Fehler stammt aus dem Versuch, eine Binärdatei zu lesen), aber seit Version 1.13 ist dies möglich, und es funktioniert a ziemlich gute Arbeit.

jkr
quelle
2
Pandoc behält jedoch nicht die ursprüngliche Formatierung des Designs bei. Siehe diesen Beitrag: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro