it-swarm.dev

Polecenie `libreoffice --headless --convert-to pdf test.docx --outdir/pdf` nie działa

Muszę długo czekać po użyciu tego polecenia LibreOffice, które ma na celu przekształcenie DOCX w PDF:

libreoffice --headless --convert-to pdf test.docx --outdir /pdf

Ale nie otrzymuję żadnej odpowiedzi ani błędu. Brak konwersji pliku. Wygląda na to, że terminal wisi.

Czy jest jakiś sposób na śledzenie błędu?

47
vishal
  1. Najpierw spróbuję tego, podając bezwzględne ścieżki do polecenia.

  2. Podejrzewam, że plik binarny libreoffice nie działa - musisz zlokalizować plik binarny soffice i sprawdzić, czy to działa.

  3. Wtedy twój _--convert-to pdf_ nie jest wystarczający. Musi to być:

    _--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 znanym od 2011 r. . 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 Ciebie _--outdir /pdf_ istnieje i masz do niego uprawnienia do zapisu. Lub raczej użyj innego katalogu wyjściowego. Nawet jeśli jest to tylko pierwsze testowanie i ta runda debugowania:

    _$ mkdir ${HOME}/lo_pdfs
    _
  6. Stąd:

    _/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 w systemie Mac OS X Mavericks 10.9.5 z LibreOffice v4.4.3.2 (używając mojej specyficznej ścieżki dla binarnej soffice, która i tak będzie dla ciebie inna ...).

    Jeśli to wszystko nie działa:

  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. Ostatnie: użyj pełnej ścieżki do soffice, do _soffice.bin_ i do libreoffice i uruchom każdy z parametrem _-h_:

    _$ /path/to/libreoffice -h
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    _
    • Czy dostajesz tu nawet 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 moja własna produkcja jest tutaj:

    _$ /Applications/LibreOffice.app/Contents/MacOS/soffice -h
    
      LibreOffice 4.4.3.2 88805f81e9fe61362df02b9941de8e38a9b5fd16
    
      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 userinteraction 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.
            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, gdy soffice otworzy plik 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"
    _

Aktualizacja

LibreOffice nie może tylko konwertować DOCX na PDF w wierszu poleceń:

  • Może przetwarzać dowolny format wejściowy, który może otworzyć i „odczytać”: DOC, XLS, XLSX, PPT, PPTX, ...
  • Może konwertować na dowolny format wyjściowy, który może „zapisać”: DOC, XLS, XLSX, PPT, PPTX, ...

Oczywiście wyniki nigdy nie będą idealne, a czasem będą nawet dla ciebie nie do zaakceptowania.

Re. wyjście jako PDF:

Aby kontrolować, który komponent LibreOffice generuje dane wyjściowe PDF, możesz użyć następujących wariantów:

_--convert-to pdf:writer_pdf_Export
--convert-to pdf:calc_pdf_Export
--convert-to pdf:draw_pdf_Export
--convert-to pdf:impress_pdf_Export
--convert-to pdf:writer_web_pdf_Export
_

Re. wejście, które nie jest inne niż DOCX :

Aby wymusić filtry dla formatów wejściowych innych niż DOCX, możesz użyć (lista nie jest kompletna):

_--infilter="HTML Document"                      # for HTML input
--infilter="MediaWiki"                          # for MediaWiki input
--infilter="Text CSV"                           # for CSV spreadsheet input
--infilter="Microsoft PowerPoint 2007/2010 XML" # for PPTX input
--infilter="Microsoft PowerPoint 97/2000/XP"    # for PPT input
--infilter="Windows Metafile"                   # for WMF input
--infilter="Enhanced Metafile"                  # for EMF input
--infilter="Scalable Vector Graphics"           # for SVG input
--infilter="Microsoft Excel 2007/2010 XML"      # for XLSX input
--infilter="Microsoft Excel 97/2000/XP"         # for XLS input
--infilter="Microsoft Excel 95"                 # for some XLS input
--infilter="Microsoft Excel 5.0"                # for some XLS input
_

Re. wyjście, które nie jest nie w formacie PDF :

Aby przekonwertować na określone formaty wyjściowe, możesz użyć (lista niekompletna):

_--convert-to html:HTML
--convert-to html:draw_html_Export                 # force "Draw" to generate the HTML
--convert-to mediawiki:MediaWiki_Web               # generate MediaWiki output
--convert-to csv:"Text - txt - csv (StarCalc)"     # generate CSV spreadsheet output
--convert-to pptx:"Impress MS PowerPoint 2007 XML" # generate PPTX
--convert-to ppt:"MS PowerPoint 97"                # generate PPT
--convert-to wmf:impress_wmf_Export                # force "Impress" to generate the WMF
--convert-to wmf:draw_wmf_Export                   # force "Draw" to generate the WMF
--convert-to emf:impress_emf_Export                # force "Impress" to generate the EMF
--convert-to emf:draw_emf_Export                   # force "Draw" to generate the EMF
--convert-to svg:impress_svg_Export                # force "Impress" to generate the SVG
--convert-to svg:draw_svg_Export                   # force "Draw" to generate the SVG
--convert-to xlsx:"Calc MS Excel 2007 XML"         # generate XLSX
--convert-to xls:"MS Excel 97"                     # generate XLS like Excel 97
--convert-to xls:"MS Excel 95"                     # generate XLS like Excel 95
--convert-to xls:"MS Excel 5.0/95"                 # generate XLS like Excel 5.0/95
_
91
Kurt Pfeifle

Może to zabrzmi głupio, ale cierpiałem z tego powodu: w Ubuntu 14.04 nie wystarczy zainstalować tylko pakiet libreoffice-core lub -common, aby przekonwertować na PDF, ale zamiast tego musisz zainstalować libreoffice-writer. Ważną rzeczą do odnotowania jest to, że libreoffice-core | common wydaje się zawierać jakąś funkcjonalną bazę libreoffice, stąd nazwa ;-), która nie powoduje błędu, jeśli zostanie wykonana w celu przekonwertowania jakiegoś pliku, ale zamiast tego wydaje się czekać na jakieś gniazdo lub takie dla input lub cokolwiek ... Po zainstalowaniu libreoffice-writer, który ma -core | common jako zależność, przekonwertowanie jakiegoś pliku ODT na PDF działało jak urok z dokładnie takim samym wierszem poleceń jak wcześniej.

Wydaje się trochę szalony, że aplikacja wygląda jakoś działa, ale po prostu nie mogła nigdy z powodu brakujących pakietów i nic o tym nie mówi.

4

Aktualizacja

Aktualna wersja libreoffice działa: v5.2.6.2 (mac) 

Używam następującego polecenia

/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir . the_file_to_convert

STARY

Wydaje się, że konwersja nie działa w nowszej wersji (> 4.2.4.2) Używam libreoffice 4.2.4.2 Możesz pobrać starsze wersje z http://downloadarchive.documentfoundation.org/libreoffice /old/4.4.4.2/

  • linux (przy użyciu pakietu deb):

    libreoffice4.2 --headless --convert-to pdf  myfile.odt
    
  • okna:

    swriter.exe --headless --convert-to pdf myfile.odt
    
3
lumos0815

Używam także LibreOffice 4.2.8.2 (w GNU/Linux), ale próbowałem przekonwertować plik DOC na plik HTML. Zainstalowałem libreoffice-headless, ale terminal też się zawiesił. Próbowałem każdej kuli Kurta Pfeifle, ale to nie działało…

Solution było proste: instalacja libreoffice-writer (może libreoffice-filters też jest ok, ale zależy od libreoffice-writer plus innych dużych komponentów LibreOffice).

Mam nadzieję, że to pomoże.

0
Linkid

Mam ten sam problem i utknąłem na cały dzień; głupie mnie skończyło się na tym, że zorientowałem się, że próbowałem przekonwertować zi do sieciowego systemu plików; nawet jeśli mam prawo do pisania libreoffice wydaje się go nie obsługiwać, a przynajmniej nie w mojej konfiguracji.

Rozwiązałem to, konwertując do/tmp, a następnie ręcznie przenosząc plik. Mam nadzieję, że to pomoże.

0