Chuyển đổi một .docx thành .pdf với pandoc


19

Tôi đang cố gắng chuyển đổi một .docx nhận được qua thư thành pdf chính xác bằng cách sử dụng pandoc (Tôi đang sử dụng GNU / Linux).

Tôi có một lỗi liên quan đến mã hóa ký tự:

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

Tôi đã cố gắng xác định mã hóa:

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

Tôi hơi ngạc nhiên bởi charset=binary(tôi đã mong đợi charset=iso8859-15). Tuy nhiên tôi đã cố gắng chuyển đổi .docx thành utf8 và nó không hoạt động:

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

Tôi có cùng một lỗi với dòng lệnh từ tài liệu pandoc :

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

Làm cách nào tôi có thể chuyển đổi .docx này sang pdf bằng pandoc?


Tại sao bạn không sử dụng Zamzar - cho một lần tắt ... Tôi phải sử dụng Kingsoft để chỉnh sửa tác phẩm của mình, mặc dù việc sử dụng ở Bắc Mỹ có thể là bất hợp pháp ...
Wilf

Tôi đề nghị cung cấp iconvmột bộ ký tự nguồn, sử dụng -fcờ. Ví dụ, iconv -f ISO-8859-15 -t utf-8 file.docxcó thể làm việc. Mặc dù vậy, không biết định dạng của tệp .docx là gì.
derobert 17/12/13

@wilf Mình đã thử. Đầu ra không chính xác (thông thường, Zamzar thực hiện công việc của mình rất tốt nhưng không phải cho tệp này).
ppr 17/12/13

1
@wilf cảm ơn (pandoc rất mạnh mẽ đôi khi tôi quên nó có những hạn chế).
ppr 17/12/13

2
@derobert: Chạy iconvtrực tiếp trên một .docxtệp không có khả năng hoạt động. iconvgiả định rằng đầu vào của nó là một tệp văn bản ở một số định dạng được chỉ định hoặc suy ra. Một .docxtệp thực sự là một tệp zip (một tệp lưu trữ nén) chứa (hầu hết) các tệp xml. Bạn có thể có thể có một chút may mắn khi giải nén .docxtệp, chạy iconvtrên các tệp cấu thành và sau đó nén lại mọi thứ lại thành một tệp mới .docx, nhưng tôi sẽ không đặt cược vào nó hoạt động. Đối với một điều, tệp xml chứa nội dung thực tế của tài liệu chỉ định mã hóa của nó: encoding="UTF-8"ví dụ.
Keith Thompson

Câu trả lời:


16

Trong tài liệu ở đây , .docxkhông được liệt kê dưới dạng đầu vào tương thích :

Pandoc là một thư viện Haskell để chuyển đổi từ định dạng đánh dấu này sang định dạng khác và một công cụ dòng lệnh sử dụng thư viện này. Nó có thể đọc markdown và (tập hợp con) Dệt, tái cấu trúc, HTML, LaTeX, đánh dấu MediaWiki, đánh dấu Haddock, OPML và DocBook; và nó có thể viết văn bản đơn giản, đánh dấu, tái cấu trúc, XHTML, HTML 5, LaTeX (bao gồm trình chiếu slide), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, MediaWiki markup, EPUB (v2 ), FictionBook2, Dệt may, trang man groff, Emacs Org-Mode, AsciiDoc, và Slidy, Slideous, DZSlides, shows.js hoặc các trình chiếu HTML của S5. Nó cũng có thể tạo đầu ra PDF trên các hệ thống nơi LaTeX được cài đặt.

Hãy thử một cái gì đó khác, như Libreoffice - có thể làm docx, miễn là bạn không bận tâm đến một vài lỗi định dạng.

CHỈNH SỬA:

Mô tả bây giờ nói rằng Pandoc hiện dường như hỗ trợ đọc từ Word DOCX (cũng như DocBook và một vài định dạng khác):

Pandoc là một thư viện Haskell để chuyển đổi từ định dạng đánh dấu này sang định dạng đánh dấu khác và một công cụ dòng lệnh sử dụng thư viện này. Nó có thể đọc markdown và (các tập con của) Dệt may, reStructuredText, HTML, LaTeX, MediaWiki đánh dấu, TWiki đánh dấu, Haddock đánh dấu, OPML, Emacs Org-mode, DocBook, Txt2tags, EPUB và Word docx ; và nó có thể viếtvăn bản đơn giản, markdown, reSt cấu trúc hoặc phiên bản 3 Nó cũng có thể tạo đầu ra PDF trên các hệ thống nơi LaTeX được cài đặt.


Như @evilsoup đề xuất, điều này có thể hoạt động:

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

Có, bạn có thể sử dụng lệnh libreoffice với --outdir, nhưng đầu ra html không phải lúc nào cũng hoạt động theo cách đó ...

Tôi đã làm bài kiểm tra nhanh này và nó dường như hoạt động, ngoài việc Pandoc bị rơi do hình ảnh gif trong tài liệu cười


Ừm .... Word docx ở ngay trong văn bản được trích dẫn của bạn (ngay sau OpenDocument và ODT). Điều đó nói rằng, docx vẫn không phải là một định dạng tài liệu tốt và vì vậy, khả năng tương thích thực tế trong thế giới mở là .... đốm, chúng tôi sẽ nói, và đề xuất của bạn cho LibreOffice (cùng với sự khác biệt về định dạng ) là tốt.
SuperMagic

@SuperMagic - đó là, trong một chút, nó có thể ghi vào ... Hightlighted nó để làm cho nó dễ dàng hơn.
Wilf 17/12/13

1
Nếu bạn thực sự muốn một bản PDF theo kiểu pandoc (thực sự là do LaTeX tạo ra), bạn cũng có thể sử dụng LibreScript để chuyển đổi docx thành html, sau đó sử dụng nó làm đầu vào cho pandoc (tùy thuộc vào năng lực của người tạo tài liệu gốc, bạn có thể cần phải xóa một loạt các <BR>s khỏi html).
evilsoup 17/12/13

1
Trên OSX, tệp thực thi được gọi là soffice và có thể được tìm thấy trong /Appluggest/LibreOffice.app/contents/MacOS/bin. Thông tin chi tiết có thể được tìm thấy ở đây: ask.libreoffice.org/en/question/12084/ triệt
Tim Saylor

2
Pandoc hiện liệt kê Word docx là một định dạng được hỗ trợ trong tài liệu.
cledoux

12

Điều này vẫn xuất hiện trên các tìm kiếm của google vì vậy tôi muốn đưa nó vào hồ sơ: pandoc không thể đọc docx khi câu hỏi này được hỏi (lỗi xuất phát từ việc cố gắng đọc tệp nhị phân) nhưng từ phiên bản 1.13 thì có thể công việc khá tốt của nó


2
Pandoc không bảo tồn định dạng thiết kế ban đầu, tuy nhiên. Xem bài đăng này: github.com/jgm/pandoc/issues/2206#issuecomment-107994587
orschiro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.