Convierta un .docx en un .pdf con pandoc


19

Estoy tratando de convertir un .docx recibido por correo a un pdf correcto usando pandoc (estoy usando GNU / Linux).

Tengo un error relacionado con la codificación de caracteres:

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

Traté de identificar la codificación:

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

Estoy un poco sorprendido por charset=binary(esperaba charset=iso8859-15). Sin embargo, intenté convertir el .docx a utf8 de todos modos y no funciona:

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

Tengo el mismo error con la línea de comando de la documentación de pandoc :

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

¿Cómo puedo convertir este .docx a pdf con pandoc?


¿Por qué no usar Zamzar - para el que está ... Tengo que usar Kingsoft a editar mi trabajo, aunque es probable que sea ilegal el uso en América del Norte ...
Wilf

Sugiero proporcionar iconvun conjunto de caracteres de origen, utilizando la -fbandera. Por ejemplo, iconv -f ISO-8859-15 -t utf-8 file.docxpodría funcionar. Sin embargo, no tengo idea de cuál es el formato de un archivo .docx.
derobert

@wilf lo intenté. La salida no es correcta (normalmente, Zamzar hace su trabajo muy bien pero no para este archivo).
ppr

1
@wilf gracias (pandoc es tan poderoso que a veces olvido que tiene limitaciones).
ppr

2
@derobert: es poco probable que funcione iconvdirectamente en un .docxarchivo. iconvasume que su entrada es un archivo de texto en algún formato especificado o inferido. Un .docxarchivo es en realidad un archivo zip (un archivo comprimido) que contiene (principalmente) archivos xml. Es posible que tenga suerte descomprimiendo el .docxarchivo, ejecutándose iconven los archivos constituyentes y luego volviendo a comprimir todo en uno nuevo .docx, pero no apostaría a que funcione. Por un lado, el archivo xml que contiene el contenido real del documento especifica su codificación: encoding="UTF-8"por ejemplo.
Keith Thompson

Respuestas:


16

En la documentación aquí , .docxno aparece como entrada compatible :

Pandoc es una biblioteca de Haskell para convertir de un formato de marcado a otro, y una herramienta de línea de comandos que utiliza esta biblioteca. Puede leer markdown y (subconjuntos de) Textile, reStructuredText, HTML, LaTeX, marcado de MediaWiki, marcado de Haddock, OPML y DocBook; y puede escribir texto plano, markdown, reStructuredText, XHTML, HTML 5, LaTeX (incluidas las presentaciones de diapositivas de beamer), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, marcado de MediaWiki, EPUB (v2 o v3 ), FictionBook2, Textil, páginas de manual de groff, Emacs Org-Mode, AsciiDoc y Slidy, Slideous, DZSlides, revelar.js o presentaciones de diapositivas HTML S5. También puede producir archivos PDF en sistemas donde está instalado LaTeX.

Pruebe con otra cosa, como Libreoffice , que puede hacer docx, siempre y cuando no le importe algunos errores de formato.

EDITAR:

La descripción ahora dice que Pandoc ahora parece admitir la lectura de Word DOCX (así como DocBook y algunos otros formatos):

Pandoc es una biblioteca de Haskell para convertir de un formato de marcado a otro, y una herramienta de línea de comandos que utiliza esta biblioteca. Puede leer markdown y (subconjuntos de) Textile, reStructuredText, HTML, LaTeX, marcado de MediaWiki, marcado de TWiki, marcado de Haddock, OPML, Emacs Org-mode, DocBook, txt2tags, EPUB y Word docx ; y puede escribirtexto plano, markdown, reStructuredText, XHTML, HTML 5, LaTeX (incluidas las presentaciones de diapositivas), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, marcado MediaWiki, marcado DokuWiki, marcado Haddock, EPUB (v2 o v3), FictionBook2, Textil, páginas de manual de groff, Emacs Org-Mode, AsciiDoc, InDesign ICML y Slidy, Slideous, DZSlides, revelar.js o S5 presentaciones de diapositivas HTML. También puede producir archivos PDF en sistemas donde está instalado LaTeX.


Como @evilsoup sugirió, esto podría funcionar:

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

Sí, puede usar el comando libreoffice con --outdir, pero la salida html no siempre funciona de esa manera ...

Le di a esto una prueba rápida, y parecía funcionar, aparte de la falla de Pandoc debido a una imagen gif en el documento sonriente


Um ... Word docx está ahí en el texto citado (justo después de OpenDocument y ODT). Dicho esto, docx todavía no es un formato bien documentado y, por lo tanto, la compatibilidad real en el mundo abierto es ... irregular, digamos, y su sugerencia para LibreOffice (junto con las diferencias de formato ) es buena.
SuperMagic

@SuperMagic: lo es, en el momento en que puede escribir ... Lo resalté para que sea más fácil.
Wilf

1
Si realmente desea un PDF de estilo pandoc (en realidad hecho con LaTeX), también puede usar LibreOffice para convertir el docx a html, y luego usarlo como entrada para pandoc (dependiendo de la competencia de la persona que hizo el documento original, puede que necesite eliminar un montón de <BR>s del html).
evilsoup

1
En OSX, el ejecutable se llama soffice y se puede encontrar en /Applications/LibreOffice.app/contents/MacOS/bin. Más detalles se pueden encontrar aquí: ask.libreoffice.org/en/question/12084/…
Tim Saylor

2
Pandoc ahora enumera Word docx como un formato compatible en la documentación.
cledoux

12

Esto todavía aparece en las búsquedas de Google, así que quería poner esto en el registro: pandoc no pudo leer docx cuando se hizo esta pregunta (el error proviene de intentar leer un archivo binario) pero desde la versión 1.13 puede, y hace un muy buen trabajo de eso.


2
Sin embargo, Pandoc no conserva el formato de diseño original. Ver esta publicación: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.