Odpowiedzi:
Po prostu otwórz dokument z libre office i wybierz Eksportuj jako PDF ... :
W przypadku rozwiązania wiersza poleceń istnieje unoconv, który konwertuje pliki z wiersza poleceń:
unoconv -f pdf mydocument.odt
Uwaga: Począwszy od wersji Ubuntu 11.10 unoconv zależy od pakietu Libre Office. Poprzednie wersje unoconv (z Ubuntu <= 11.04) zależą od Open Office (ale będzie działać również z Libre Office).
unoconv
, to świetnie!
unoconv: Cannot find a suitable office installation on your system.
, dlatego jest bezużyteczny :(
Możesz również użyć wiersza polecenia libreoffice
do swoich celów. Daje to przewagę konwersji wsadowej. Ale możliwe są także pojedyncze pliki. W tym przykładzie wszystkie pliki ODT w bieżącym katalogu są konwertowane na format PDF:
libreoffice --headless --convert-to pdf *.odt
Uzyskaj więcej informacji na temat opcji wiersza polecenia, korzystając z:
man libreoffice
--env:UserInstallation=file:///path/to/some/directory
.
unoconv
. Na przykład z unoconv -f pdf *.ppt
powodzeniem użyłem linii .
Oto kilka dodatkowych szczegółów na temat metody „non-GUI”.
Możesz użyć tej metody nie tylko do konwersji plików ODT do formatu PDF. Będzie również działał dla plików MS Word DOCX (będzie działał tak samo, jak LibreOffice jest w stanie obsłużyć konkretny ODT) i ogólnie wszystkie typy plików, które LibreOffice może otworzyć.
Nie sądzę, że istnieje plik binarny nazwany libreoffice
jedną z innych sugerowanych odpowiedzi. Istnieje jednak soffice(.bin)
- plik binarny, którego można użyć do uruchomienia LibreOffice z wiersza poleceń. Zwykle znajduje się w /usr/lib/libreoffice/program/
; i bardzo często dowiązanie symboliczne /usr/bin/soffice
wskazuje tę lokalizację.
W większości przypadków parametry --headless --convert-to pdf
nie są wystarczające. Musi to być:
--headless --convert-to pdf:writer_pdf_Export
Pamiętaj, aby dokładnie przestrzegać tej wielkiej litery!
Następnie polecenie nie będzie działać, jeśli w systemie jest już uruchomiona instancja interfejsu GUI LibreOffice. Jest to spowodowane błędem # 37531, znanym od 2011 roku . Dodaj ten dodatkowy parametr do swojego polecenia:
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
Stworzy to nowe, oddzielne środowisko, z którego będzie mogła korzystać druga, bezgłowa instancja LO bez ingerowania w prawdopodobnie działającą pierwszą instancję LO GUI uruchomioną przez tego samego użytkownika.
Upewnij się również, że określony przez --outdir /pdf
Ciebie plik istnieje i masz do niego uprawnienia do zapisu. Lub raczej użyj innego katalogu wyjściowego. Nawet jeśli jest to tylko pierwsza runda testowania i debugowania:
$ mkdir ${HOME}/lo_pdfs
W związku z tym:
/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
Działa to dla mnie na Mac OS X Yosemite 10.10.5 z LibreOffice wer. 5.1.2.2 (używając mojej specyficznej ścieżki do pliku binarnego, soffice
który i tak będzie inny na Ubuntu ...). Działa również na Debian Jessie 8.0 (przy użyciu ścieżki /usr/lib/libreoffice/program/soffice
). Niestety, nie można teraz przetestować na Ubuntu ....
Jeśli to wszystko nie działa, podczas próby przetworzenia DOCX:
Może to być problem z konkretnym plikiem DOCX, z którym wypróbujesz polecenie ... Więc najpierw utwórz bardzo prosty dokument DOCX. Użyj do tego samego LibreOffice. Napisz „Hello World!” na skądinąd pustej stronie. Zapisz jako DOCX.
Spróbuj ponownie. Czy to działa z prostym DOCX?
Jeśli to znowu nie działa, powtórz krok 7, ale tym razem zapisz jako ODT.
Powtórz krok 8, ale tym razem odwołaj się do ODT.
Ostatni: użyj pełnej ścieżki do soffice
, do soffice.bin
i do libreoffice
każdego z -h
parametrem:
$ /path/to/libreoffice -h # if that path exists, which I doubt!
$ /path/to/soffice -h
$ /path/to/soffice.bin -h
Porównaj je z użytym wierszem poleceń:
Dla porównania, moje własne wyjście (Mac OS X) jest tutaj:
$ /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.
Dodaj jeszcze jeden argument do wiersza poleceń, aby wymusić zastosowanie filtra wejściowego podczas soffice
otwierania pliku DOCX:
--infilter="Microsoft Word 2007/2010/2013 XML"
lub
--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"
Skrypt Nautilus
Ten skrypt wykorzystuje libreoffice do konwersji plików zgodnych z LibreOffice na 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
Aby uzyskać instrukcje instalacji, zobacz tutaj: Jak mogę zainstalować skrypt Nautilus?
Uwaga: postanowiłem usunąć odpowiedź z tego pytania i opublikować tutaj zmodyfikowaną wersję, gdy zdałem sobie sprawę, że unoconv
nie radzi sobie z psw
plikami w ogóle i nie udało mi się przekonwertować ich na inne formaty. Nie mogą być również problemy docx
i xlsx
formatów.
Jednak w Libreoffice
pełni obsługuje wiele typów plików; pełna dokumentacja jest dostępna na oficjalnej stronie, która wyszczególnia prawidłowe formaty wejściowe i wyjściowe.
Możesz użyć libreoffice
narzędzia do konwersji wiersza polecenia lub unoconv , które jest dostępne w repozytoriach. Uważam, że unoconv
jest bardzo przydatna i prawdopodobnie tego właśnie chcesz. Mimo że Takkat krótko wspomniał unoconv
, pomyślałem, że przydałoby się podać trochę więcej szczegółów i jednowierszowej konwersji partii.
Za pomocą terminala można cd
przejść do katalogu zawierającego pliki, a następnie przekonwertować je wszystkie, uruchamiając jeden wiersz:
for f in *.odt; do unoconv -f pdf "${f/%pdf/odt}"; done
(Ten jeden wiersz jest modyfikacją mojego skryptu tłumaczenia opisanego w tej odpowiedzi .)
Jeśli później chcesz użyć innych formatów plików, po prostu zamień odt
i pdf
na inne obsługiwane formaty wejściowe i wyjściowe. Obsługiwane formaty typu pliku można znaleźć, wprowadzając unoconv -f odt --show
. Aby przekonwertować plik jednorazowego użytku, na przykład unoconv -f pdf myfile.odt
.
Więcej informacji o programie i jego opcjach można znaleźć, wchodząc do terminalu man unoconv
lub odwiedzając strony Ubuntu online .
Ten bardzo prosty i lekki skrypt Nautilus służy unoconv
do konwersji wybranych plików zgodnych z LibreOffice do formatu 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
Dodam nową odpowiedź, ponieważ w ostatnim czasie Pandoc otworzył szereg nowych ścieżek konwersji, uzyskując możliwość odczytu plików ODT.
Kiedy Pandoc czyta w formacie pliku, konwertuje go na format wewnętrzny, „natywny” (który jest formą JSON).
Ze swojej natywnej formy może następnie wyeksportować dokument do wielu innych formatów. Nie tylko PDF, ale także DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki i co nie ...
Ponieważ tutaj pożądanym formatem wyjściowym jest PDF, mamy inny wybór różnych ścieżek, które Pandoc nazywa silnikiem pdf . Oto lista obecnie dostępnych silników PDF (dotyczy Pandoc v2.7.2 i nowszych - poprzednie wersje mogą obsługiwać tylko mniejszą listę):
pdflatex: Wymaga to zainstalowania LaTeXa oprócz Pandoc.
xelatex: wymaga XeLaTeX być dodatkowo zainstalowane na Pandoc (dostępny także jako dodatkowy pakiet ogólnych dystrybucji TeXowych ).
kontekst: Wymaga zainstalowania ConTeXt oprócz Pandoc; ConTeXt jest dostępny jako dodatkowy pakiet do większości ogólnych dystrybucji TeX ).
lualatex: wymaga LuaTeX być dodatkowo zainstalowane na Pandoc (dostępny także jako dodatkowy pakiet ogólnych dystrybucji TeXowych ).
pdfroff: Wymaga to zainstalowania GNU Roff oprócz Pandoc.
wkhtml2pdf: Wymaga to wkhtmltopdf być zainstalowane oprócz Pandoc.
Książę: To wymaga PrinceXML być zainstalowane oprócz Pandoc.
weasyprint: Wymaga to weasyprint być zainstalowane oprócz Pandoc.
Istnieje kilka nowych i nowszych silników PDF zintegrowanych teraz z Pandoc, których sam jeszcze nie używałem i których obecnie nie mogę opisać bardziej szczegółowo: tektoniczna i lateksowa .
OSTRZEŻENIE: Nie oczekuj, że wygląd twojego oryginalnego dokumentu będzie identyczny we wszystkich wydrukach PDF z podglądem wydruku lub eksportem PDF ODT! Pandoc, gdy konwersja nie zachowuje układów , zachowuje zawartość i strukturę dokumentów: akapity pozostają akapitami, podkreślone słowa pozostają podkreślone, nagłówki pozostają nagłówkami itp. Ale ogólny wygląd może się znacznie zmienić.
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
Kontekst:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=context
GNU troff:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdfroff
wkhtmltopdf:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=wkhtml2pdf
PrinceXML:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=prince
weasyprint:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=weasyprint
Powyższe polecenia są najbardziej podstawowe do konwersji. W zależności od wybranego silnika PDF może istnieć wiele innych opcji kontrolujących wygląd wyjściowego pliku PDF. Na przykład następujące dodatkowe parametry mogą zostać dodane do wszystkich ścieżek prowadzących przez LaTeX:
-V geometry:"paperwidth=23.3cm, paperheight=1000pt, margin=11.2mm, top=2cm"
który użyje niestandardowego rozmiaru strony (nieco większego niż DIN A4) z marginesami 2 cm na górnej krawędzi i 1,12 cm na pozostałych trzech krawędziach.