Converta um .docx para um .pdf com pandoc

17

Estou tentando converter um .docx recebido pelo correio para um pdf correto usando o pandoc (estou usando o GNU / Linux).

Eu tenho um erro sobre a codificação de caracteres:

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

Eu tentei identificar a codificação:

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

Estou um pouco surpreso com charset=binary (esperava charset=iso8859-15 ). No entanto eu tentei converter o .docx para utf8 de qualquer maneira e não está funcionando:

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

Eu tenho o mesmo erro com a linha de comando da documentação do pandoc :

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

Como posso converter este arquivo .docx para pdf com pandoc?

    
por ppr 17.12.2013 / 17:50

2 respostas

14

Na documentação aqui , .docx não está listado como uma entrada compatível:

Pandoc is a Haskell library for converting from one markup format to another, and a command-line tool that uses this library. It can read markdown and (subsets of) Textile, reStructuredText, HTML, LaTeX, MediaWiki markup, Haddock markup, OPML, and DocBook; and it can write plain text, markdown, reStructuredText, XHTML, HTML 5, LaTeX (including beamer slide shows), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, MediaWiki markup, EPUB (v2 or v3), FictionBook2, Textile, groff man pages, Emacs Org-Mode, AsciiDoc, and Slidy, Slideous, DZSlides, reveal.js or S5 HTML slide shows. It can also produce PDF output on systems where LaTeX is installed.

Tente outra coisa, como o Libreoffice - que pode fazer docx, assim como você não se importa com alguns erros de formatação.

EDITAR:

A descrição agora diz que o Pandoc agora parece suportar a leitura do Word DOCX (assim como o DocBook e alguns outros formatos):

Pandoc is a Haskell library for converting from one markup format to another, and a command-line tool that uses this library. It can read markdown and (subsets of) Textile, reStructuredText, HTML, LaTeX, MediaWiki markup, TWiki markup, Haddock markup, OPML, Emacs Org-mode, DocBook, txt2tags, EPUB and Word docx; and it can write plain text, markdown, reStructuredText, XHTML, HTML 5, LaTeX (including beamer slide shows), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, MediaWiki markup, DokuWiki markup, Haddock markup, EPUB (v2 or v3), FictionBook2, Textile, groff man pages, Emacs Org-Mode, AsciiDoc, InDesign ICML, and Slidy, Slideous, DZSlides, reveal.js or S5 HTML slide shows. It can also produce PDF output on systems where LaTeX is installed.

Como o @evilsoup sugeriu, isso pode funcionar:

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

Sim, você pode usar o comando libreoffice com --outdir , mas a saída html nem sempre funciona assim ...

Eu dei um teste rápido, e pareceu funcionar, além do Pandoc travar devido a uma imagem gif no documento

    
por 17.12.2013 / 18:22
8

Isso ainda aparece nas pesquisas do Google, então eu queria colocar isso no registro: pandoc não pôde ler docx quando esta pergunta foi feita (o erro vem de tentar ler um arquivo binário) mas desde a versão 1.13 pode faz um bom trabalho.

    
por 19.02.2015 / 17:29