Converti un .docx in un .pdf con pandoc


19

Sto provando a convertire un .docx ricevuto per posta in un pdf corretto usando pandoc (sto usando GNU / Linux).

Ho un errore relativo alla codifica dei caratteri:

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

Ho provato a identificare la codifica:

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

Sono un po 'sorpreso da charset=binary(mi aspettavo charset=iso8859-15). Comunque ho provato a convertire .docx in utf8 comunque e non funziona:

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

Ho lo stesso errore con la riga di comando dalla documentazione di Pandand :

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

Come posso convertire questo .docx in pdf con pandoc?


Perché non usi Zamzar - per una volta ... Devo usare Kingsoft per modificare il mio lavoro, anche se probabilmente è illegale usarlo in Nord America ...
Wilf

Suggerisco di fornire iconvun set di caratteri di origine, usando la -fbandiera. Ad esempio, iconv -f ISO-8859-15 -t utf-8 file.docxpotrebbe funzionare. Non ho idea di quale sia il formato di un file .docx.
derobert il

@wilf ci ho provato. L'output non è corretto (normalmente, Zamzar fa molto bene il suo lavoro ma non per questo file).
ppr

1
@wilf grazie (il pandoc è così potente a volte dimentico che ha dei limiti).
ppr

2
@derobert: è improbabile che funzioni iconvdirettamente su un .docxfile. iconvpresume che il suo input sia un file di testo in un formato specificato o inferito. Un .docxfile è in realtà un file zip (un archivio compresso) contenente (principalmente) file XML. Probabilmente potresti avere un po 'di fortuna a decomprimere il .docxfile, eseguendo iconvi file costituenti e quindi ri-zippando tutto di nuovo in un nuovo .docx, ma non scommetterei che funzioni. Per prima cosa, il file XML contenente il contenuto effettivo del documento specifica la sua codifica: encoding="UTF-8"ad esempio.
Keith Thompson,

Risposte:


16

Nella documentazione qui , .docxnon è elencato come input compatibile :

Pandoc è una libreria Haskell per la conversione da un formato di markup a un altro e uno strumento da riga di comando che utilizza questa libreria. Può leggere markdown e (sottoinsiemi di) Textile, reStructuredText, HTML, LaTeX, markup MediaWiki, markup Haddock, OPML e DocBook; e può scrivere testo semplice, markdown, reStructuredText, XHTML, HTML 5, LaTeX (comprese le presentazioni di diapositive), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, markup MediaWiki, EPUB (v2 o v3 ), FictionBook2, Textile, pagine man di groff, Emacs Org-Mode, AsciiDoc e Slidy, Slideous, DZSlides, rivela.js o S5 slide show HTML. Può anche produrre output PDF su sistemi in cui è installato LaTeX.

Prova qualcos'altro, come Libreoffice , che può fare docx, purché non ti dispiaccia qualche errore di formattazione.

MODIFICARE:

La descrizione ora dice che Pandoc ora sembra supportare la lettura da Word DOCX (così come DocBook e alcuni altri formati):

Pandoc è una libreria Haskell per la conversione da un formato di markup a un altro e uno strumento da riga di comando che utilizza questa libreria. Può leggere markdown e (sottoinsiemi di) Textile, reStructuredText, HTML, LaTeX, markup MediaWiki, markup TWiki, markup Haddock, OPML, Emacs Org-mode, DocBook, txt2tags, EPUB e Word docx ; e sa scriveretesto normale, markdown, reStructuredText, XHTML, HTML 5, LaTeX (comprese le presentazioni di diapositive), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, markup MediaWiki, markup DokuWiki, markup Haddock, EPUB (v2 o v3), FictionBook2, Textile, pagine man di groff, Emacs Org-Mode, AsciiDoc, InDesign ICML e Slidy, Slideous, DZSlides, rivela.js o slide show HTML S5. Può anche produrre output PDF su sistemi in cui è installato LaTeX.


Come suggerito da @evilsoup, questo potrebbe funzionare:

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

Sì, puoi usare il comando libreoffice con --outdir, ma l'output html non funziona sempre in questo modo ...

Ho dato un rapido test, e sembrava funzionare, a parte l'arresto anomalo di Pandoc a causa di un'immagine gif nel documento smiley


Ehm ... Word docx è proprio lì nel testo tra virgolette (subito dopo OpenDocument e ODT). Detto questo, docx non è ancora un formato ben documentato e quindi, l'effettiva compatibilità nel mondo aperto è .... discutibile, diciamo, e il tuo suggerimento per LibreOffice (insieme alle differenze di formattazione ) è buono.
SuperMagic,

@SuperMagic - lo è, nella parte in cui può scrivere ... Evidenziato per renderlo più semplice.
Wilf,

1
Se vuoi davvero un PDF in stile pandoc (in realtà realizzato da LaTeX), puoi anche usare LibreOffice per convertire il docx in html e quindi usarlo come input per pandoc (a seconda della competenza della persona che ha creato il documento originale, potrebbe essere necessario rimuovere un gruppo di <BR>s dal codice HTML).
evilsoup,

1
Su OSX, l'eseguibile si chiama soffice e può essere trovato in /Applications/LibreOffice.app/contents/MacOS/bin. Ulteriori dettagli sono disponibili qui: ask.libreoffice.org/it/question/12084/…
Tim Saylor,

2
Pandoc ora elenca Word docx come formato supportato nella documentazione.
cledoux,

12

Questo risulta ancora nelle ricerche su Google, quindi volevo metterlo nel registro: pandoc non è riuscito a leggere docx quando è stata posta questa domanda (l'errore viene dal tentativo di leggere un file binario) ma dalla versione 1.13 può farlo e fa un ottimo lavoro.


2
Pandoc, tuttavia, non mantiene la formattazione del design originale. Vedi questo messaggio: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.