Konversikan .docx ke .pdf dengan pandoc

19

Saya mencoba untuk mengkonversi .docx yang diterima melalui pos ke pdf yang benar dengan menggunakan pandoc (saya menggunakan GNU / Linux).

Saya memiliki kesalahan terkait pengkodean karakter:

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

Saya mencoba mengidentifikasi penyandian:

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

Saya sedikit terkejut dengan charset=binary(saya mengharapkan charset=iso8859-15). Namun saya mencoba untuk mengkonversi .docx ke utf8 dan tidak berfungsi:

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

Saya memiliki kesalahan yang sama dengan baris perintah dari dokumentasi pandoc :

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

Bagaimana saya bisa mengkonversi .docx ini ke pdf dengan pandoc?

ppr
sumber
Mengapa Anda tidak menggunakan Zamzar - untuk satu kali ... Saya harus menggunakan Kingsoft untuk mengedit pekerjaan saya, meskipun mungkin ilegal untuk digunakan di Amerika Utara ...
Wilf
Saya sarankan menyediakan iconvset karakter sumber, menggunakan -fbendera. Misalnya, iconv -f ISO-8859-15 -t utf-8 file.docxmungkin berhasil. Tidak tahu apa format file .docx.
derobert
@wilf saya mencoba. Outputnya tidak benar (biasanya, Zamzar melakukan tugasnya dengan sangat baik tetapi tidak untuk file ini).
ppr
1
@wilf terima kasih (pandoc sangat kuat kadang-kadang saya lupa memiliki keterbatasan).
ppr
2
@derobert: Menjalankan iconvlangsung pada .docxfile tidak mungkin berfungsi iconvmengasumsikan bahwa inputnya adalah file teks dalam beberapa format yang ditentukan atau disimpulkan. Sebuah .docxfile yang sebenarnya adalah file zip (arsip terkompresi) mengandung (kebanyakan) file xml. Anda mungkin memiliki sedikit keberuntungan membuka ritsleting .docxfile, menjalankan iconvfile konstituen, dan kemudian zip semuanya kembali menjadi yang baru .docx, tapi saya tidak akan bertaruh itu berfungsi. Untuk satu hal, file xml yang mengandung konten sebenarnya dari dokumen menentukan penyandiannya:, encoding="UTF-8"misalnya.
Keith Thompson

Jawaban:

16

Dalam dokumentasi di sini , .docxtidak terdaftar sebagai input yang kompatibel :

Pandoc adalah pustaka Haskell untuk mengkonversi dari satu format markup ke format lainnya, dan alat baris perintah yang menggunakan pustaka ini. Ia dapat membaca markdown dan (subset dari) Tekstil, reStructuredText, HTML, LaTeX, markup MediaWiki, markup Haddock, OPML, dan DocBook; dan dapat menulis teks biasa, markdown, reStructuredText, XHTML, HTML 5, LaTeX (termasuk beamer slide shows), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, markup MediaWiki, EPUB (v2 atau v3 ), FictionBook2, Tekstil, halaman manual groff, Emacs Org-Mode, AsciiDoc, dan Slidy, Slideous, DZSlides, reve.js atau slide show S5 HTML. Itu juga dapat menghasilkan output PDF pada sistem di mana LaTeX diinstal.

Cobalah sesuatu yang lain, seperti Libreoffice - yang dapat melakukan docx, selama Anda tidak keberatan dengan beberapa kesalahan pemformatan.

EDIT:

Deskripsi sekarang mengatakan bahwa Pandoc sekarang tampaknya mendukung pembacaan dari Word DOCX (serta DocBook dan beberapa format lainnya):

Pandoc adalah pustaka Haskell untuk mengkonversi dari satu format markup ke format lainnya, dan alat baris perintah yang menggunakan pustaka ini. Ia dapat membaca markdown dan (subset dari) Tekstil, reStructuredText, HTML, LaTeX, markup MediaWiki, markup TWiki, markup Haddock, OPML, Emacs Org-mode, DocBook, txt2tags, EPUB dan Word docx ; dan itu bisa menulisteks biasa, markdown, reStructuredText, XHTML, HTML 5, LaTeX (termasuk beamer slide shows), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, markup MediaWiki, markup DokuWiki, markah Haddock, EPUB (v2B2) atau v3), FictionBook2, Tekstil, halaman manual groff, Emacs Org-Mode, AsciiDoc, InDesign ICML, dan Slidy, Slideous, DZSlides, mengungkapkan.js atau slide show S5 HTML. Itu juga dapat menghasilkan output PDF pada sistem di mana LaTeX diinstal.


Seperti yang disarankan @evilsoup, ini mungkin berhasil:

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

Ya, Anda dapat menggunakan perintah libreoffice dengan --outdir, tetapi output html tidak selalu bekerja seperti itu ...

Saya memberikan tes cepat ini, dan tampaknya berhasil, selain Pandoc menabrak karena gambar gif dalam dokumen tersenyum

Wilf
sumber
Um .... Word docx ada di sana dalam teks yang Anda kutip (tepat setelah OpenDocument dan ODT). Yang mengatakan, docx masih bukan format yang terdokumentasi dengan baik dan karenanya, kompatibilitas yang sebenarnya di dunia terbuka adalah .... jerawatan, haruskah kita katakan, dan saran Anda untuk LibreOffice (bersama dengan perbedaan format ) adalah baik.
SuperMagic
@ SuperMagic - itu, dalam bit itu bisa menulis ke ... Hightlighted untuk membuatnya lebih mudah.
Wilf
1
Jika Anda benar - benar menginginkan PDF pandoc-style (sebenarnya buatan LaTeX), Anda juga dapat menggunakan LibreOffice untuk mengonversi docx ke html, dan kemudian menggunakannya sebagai input untuk pandoc (tergantung pada kompetensi orang yang membuat dokumen asli, Anda mungkin perlu menghapus banyak <BR>s dari html).
evilsoup
1
Pada OSX, executable disebut soffice dan dapat ditemukan di /Applications/LibreOffice.app/contents/MacOS/bin. Rincian lebih lanjut dapat ditemukan di sini: ask.libreoffice.org/en/question/12084/…
Tim Saylor
2
Pandoc sekarang mencantumkan Word docx sebagai format yang didukung dalam dokumentasi.
cledoux
12

Ini masih muncul pada pencarian google jadi saya ingin mencatat ini: pandoc tidak dapat membaca docx ketika pertanyaan ini diajukan (kesalahannya adalah ketika mencoba membaca file biner) tetapi karena versi 1.13 dapat, dan ia melakukan pekerjaan yang cukup bagus.

jkr
sumber
2
Pandoc tidak mempertahankan format desain aslinya. Lihat posting ini: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro