Cách chuyển đổi ODT libreoffice sang PDF trong bash


7

Tôi đang sử dụng libreoffice trong CentOS 6. Tôi có thể chuyển đổi tệp ODT sang PDF bằng:

libreoffice --headless --convert-to pdf *.odt nhưng vấn đề là nó chỉ hoạt động khi không có tài liệu nào được mở trong libreoffice.

Khi tôi chỉ định --env:UserInstallation=file:///path/to/some/directory như được đề xuất trong một trong những ý kiến ​​của câu hỏi này , nó không có ích.

Tôi đang làm gì sai? Việc đóng tất cả các trường hợp libreoffice trước khi chạy lệnh before là một điều phiền toái.

Câu trả lời:


7

Điều đó khó có thể hoạt động, vì gợi ý trong bình luận là không đầy đủ (bạn không thể chỉ định một số thư mục) và không chính xác ( --env:...nên là -env:... Đây là những gì tôi khuyên bạn nên làm:

  1. Dừng tất cả các trường hợp của libreoffice
  2. Bắt đầu libreoffice từ dòng lệnh mà không chỉ định --headless:

    libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt
    

    bạn nên thay thế /home/username bằng thư mục chính của mình (và điều chỉnh .confignếu bạn không có trên CentOS, tôi đã làm điều này trên Ubuntu và Linux Mint). Ở trên sẽ tạo một thư mục cấu hình mới cho libreoffice thay thế trong thư mục .config của bạn, mà không có lỗi nào bạn sẽ không tìm thấy java.

  3. Thoát khỏi trường hợp đó của libreoffice
  4. Thư mục đó /home/username/.config/libreoffice-alt bây giờ đã được tạo cho bạn.

Bây giờ bắt đầu một cái khác libreofficetừ dòng lệnh (làm như vậy cho phép bạn thấy một số thông báo hữu ích nếu xảy ra sự cố khi bắt đầu phiên bản thứ hai), mà không có -env:..., và trong khi đó vẫn đang chạy bắt đầu chuyển đổi bằng cách sử dụng:

libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt --headless --convert-to pdf *.odt

Tái bút: Tôi cũng có .config trên CentOS
Johan

Thay vì dừng tất cả các trường hợp, bạn chỉ cần đăng nhập với tư cách người dùng khác, tạo các tệp .config và sao chép chúng vào thư mục nhà riêng của bạn.
Ole Tange

Trên máy Ubuntu 16.04, tôi chỉ chạy libreoffice --headless --convert-to pdf <filename>.odtvà nó đã làm được, không cần các bước chuẩn bị. Nó đã in một cảnh báo về Java tho.
Kyle

8

Một cách tiếp cận có thể là cài đặt unoconv(nếu chưa được cài đặt) và

unoconv file.odt

Xin vui lòng xem người đàn ông unoconvđể biết chi tiết

unoconvlà một tiện ích dòng lệnh có thể chuyển đổi bất kỳ định dạng tệp nào mà LibreOffice có thể nhập, sang bất kỳ định dạng tệp nào mà LibreOffice có khả năng xuất. unoconvsử dụng các ràng buộc UNO của LibreOffice để chuyển đổi không tương tác ....

Trong một số nền tảng cũng cần phải cài đặt libreoffice-headless\ cảm ơn {Aaron}


Theo CentOS7, tôi cũng phải thêm gói libreoffice-headlessđể tự động hóa. Nếu người dùng chưa bao giờ sử dụng nó trước đó, cuộc gọi đầu tiên sẽ unoconvthất bại với lỗi 81 sau khi tạo một loạt các tệp trong đó ~/.config/.
Aaron D. Marasco

1
@ AaronD.Maraco, cảm ơn bạn rất nhiều vì thông tin quan trọng này! Có lẽ có một sự phụ thuộc bị thiếu trong tập tin spec. Tôi sẽ thêm mẹo của bạn vào câu trả lời.
JJoao

1
@JJoao, nếu bạn là người dùng CentOS, bạn nên báo cáo phát hiện của mình dưới dạng báo cáo lỗi.
vonbrand

Không phải là một phụ thuộc spec ... chỉ là một trường hợp sử dụng. Sự cố lỗi 81 được cho là đã được sửa nhưng tôi không biết phiên bản nào; Tôi đoán CentOS chưa có nó.
Aaron D. Marasco

2

Đây là một cách tiếp cận hoàn toàn khác nhau.

Có thể, bởi vì trong thời gian gần đây, một loạt các đường dẫn chuyển đổi mới đã được mở bởi khả năng mới có được của Pandoc để đọc các tệp ODT.

Khi Pandoc đọc theo định dạng tệp, nó sẽ chuyển đổi nó thành định dạng bên trong, "bản địa" (là một dạng của JSON).

Từ dạng nguyên gốc của nó, sau đó nó có thể xuất tài liệu thành một loạt các định dạng khác. Không chỉ PDF, mà cả DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki và những gì không ...

Vì ở đây định dạng đầu ra mong muốn là PDF, chúng tôi có một lựa chọn khác về các đường dẫn khác nhau, được cung cấp bởi những gì Pandoc đang gọi là một công cụ pdf . Dưới đây là danh sách các công cụ PDF hiện có (hợp lệ cho Pandoc v2.7.2 trở lên - các phiên bản trước chỉ có thể hỗ trợ một danh sách nhỏ hơn):

  • pdflatex: Điều này đòi hỏi LaTeX phải được cài đặt ngoài Pandoc.

  • xelatex: Điều này đòi hỏi XeLaTeX phải được cài đặt ngoài Pandoc (cũng có sẵn dưới dạng gói bổ sung cho các bản phân phối TeX chung ).

  • bối cảnh: Điều này đòi hỏi ConTeXt phải được cài đặt ngoài Pandoc; ConTeXt có sẵn dưới dạng gói bổ sung cho hầu hết các bản phân phối TeX chung ).

  • lualatex: Điều này đòi hỏi LuaTeX phải được cài đặt ngoài Pandoc (cũng có sẵn dưới dạng gói bổ sung cho các bản phân phối TeX chung ).

  • pdfroff: Điều này đòi hỏi GNU Roff phải được cài đặt cùng với Pandoc.

  • wkhtml2pdf: Điều này đòi hỏi phải cài đặt wkhtmltopdf ngoài Pandoc.

  • hoàng tử: Điều này đòi hỏi PrinceXML phải được cài đặt ngoài Pandoc.

  • weasyprint: Điều này đòi hỏi weasyprint phải được cài đặt ngoài Pandoc.

Có một số công cụ PDF mới hơn và mới hơn hiện được tích hợp vào Pandoc, mà tôi chưa sử dụng cho mình và hiện tại tôi không thể mô tả chi tiết hơn: kiến tạolatexmk .

CẢNH BÁO: Đừng hy vọng rằng sự xuất hiện của tài liệu gốc của bạn sẽ giống hệt nhau trong tất cả các đầu ra PDF với bản xem trước in hoặc xuất PDF của ODT! Pandoc, khi chuyển đổi không bảo tồn bố cục , nó bảo tồn nội dungcấu trúc của tài liệu: đoạn văn vẫn là đoạn văn, từ nhấn mạnh vẫn được nhấn mạnh, tiêu đề vẫn là tiêu đề, v.v. Nhưng nhìn tổng thể có thể thay đổi đáng kể.

Lệnh ví dụ

pdflatex:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdflatex

XeLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=xelatex

LuaLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=lualatex

Bối cảnh:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=context

Troff GNU:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdfroff

wkhtmltopdf:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=wkhtml2pdf

Hoàng tửXML:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=prince

dấu vết:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=weasyprint

Các lệnh trên là cơ bản nhất cho việc chuyển đổi. Tùy thuộc vào công cụ PDF bạn chọn, có thể có nhiều tùy chọn khác có thể để kiểm soát sự xuất hiện của tệp PDF đầu ra. Ví dụ: các tham số bổ sung sau có thể được thêm vào tất cả các đường dẫn định tuyến thông qua LaTeX:

 -V geometry:"paperwidth=23.3cm, paperheight=1000pt, margin=11.2mm, top=2cm"

sẽ sử dụng kích thước trang tùy chỉnh (lớn hơn một chút so với DIN A4) với lề 2cm ở cạnh trên và 1,12cm ở ba cạnh còn lại).


Thật không may pandoc, không hỗ trợ mọi định dạng libreoffice; ví dụ .ods(định dạng bảng tính) không được hỗ trợ.
Granitosaurus

@Granitosaurus: Câu hỏi là về ODT, do đó câu trả lời này là phù hợp.
Kurt Pfeifle

Ồ, tôi chưa bao giờ ngụ ý rằng nó không phù hợp, chỉ là nó không may là pandoc không hỗ trợ nhiều định dạng libreoffice khác.
Granitosaurus

@Granitosaurus: Pandoc là một dự án Phần mềm OpenSource. Vì vậy, bạn có thể dễ dàng đóng góp. Nếu bạn không lập trình các tính năng bổ sung vào Pandoc, ít nhất bạn có thể tìm thấy dự án của họ trên Github và có thể tự do gửi Yêu cầu tính năng vào trình theo dõi lỗi của họ. Đó cũng là những gì đã kích hoạt hỗ trợ Pandoc cho đầu ra PowerPoint được thêm vào ...
Kurt Pfeifle
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.