แปลง. docx เป็น. pdf ด้วย pandoc


19

ฉันพยายามแปลง. docx ที่ได้รับทางไปรษณีย์เป็น pdf ที่ถูกต้องโดยใช้ pandoc (ฉันใช้ 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

ฉันจะแปลง. docx นี้เป็น pdf ด้วย pandoc ได้อย่างไร


ทำไมคุณไม่ใช้Zamzar - สักครู่ ... ฉันต้องใช้Kingsoftเพื่อแก้ไขงานของฉันแม้ว่ามันอาจผิดกฎหมายที่จะใช้ในอเมริกาเหนือ ...
Wilf

ฉันขอแนะนำให้iconvระบุชุดอักขระต้นฉบับโดยใช้-fแฟล็ก ตัวอย่างเช่นiconv -f ISO-8859-15 -t utf-8 file.docxอาจใช้งานได้ ไม่ทราบว่ารูปแบบของไฟล์. docx คืออะไร
derobert

@ ฉันจะลอง ผลลัพธ์ไม่ถูกต้อง (ปกติ Zamzar ทำงานของเขาได้ดีมาก แต่ไม่ใช่สำหรับไฟล์นี้)
ppr

1
@ Wilf ขอบคุณ (แพนโดกมีพลังมากบางครั้งฉันก็ลืมไปว่ามันมีข้อ จำกัด )
ppr

2
@derobert: การเรียกใช้ไฟล์iconvโดยตรง.docxไม่น่าจะทำงานได้ iconvสมมติว่าอินพุตเป็นไฟล์ข้อความในบางรูปแบบที่ระบุหรืออนุมาน .docxไฟล์เป็นจริงไฟล์ซิป (ที่เก็บบีบอัด) ที่มี (ส่วนใหญ่) ไฟล์ XML คุณอาจโชคดีที่มีการคลายซิป.docxไฟล์เรียกใช้iconvบนไฟล์ที่เป็นส่วนประกอบจากนั้นทำการซิปไฟล์ทุกอย่างกลับเป็นไฟล์ใหม่.docxแต่ฉันจะไม่วางเดิมพัน สิ่งหนึ่งไฟล์ xml ที่มีเนื้อหาจริงของเอกสารระบุการเข้ารหัส: encoding="UTF-8"ตัวอย่างเช่น
Keith Thompson

คำตอบ:


16

ในเอกสารที่นี่ , .docxไม่ได้ระบุว่าเป็นที่รองรับการป้อนข้อมูล :

Pandoc เป็นไลบรารี Haskell สำหรับการแปลงจากรูปแบบมาร์กอัปหนึ่งเป็นอีกรูปแบบหนึ่งและเป็นเครื่องมือบรรทัดคำสั่งที่ใช้ไลบรารีนี้ มันสามารถอ่านมาร์กดาวน์และ (ส่วนย่อยของ) สิ่งทอ, reStructuredText, HTML, LaTeX, มาร์กอัป MediaWiki, มาร์กอัป Haddock, OPML และ DocBook; และมันสามารถเขียน ข้อความธรรมดา, markdown, reStructuredText, XHTML, HTML 5, LaTeX (รวมถึงการแสดงสไลด์บีมเมอร์), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, docx GNU, Texinfo GNU Texinfo ), FictionBook2, สิ่งทอ, หน้าคน Groff, Emacs Org-Mode, AsciiDoc และ Slidy, Slideous, DZSlides, reve.js หรือการแสดงสไลด์ S5 HTML นอกจากนี้ยังสามารถสร้างเอาต์พุต PDF บนระบบที่ติดตั้ง LaTeX

ลองใช้อย่างอื่นเช่นLibreofficeซึ่งสามารถทำ docx ได้ตราบใดที่คุณไม่สนใจข้อผิดพลาดในการจัดรูปแบบเล็กน้อย

แก้ไข:

คำอธิบายตอนนี้บอกว่าตอนนี้ Pandoc ดูเหมือนว่าจะสนับสนุนการอ่านจาก Word DOCX (เช่นเดียวกับ DocBook และรูปแบบอื่น ๆ ไม่กี่):

Pandoc เป็นไลบรารี Haskell สำหรับการแปลงจากรูปแบบมาร์กอัปหนึ่งเป็นอีกรูปแบบหนึ่งและเป็นเครื่องมือบรรทัดคำสั่งที่ใช้ไลบรารีนี้ มันสามารถอ่านมาร์กดาวน์และ (ส่วนย่อยของ) สิ่งทอ, reStructuredText, HTML, LaTeX, มาร์กอัป MediaWiki, มาร์กอัป TWiki, มาร์กอัป Haddock, OPML, Emacs Org โหมด, DocBook, txt2tags, EPUB และ Word docx ; และมันสามารถเขียนข้อความธรรมดา, markdown, reStructuredText, XHTML, HTML 5, LaTeX (รวมถึงการแสดงสไลด์บีมเมอร์), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, docx, GNU Texinfo, MediaWiki markup, Haddockup, EPUBV2 หรือ v3), FictionBook2, สิ่งทอ, หน้าคน Groff, Emacs Org-Mode, AsciiDoc, InDesign ICML และ Slidy, Slideous, DZSlides, เปิดเผย.jsหรือ S5 HTML การนำเสนอภาพนิ่ง นอกจากนี้ยังสามารถสร้างเอาต์พุต PDF บนระบบที่ติดตั้ง LaTeX


ตามที่ @evilsoup แนะนำสิ่งนี้อาจใช้งานได้:

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

ใช่คุณสามารถใช้คำสั่ง libreoffice ด้วย--outdirแต่เอาท์พุท html ไม่ได้ทำงานอย่างนั้น ...

ฉันให้การทดสอบนี้อย่างรวดเร็วและดูเหมือนว่าจะทำงานได้นอกเหนือจาก Pandoc หยุดทำงานเนื่องจากรูปภาพ gif ในเอกสาร ยิ้ม


อืม .... Word docxอยู่ที่นั่นในข้อความที่ยกมาของคุณ (หลังจาก OpenDocument และ ODT) ที่กล่าวว่า docx ยังคงเป็นรูปแบบเอกสารที่ไม่ดีดังนั้นความเข้ากันได้จริงในโลกเปิดคือ .... แน่นอนเราจะพูดและข้อเสนอแนะของคุณสำหรับ LibreOffice (รวมถึงความแตกต่างของการจัดรูปแบบ) นั้นดี
SuperMagic

@ SuperMagic - มันคือในบิตมันสามารถเขียนถึง ... ไฮไลต์มันเพื่อให้ง่ายขึ้น
วิลฟ์

1
หากคุณจริงๆต้องการ pandoc สไตล์ (ที่จริงน้ำยางทำ) PDF, คุณยังสามารถใช้ LibreOffice การแปลง docx เพื่อ HTML, และจากนั้นใช้ที่เป็น input สำหรับ pandoc (ขึ้นอยู่กับความสามารถของคนที่ทำเอกสารเดิม คุณอาจต้องลบ<BR>s ออกจาก html)
evilsoup

1
บน OSX ไฟล์เรียกทำงานนั้นเรียกว่า soffice และสามารถพบได้ใน /Applications/LibreOffice.app/contents/MacOS/bin รายละเอียดเพิ่มเติมสามารถดูได้ที่นี่: ask.libreoffice.org/en/question/12084/ …
ทิม Saylor

2
Pandoc แสดง Word docx เป็นรูปแบบที่รองรับในเอกสาร
cledoux

12

นี้ยังคงเกิดขึ้นในการค้นหาของ Google ดังนั้นฉันต้องการที่จะวางไว้ในบันทึก: แพนโดกไม่สามารถอ่าน docx เมื่อถามคำถามนี้ (ข้อผิดพลาดมาจากการพยายามอ่านไฟล์ไบนารี) แต่เนื่องจากรุ่น 1.13 สามารถทำได้และมันเป็น งานที่ดีงามของมัน


2
อย่างไรก็ตาม Pandoc ไม่รักษารูปแบบการออกแบบดั้งเดิมไว้ ดูโพสต์นี้: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.