使用pandoc将.docx转换为.pdf


19

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

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

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

我试图识别编码:

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

我有点惊讶charset=binary(我原以为是charset=iso8859-15)。但是我还是试图将.docx转换为utf8,但它不起作用:

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

我在pandoc文档的命令行中有相同的错误:

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

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


您为什么不使用Zamzar-一次关闭...我必须使用Kingsoft来编辑我的作品,尽管在北美使用它可能是非法的……
Wilf

我建议iconv使用该-f标志提供源字符集。例如,iconv -f ISO-8859-15 -t utf-8 file.docx可能有效。不过,不知道.docx文件的格式是什么。
derobert 2013年

我尝试过@wilf。输出不正确(通常,Zamzar可以很好地完成工作,但对于此文件而言效果不佳)。
2013年

1
@wilf谢谢(pandoc非常强大,有时我忘记了它的局限性)。
2013年

2
@derobert:iconv直接在.docx文件上运行不太可能。iconv假定其输入是某种指定或推断格式的文本文件。一个.docx文件实际上是包含(主要)XML文件的zip文件(压缩档案)。可以想像,您可能会有些运气来解压缩.docx文件,iconv在组成文件上运行,然后将所有内容重新压缩回一个新的.docx,但是我敢打赌它不会工作。一方面,包含文档实际内容的xml文件指定了其编码:encoding="UTF-8"例如。
基思·汤普森

Answers:


16

此处的文档中,.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,aslong因为你不介意的几个格式错误。

编辑:

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

Pandoc是Haskell库,用于从一种标记格式转换为另一种标记格式,并且是使用该库的命令行工具。它可以读取markdown和(子集)Textile,reStructuredText,HTML,LaTeX,MediaWiki标记,TWiki标记,Haddock标记,OPML,Emacs Org-mode,DocBook,txt2tags,EPUB和Word docx;它可以纯文本,降价,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'

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

我进行了此快速测试,除了因文档中的gif图像而使Pandoc崩溃之外,它似乎还可以工作 笑脸


嗯... Word docx就在您引用的文本中(在OpenDocument和ODT之后)。就是说,docx仍然不是一个有据可查的格式,因此,在开放世界中的实际兼容性还是....值得一提的是,您对LibreOffice的建议(以及格式上的差异)很好。
SuperMagic 2013年

@SuperMagic-实际上,它可以写入 ...突出显示它以使其更容易。
威尔夫

1
如果您确实要使用Pandoc样式(实际上是LaTeX制造的)PDF,则还可以使用LibreOffice将docx转换为html,然后将其用作pandoc的输入(取决于制作原始文档的人的能力,您可能需要<BR>从html中删除一堆)。
evilsoup

1
在OSX上,可执行文件称为soffice,可以在/Applications/LibreOffice.app/contents/MacOS/bin中找到。可以在此处找到更多详细信息:ask.libreoffice.org/en/question/12084/…–
Tim Saylor

2
Pandoc现在在文档中将Word docx列为受支持的格式。
cledoux

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.