Câu trả lời:
Chỉ cần mở tài liệu với văn phòng libre và chọn Xuất dưới dạng PDF ... :
Đối với một giải pháp dòng lệnh, có unoconv chuyển đổi các tệp từ dòng lệnh:
unoconv -f pdf mydocument.odt
Lưu ý: Chỉ bắt đầu từ Ubuntu 11.10 unoconv phụ thuộc vào Libre Office. Các phiên bản unoconv trước đây (từ Ubuntu <= 11.04) phụ thuộc vào Open Office (nhưng nó cũng sẽ chạy với Libre Office).
unoconv
, nó thật tuyệt!
unoconv: Cannot find a suitable office installation on your system.
, do đó, nó không thể sử dụng được :(
Bạn cũng có thể sử dụng dòng lệnh libreoffice
cho mục đích của mình. Điều đó mang lại cho bạn lợi thế của việc chuyển đổi hàng loạt. Nhưng các tập tin duy nhất cũng có thể. Ví dụ này chuyển đổi tất cả các tệp ODT trong thư mục hiện tại thành PDF:
libreoffice --headless --convert-to pdf *.odt
Nhận thêm thông tin về các tùy chọn dòng lệnh với:
man libreoffice
--env:UserInstallation=file:///path/to/some/directory
.
unoconv
là tốt. Ví dụ tôi đã sử dụng dòng unoconv -f pdf *.ppt
thành công.
Dưới đây là một vài chi tiết về phương pháp "không phải GUI".
Bạn không chỉ có thể sử dụng phương pháp này để chuyển đổi tệp ODT sang PDF. Nó cũng sẽ hoạt động đối với các tệp DOCX của MS Word (nó sẽ hoạt động tốt như LibreOffice có thể xử lý ODT cụ thể) và nói chung, tất cả các loại tệp mà LibreOffice có thể mở.
Tôi không nghĩ rằng có một nhị phân được đặt tên libreoffice
là một trong những câu trả lời khác được đề xuất. Tuy nhiên, có soffice(.bin)
- nhị phân có thể được sử dụng để khởi động LibreScript từ dòng lệnh. Nó thường nằm ở /usr/lib/libreoffice/program/
; và rất thường xuyên, một liên kết tượng trưng /usr/bin/soffice
đến vị trí đó.
Sau đó, trong hầu hết các trường hợp, các tham số --headless --convert-to pdf
là không đủ. Nó cần phải:
--headless --convert-to pdf:writer_pdf_Export
Hãy chắc chắn để làm theo chính xác viết hoa này!
Tiếp theo, lệnh sẽ không hoạt động nếu đã có phiên bản GUI LibreScript và chạy trên hệ thống của bạn. Nó được gây ra bởi lỗi # 37531, được biết đến từ năm 2011 . Thêm tham số bổ sung này vào lệnh của bạn:
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
Điều này sẽ tạo ra một môi trường mới, riêng biệt có thể được sử dụng bởi một thể hiện LO không đầu thứ hai mà không can thiệp vào một cá thể GUI LO đầu tiên có thể chạy được bắt đầu bởi cùng một người dùng.
Ngoài ra, hãy chắc chắn rằng --outdir /pdf
bạn chỉ định tồn tại và bạn có quyền ghi vào nó. Hoặc, thay vì sử dụng một dir đầu ra khác nhau. Ngay cả khi nó chỉ dành cho vòng thử nghiệm và gỡ lỗi đầu tiên:
$ mkdir ${HOME}/lo_pdfs
Vì thế:
/path/to/soffice \
--headless \
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" \
--convert-to pdf:writer_pdf_Export \
--outdir ${HOME}/lo_pdfs \
/path/to/test.docx
Điều này hoạt động với tôi trên Mac OS X Yosemite 10.10.5 với LibreOffice v5.1.2.2 (sử dụng đường dẫn cụ thể của tôi cho tệp nhị phân soffice
sẽ khác với Ubuntu ...). Nó cũng hoạt động trên Debian Jessie 8.0 (sử dụng đường dẫn /usr/lib/libreoffice/program/soffice
). Xin lỗi, không thể kiểm tra nó trên Ubuntu ngay bây giờ ....
Nếu tất cả điều này không hoạt động, khi bạn cố gắng xử lý DOCX:
Nó có thể là một vấn đề với tệp DOCX cụ thể mà bạn thử lệnh với ... Vì vậy, trước tiên hãy tạo một tài liệu DOCX rất đơn giản của riêng bạn. Sử dụng LibreScript chính nó cho việc này. Viết "Xin chào thế giới!" trên một trang trống. Lưu nó dưới dạng DOCX.
Thử lại. Nó có hoạt động với DOCX đơn giản không?
Nếu nó không hoạt động trở lại, hãy lặp lại bước 7, nhưng lưu dưới dạng ODT lần này.
Lặp lại bước 8, nhưng đảm bảo tham chiếu ODT lần này.
Lần cuối: Sử dụng đường dẫn đầy đủ đến soffice
, soffice.bin
đến libreoffice
và chạy và chạy với từng -h
tham số:
$ /path/to/libreoffice -h # if that path exists, which I doubt!
$ /path/to/soffice -h
$ /path/to/soffice.bin -h
So sánh chúng với dòng lệnh bạn đã sử dụng:
Để so sánh, đầu ra (Mac OS X) của riêng tôi ở đây:
$ /Applications/LibreOffice.app/Contents/MacOS/soffice -h
LibreOffice 5.1.2.2 d3bf12ecb743fc0d20e0be0c58ca359301eb705f
Usage: soffice [options] [documents...]
Options:
--minimized keep startup bitmap minimized.
--invisible no startup screen, no default document and no UI.
--norestore suppress restart/restore after fatal errors.
--quickstart starts the quickstart service
--nologo don't show startup screen.
--nolockcheck don't check for remote instances using the installation
--nodefault don't start with an empty document
--headless like invisible but no user interaction at all.
--help/-h/-? show this message and exit.
--version display the version information.
--writer create new text document.
--calc create new spreadsheet document.
--draw create new drawing.
--impress create new presentation.
--base create new database.
--math create new formula.
--global create new global document.
--web create new HTML document.
-o open documents regardless whether they are templates or not.
-n always open documents as new files (use as template).
--display <display>
Specify X-Display to use in Unix/X11 versions.
-p <documents...>
print the specified documents on the default printer.
--pt <printer> <documents...>
print the specified documents on the specified printer.
--view <documents...>
open the specified documents in viewer-(readonly-)mode.
--show <presentation>
open the specified presentation and start it immediately
--accept=<accept-string>
Specify an UNO connect-string to create an UNO acceptor through which
other programs can connect to access the API
--unaccept=<accept-string>
Close an acceptor that was created with --accept=<accept-string>
Use --unnaccept=all to close all open acceptors
--infilter=<filter>[:filter_options]
Force an input filter type if possible
Eg. --infilter="Calc Office Open XML"
--infilter="Text (encoded):UTF8,LF,,,"
--convert-to output_file_extension[:output_filter_name[:output_filter_options]] [--outdir output_dir] files
Batch convert files (implies --headless).
If --outdir is not specified then current working dir is used as output_dir.
Eg. --convert-to pdf *.doc
--convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
--convert-to "html:XHTML Writer File:UTF8" *.doc
--convert-to "txt:Text (encoded):UTF8" *.doc
--print-to-file [-printer-name printer_name] [--outdir output_dir] files
Batch print files to file.
If --outdir is not specified then current working dir is used as output_dir.
Eg. --print-to-file *.doc
--print-to-file --printer-name nasty_lowres_printer --outdir /home/user *.doc
--cat files
Dump text content of the files to console
Eg. --cat *.odt
--pidfile=file
Store soffice.bin pid to file.
-env:<VAR>[=<VALUE>]
Set a bootstrap variable.
Eg. -env:UserInstallation=file:///tmp/test to set a non-default user profile path.
Remaining arguments will be treated as filenames or URLs of documents to open.
Thêm một đối số nữa vào dòng lệnh của bạn để thực thi ứng dụng của bộ lọc đầu vào khi soffice
mở tệp DOCX của bạn:
--infilter="Microsoft Word 2007/2010/2013 XML"
hoặc là
--infilter="Microsoft Word 2007/2010/2013 XML"
--infilter="Microsoft Word 2007-2013 XML"
--infilter="Microsoft Word 2007-2013 XML Template"
--infilter="Microsoft Word 95 Template"
--infilter="MS Word 95 Vorlage"
--infilter="Microsoft Word 97/2000/XP Template"
--infilter="MS Word 97 Vorlage"
--infilter="Microsoft Word 2003 XML"
--infilter="MS Word 2003 XML"
--infilter="Microsoft Word 2007 XML Template"
--infilter="MS Word 2007 XML Template"
--infilter="Microsoft Word 6.0"
--infilter="MS WinWord 6.0"
--infilter="Microsoft Word 95"
--infilter="MS Word 95"
--infilter="Microsoft Word 97/2000/XP"
--infilter="MS Word 97"
--infilter="Microsoft Word 2007 XML"
--infilter="MS Word 2007 XML"
--infilter="Microsoft WinWord 5"
--infilter="MS WinWord 5"
Tập lệnh Nautilus
Tập lệnh này sử dụng libreoffice để chuyển đổi các tệp tương thích với LibreScript thành PDF.
#!/bin/bash
## PDFconvert 0.1
## by Glutanimate (https://askubuntu.com/users/81372/)
## License: GPL 3.0
## depends on python, libreoffice
## Note: if you are using a non-default LO version (e.g. because you installed it
## from a precompiled package instead of the official repos) you might have to change
## 'libreoffice' according to the version you're using, e.g. 'libreoffice3.6'
# Get work directory
base="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"
#Convert documents
while [ $# -gt 0 ]; do
document=$1
libreoffice --headless --invisible --convert-to pdf --outdir "$base" "$document"
shift
done
Để biết hướng dẫn cài đặt, xem tại đây: Làm cách nào tôi có thể cài đặt tập lệnh Nautilus?
Lưu ý: Tôi đã quyết định xóa câu trả lời của mình khỏi câu hỏi này và đăng một phiên bản sửa đổi của nó ở đây khi tôi nhận ra rằng unoconv
nó không xử lý tốt psw
các tệp và không chuyển đổi chúng thành các định dạng khác. Cũng có thể có vấn đề với docx
và xlsx
định dạng.
Tuy nhiên, Libreoffice
hỗ trợ đầy đủ nhiều loại tệp; tài liệu đầy đủ có sẵn tại trang web chính thức, trong đó nêu chi tiết các định dạng đầu vào và đầu ra hợp lệ.
Bạn có thể sử dụng libreoffice
tiện ích chuyển đổi dòng lệnh hoặc unoconv , có sẵn trong kho. Tôi thấy unoconv
rất hữu ích, và nó có lẽ là những gì bạn muốn. Mặc dù Takkat đã đề cập ngắn gọn unoconv
, tôi nghĩ rằng nó sẽ hữu ích để cung cấp thêm một số chi tiết và một lớp chuyển đổi hàng loạt.
Sử dụng thiết bị đầu cuối, bạn có thể cd
vào thư mục chứa các tệp của mình và sau đó chuyển đổi hàng loạt tất cả chúng bằng cách chạy một lớp lót như thế này:
for f in *.odt; do unoconv -f pdf "${f/%pdf/odt}"; done
(Phần một này là bản sửa đổi tập lệnh dịch của tôi được nêu trong câu trả lời này .)
Nếu sau này bạn muốn sử dụng bất kỳ định dạng tệp nào khác, chỉ cần thay thế odt
và pdf
cho bất kỳ định dạng đầu vào và đầu ra được hỗ trợ nào khác. Bạn có thể tìm thấy các định dạng được hỗ trợ cho một loại tệp bằng cách nhập unoconv -f odt --show
. Để chuyển đổi một tập tin sử dụng, ví dụ , unoconv -f pdf myfile.odt
.
Thông tin thêm về và các tùy chọn cho chương trình có thể được tìm thấy bằng cách nhập vào thiết bị đầu cuối man unoconv
hoặc bằng cách truy cập các trang web Ubuntu trực tuyến .
Tập lệnh Nautilus rất đơn giản và nhẹ này sử dụng unoconv
để chuyển đổi (các) tệp đã chọn tương thích với định dạng LibreOffice sang định dạng PDF:
#!/bin/sh
#Nautilus Script to convert selected LibreOffice-compatible file(s) to PDF
#
OLDIFS=$IFS
IFS="
"
for filename in $@; do
unoconv --doctype=document --format=pdf "$filename"
done
IFS=$OLDIFS
Tôi đang thêm một câu trả lời mới, 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 Pandoc mở ra để có được khả năng đọc các tệp ODT.
Khi Pandoc đọc theo định dạng tệp, nó 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 yêu cầu wkhtmltopdf phải được cài đặt 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ạo và latexmk .
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 dung và cấu trúc của tài liệu: đoạn văn vẫn là đoạn văn, từ được 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ể.
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).