Character-Encoding

使用 pandoc 將 .docx 轉換為 .pdf

  • April 13, 2015

我正在嘗試使用 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?

在此處的文件中,.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'

是的,您可以將 libreoffice 命令與 一起使用--outdir,但 html 輸出並不總是以這種方式工作……

我對此進行了快速測試,它似乎工作,除了 Pandoc 由於文件中的 gif 圖像而崩潰笑臉

引用自:https://unix.stackexchange.com/questions/105584