使用 pandoc 将 .docx 转换为 .pdf

ppr*_*ppr 21 character-encoding pandoc microsoft-word

我正在尝试使用 pandoc 将通过邮件收到的 .docx 转换为正确的 pdf(我使用的是 GNU/Linux)。

我有一个关于字符编码的错误:

$ pandoc file.docx -o file.pdf
pandoc: Cannot decode byte '\x87': Data.Text.Encoding.decodeUtf8: Invalid UTF-8 stream
Run Code Online (Sandbox Code Playgroud)

我试图识别编码:

$ file -i file .docx 
file.docx: application/vnd.openxmlformats-officedocument.wordprocessingml.document; charset=binary
Run Code Online (Sandbox Code Playgroud)

我有点惊讶charset=binary(我期待charset=iso8859-15)。但是,我无论如何都尝试将 .docx 转换为 utf8,但它不起作用:

 $ iconv -t utf-8 file.docx
P!      $iconv: séquence d'échappement non permise à la position 16
Run Code Online (Sandbox Code Playgroud)

我对pandoc 文档中的命令行有同样的错误:

iconv -t utf-8 file.docx | pandoc | iconv -f utf-8
Run Code Online (Sandbox Code Playgroud)

如何使用 pandoc 将此 .docx 转换为 pdf?

Wil*_*ilf 17

此处的文档中,.docx未列为兼容输入

Pandoc 是一个 Haskell 库,用于从一种标记格式转换为另一种标记格式,以及使用该库的命令行工具。它可以读取 Markdown 和 Textile、reStructuredText、HTML、LaTeX、MediaWiki 标记、Haddock 标记、OPML 和 DocBook(的子集);它可以编写 纯文本、markdown、reStructuredText、XHTML、HTML 5、LaTeX(包括投影仪幻灯片)、ConTeXt、RTF、OPML、DocBook、OpenDocument、ODT、Word docx、GNU Texinfo、MediaWiki 标记、EPUB(v2 或 v3) )、FictionBook2、Textile、groff 手册页、Emacs Org-Mode、AsciiDoc 和 Slidy、Slideous、DZSlides、reveal.js 或 S5 HTML 幻灯片。它还可以在安装了 LaTeX 的系统上生成 PDF 输出。

尝试其他的东西,比如Libreoffice——它可以做 docx,只要你不介意一些格式错误。

编辑:

现在描述说 Pandoc 现在似乎支持从 Word DOCX(以及 DocBook 和一些其他格式)中读取:

Pandoc 是一个 Haskell 库,用于从一种标记格式转换为另一种标记格式,以及使用该库的命令行工具。它可以读取 Markdown 和(子集)Textile、reStructuredText、HTML、LaTeX、MediaWiki 标记、TWiki 标记、Haddock 标记、OPML、Emacs Org-mode、DocBook、txt2tags、EPUB 和 Word docx;它可以纯文本、markdown、reStructuredText、XHTML、HTML 5、LaTeX(包括投影仪幻灯片)、ConTeXt、RTF、OPML、DocBook、OpenDocument、ODT、Word docx、GNU Texinfo、MediaWiki 标记、DokuWiki 标记、Haddock 标记、EPUB (v2或 v3)、FictionBook2、Textile、groff 手册页、Emacs Org-Mode、AsciiDoc、InDesign ICML 和 Slidy、Slideous、DZSlides、reveal.js 或 S5 HTML 幻灯片。它还可以在安装了 LaTeX 的系统上生成 PDF 输出。


正如@evilsoup 建议的那样,这可能有效:

cd /DIRECTORY/WITH/FILE/IN && libreoffice --headless --convert-to html 'FILE.docx' && pandoc 'FILE.html' -o 'FILE.pdf'
Run Code Online (Sandbox Code Playgroud)

是的,您可以将 libreoffice 命令与 一起使用--outdir,但 html 输出并不总是那样工作......

我对此进行了快速测试,除了由于文档中的 gif 图像导致 Pandoc 崩溃之外,它似乎还有效 笑脸

  • Pandoc 现在将 Word docx 列为文档中支持的格式。 (3认同)
  • 在 OSX 上,可执行文件称为 soffice,可以在 /Applications/LibreOffice.app/contents/MacOS/bin 中找到。可以在此处找到更多详细信息:http://ask.libreoffice.org/en/question/12084/how-to-convert-documents-to-pdf-on-osx/ (2认同)

小智 13

这仍然出现在谷歌搜索中,所以我想把它记录在案:当这个问题被问到时 pandoc 无法读取 docx(错误来自尝试读取二进制文件)但从 1.13 版开始它可以,并且它做了一个做得很好。

  • 但是,Pandoc 不会保留原始设计格式。看到这个帖子:https://github.com/jgm/pandoc/issues/2206#issuecomment-107994587 (2认同)