Converta um .docx em um .pdf com pandoc

19

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

Tenho um erro em relação à 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(eu estava esperando charset=iso8859-15). No entanto, 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?

ppr
fonte
Por que você não usa o Zamzar - para começar ... Eu tenho que usar o Kingsoft para editar meu trabalho, embora provavelmente seja ilegal usá-lo na América do Norte ...
Wilf
Sugiro fornecer iconvum conjunto de caracteres de origem, usando o -fsinalizador. Por exemplo, iconv -f ISO-8859-15 -t utf-8 file.docxpode funcionar. No entanto, não faço idéia do formato de um arquivo .docx.
Der
@ Wilf eu tentei. A saída não está correta (normalmente, o Zamzar faz seu trabalho muito bem, mas não para este arquivo).
ppr 17/12/13
1
@ wilf obrigado (pandoc é tão poderoso às vezes eu esqueço que tem limitações).
ppr 17/12/13
2
@derobert: É improvável que correr iconvdiretamente em um .docxarquivo funcione. iconvassume que sua entrada é um arquivo de texto em algum formato especificado ou inferido. Um .docxarquivo é na verdade um arquivo zip (um arquivo compactado) contendo (principalmente) arquivos xml. É possível que você tenha alguma sorte em descompactar o .docxarquivo, executando iconvnos arquivos constituintes e depois compactando tudo novamente em um novo .docx, mas eu não apostaria que ele funcione. Por um lado, o arquivo xml que contém o conteúdo real do documento especifica sua codificação: encoding="UTF-8"por exemplo.
Keith Thompson

Respostas:

16

Na documentação aqui , .docxnão está listada como uma entrada compatível :

Pandoc é uma biblioteca Haskell para converter de um formato de marcação para outro e uma ferramenta de linha de comando que usa essa biblioteca. Ele pode ler marcações e (subconjuntos de) Textile, reStructuredText, HTML, LaTeX, marcação MediaWiki, marcação Haddock, OPML e DocBook; e pode escrever texto sem formatação, markdown, reStructuredText, XHTML, HTML 5, LaTeX (incluindo apresentações de slides beamer), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, marcação MediaWiki, EPUB (v2 ou v3 ), FictionBook2, Textile, páginas de manual groff, Emacs Org-Mode, AsciiDoc e Slidy, Slideous, DZSlides, discover.js ou S5 apresentações de slides em HTML. Também pode produzir saída em PDF em sistemas onde o LaTeX está instalado.

Tente outra coisa, como o Libreoffice - que pode executar docx, desde que você não se importe 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 é uma biblioteca Haskell para converter de um formato de marcação para outro e uma ferramenta de linha de comando que usa essa biblioteca. Ele pode ler marcações e (subconjuntos de) Textile, reStructuredText, HTML, LaTeX, marcação MediaWiki, marcação TWiki, marcação Haddock, OPML, modo Org Emacs, DocBook, txt2tags, EPUB e Word docx ; e pode escrevertexto simples, markdown, reStructuredText, XHTML, HTML 5, LaTeX (incluindo apresentações de slides beamer), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, marcação MediaWiki, marcação DokuWiki, marcação Haddock, EPUB (v2 ou v3), FictionBook2, Têxtil, páginas de manual groff, Emacs Org-Mode, AsciiDoc, InDesign ICML e Slidy, Slideous, DZSlides, shows de slides em HTML revelou.js ou S5. Também pode produzir saída de PDF em sistemas onde o LaTeX está instalado.


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 dessa maneira ...

Fiz um teste rápido e pareceu funcionar, além do travamento de Pandoc devido a uma imagem gif no documento risonho

Wilf
fonte
Um .... O Word Docx está bem no seu texto citado (logo após o OpenDocument e ODT). Dito isto, o docx ainda não é um formato bem documentado e, portanto, a compatibilidade real no mundo aberto é ... irregular, digamos, e sua sugestão para o LibreOffice (junto com as diferenças de formatação ) é boa.
SuperMagic
@SuperMagic - é, no pouco que ele pode escrever para ... Destacou para facilitar.
21413 Wilf
1
Se você realmente deseja um PDF no estilo pandoc (realmente produzido pelo LaTeX), também pode usar o LibreOffice para converter o docx em html e usá-lo como entrada para o pandoc (dependendo da competência da pessoa que criou o documento original, pode ser necessário remover um monte de <BR>s do html).
precisa
1
No OSX, o executável é chamado de soffice e pode ser encontrado em /Applications/LibreOffice.app/contents/MacOS/bin. Mais detalhes podem ser encontrados aqui: ask.libreoffice.org/en/question/12084/…
Tim Saylor
2
O Pandoc agora lista o Word docx como um formato suportado na documentação.
Cledoux
12

Isso ainda aparece nas pesquisas do Google, então eu queria colocar isso no registro: o pandoc não conseguiu ler o docx quando essa pergunta foi feita (o erro ocorre ao tentar ler um arquivo binário), mas desde a versão 1.13 ele pode, e faz um bom trabalho disso.

jkr
fonte
2
No entanto, o Pandoc não preserva a formatação do design original. Veja esta postagem: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro: