Jak przekonwertować plik ODT na plik PDF?


Odpowiedzi:


68

Po prostu otwórz dokument z libre office i wybierz Eksportuj jako PDF ... :

wprowadź opis zdjęcia tutaj

W przypadku rozwiązania wiersza poleceń istnieje unoconv, Zainstaluj NAME 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).


3
dzięki za wspomnienie unoconv, to świetnie!
Boris Däppen

1
dla tych, którzy zastanawiają się, jakie są zalety i wady wiersza poleceń Unoconv vs. Libreoffice, ten problem może pomóc: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber

@Takkat unoconv nie wydaje się znajdować lokalizacji libreoffice5 na MacOS Sierra unoconv: Cannot find a suitable office installation on your system., dlatego jest bezużyteczny :(
SebMa

87

Możesz również użyć wiersza polecenia libreofficedo 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

Kolejnym argumentem przemawiającym za użyciem wiersza poleceń jest to, że na przykład w moim przypadku GUI nagle zaczęło tworzyć wadliwe pliki PDF, ale wiersz poleceń nadal działa jak urok.
Hermann Ingjaldsson

4
Thi9s działa, ale ma problem: jeśli GUI jest otwarte, polecenie nic nie zrobi (nawet nie wyświetli błędu). Brzydki, ale z tego obejścia można otworzyć nową instancję: --env:UserInstallation=file:///path/to/some/directory.
tokland

1
@tokland: Istnieje raport o błędzie
Mechaniczny ślimak

1
Udało mi się również uzyskać konwersję partii unoconv. Na przykład z unoconv -f pdf *.pptpowodzeniem użyłem linii .
XavierStuvw,

2
dla tych, którzy zastanawiają się, jakie są zalety i wady wiersza poleceń Unoconv vs. Libreoffice, ten problem może pomóc: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber

8

Oto kilka dodatkowych szczegółów na temat metody „non-GUI”.

  1. 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ć.

  2. Nie sądzę, że istnieje plik binarny nazwany libreofficejedną 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/sofficewskazuje tę lokalizację.

  3. W większości przypadków parametry --headless --convert-to pdfnie są wystarczające. Musi to być:

    --headless --convert-to pdf:writer_pdf_Export
    

    Pamiętaj, aby dokładnie przestrzegać tej wielkiej litery!

  4. 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.

  5. Upewnij się również, że określony przez --outdir /pdfCiebie 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
    
  6. 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, sofficektó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:

  7. 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.

  8. Spróbuj ponownie. Czy to działa z prostym DOCX?

  9. Jeśli to znowu nie działa, powtórz krok 7, ale tym razem zapisz jako ODT.

  10. Powtórz krok 8, ale tym razem odwołaj się do ODT.

  11. Ostatni: użyj pełnej ścieżki do soffice, do soffice.bini do libreofficekażdego z -hparametrem:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Dostajesz tutaj wyjście?
    • Dla którego z trzech plików binarnych / dowiązań symbolicznych?
    • Zapisz wyniki.
    • Powiedz nam swoje wyniki !!!
       

    Porównaj je z użytym wierszem poleceń:

    • Czy są jakieś zmiany w nazwach parametrów, wielkich literach, liczbie użytych myślników itp.?
       

    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.
    
  12. Dodaj jeszcze jeden argument do wiersza poleceń, aby wymusić zastosowanie filtra wejściowego podczas sofficeotwierania 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"
    

FWIW, TDF bug 37531 został oznaczony jako rozwiązany / stała
myrdd

4

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?


2
Mam tylko nadzieję, że taka funkcja jak „lipreoffice” będzie również dostępna w OSX. Czasami mam tak krótkie ręce, kiedy muszę korzystać z Maca.
Léo Léopold Hertz 준영

2

Uwaga: postanowiłem usunąć odpowiedź z tego pytania i opublikować tutaj zmodyfikowaną wersję, gdy zdałem sobie sprawę, że unoconvnie radzi sobie z pswplikami w ogóle i nie udało mi się przekonwertować ich na inne formaty. Nie mogą być również problemy docxi xlsxformatów.


Jednak w Libreofficepeł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ć libreofficenarzędzia do konwersji wiersza polecenia lub unoconv , które jest dostępne w repozytoriach. Uważam, że unoconvjest 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 cdprzejść 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ń odti pdfna 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 unoconvlub odwiedzając strony Ubuntu online .


1

Kolejny skrypt Nautilusa

Ten bardzo prosty i lekki skrypt Nautilus służy unoconvdo 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

1

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ć.

Przykładowe polecenia

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.


Sprawdź czwarty akapit od góry. Wydaje się niekompletny.
DK Bose

@DKBose: Thx, gotowe.
Kurt Pfeifle
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.