it-swarm.dev

Jak lze převést soubor ODT do PDF?

Ví někdo, jak převést soubor ODT (LibreOffice) na PDF?

65
SoftTimur

Jednoduše otevřete dokument v kanceláři pro svobodu a zvolte Exportovat jako PDF ...:

enter image description here

Pro řešení příkazového řádku existuje noconvInstall NAME , která převádí soubory z příkazového řádku:

unoconv -f pdf mydocument.odt

Poznámka: Počínaje Ubuntu 11.10 unoconv závisí na Office Libre. Předchozí verze unoconv (z Ubuntu <= 11.04) závisí na Open Office (ale bude také spuštěn s Libre Office).

70
Takkat

Pro svůj účel můžete také použít příkazový řádek libreoffice. To vám dává výhodu dávkové konverze. Jsou však možné i jednotlivé soubory. Tento příklad převede všechny soubory ODT v aktuálním adresáři na PDF:

libreoffice --headless --convert-to pdf *.odt

Další informace o možnostech příkazového řádku získáte pomocí:

man libreoffice
89
Tapper

Zde je několik dalších podrobností o metodě „non-GUI“.

  1. Tuto metodu můžete použít nejen k převodu souborů ODT do formátu PDF. Bude také fungovat pro soubory MS Word DOCX (bude fungovat, stejně jako LibreOffice umí zpracovat konkrétní ODT) a obecně všechny typy souborů, které LibreOffice dokáže otevřít.

  2. Nemyslím si, že existuje binární soubor s názvem libreoffice jako jedna z dalších navrhovaných odpovědí. Existuje však soffice(.bin) - binární soubor, který lze použít ke spuštění LibreOffice z příkazového řádku. Obvykle se nachází v /usr/lib/libreoffice/program/; a velmi často na toto místo odkazuje symbolický odkaz /usr/bin/soffice.

  3. Ve většině případů pak parametry --headless --convert-to pdf Nejsou dostatečné. Musí to být:

    --headless --convert-to pdf:writer_pdf_Export
    

    Nezapomeňte přesně dodržovat tuto kapitalizaci!

  4. Příkaz dále nebude fungovat, pokud ve vašem systému již je spuštěna instance LibreOffice GUI. Je to způsobeno chybou # 37531, známá od roku 2011 . Přidejte do příkazu tento další parametr:

     "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
    

    Tím se vytvoří nové, oddělené prostředí, které může být použito druhou bezhlavou instancí LO, aniž by zasahovalo do možná spuštěné první instance GUI LO spuštěné stejným uživatelem.

  5. Také se ujistěte, že zadaný --outdir /pdf Existuje a že k němu máte oprávnění k zápisu. Nebo raději použijte jiný výstupní adresář. I když je to jen pro první testovací a ladicí kolo:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Proto:

    /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
    

    Toto funguje pro mě na Mac OS X Yosemite 10.10.5 s LibreOffice v5.1.2.2 (pomocí mé specifické cesty pro binární soffice, která se bude stejně u Ubuntu lišit ...). Funguje také na Debian Jessie 8.0 (pomocí cesty /usr/lib/libreoffice/program/soffice). Litujeme, ale na Ubuntu to nemůžu hned vyzkoušet.

    Pokud to všechno nefunguje, při pokusu o zpracování DOCX:

  7. Může to být problém s konkrétním souborem DOCX, s nímž příkaz zkusíte ... Nejdříve vytvořte velmi jednoduchý dokument DOCX. Použijte k tomu samotný LibreOffice. Napište "Ahoj svět!" na jinak prázdné stránce. Uložit jako DOCX.

  8. Zkus to znovu. Funguje to s jednoduchým DOCX?

  9. Pokud to znovu nefunguje, opakujte krok 7, ale tentokrát uložte jako ODT.

  10. Opakujte krok 8, ale tentokrát nezapomeňte na ODT.

  11. Poslední: Použijte úplnou cestu k soffice, k soffice.bin Ak libreoffice a spusťte každý s parametrem -h:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Dostanete zde výstup?
    • Pro které jeden ze tří binárních souborů/symbolických odkazů?
    • Zaznamenejte výstupy.
    • Sdělte nám své výstupy !!!

    Porovnejte je s příkazovým řádkem, který jste použili:

    • Existují nějaké změny v názvech parametrů, velkých písmen, počtu použitých pomlček atd.?

    Pro srovnání, můj vlastní (Mac OS X) výstup je zde:

     $ /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. Chcete-li vynutit použití vstupního filtru, když soffice otevře váš soubor DOCX, přidejte do příkazového řádku ještě jeden argument:

    --infilter="Microsoft Word 2007/2010/2013 XML"
    

    nebo

    --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"
    
8
Kurt Pfeifle

Nautilus skript

Tento skript využívá libreoffice k převodu souborů kompatibilních s LibreOffice do 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

Pokyny k instalaci najdete zde: Jak mohu nainstalovat skript Nautilus?

4
Glutanimate

Poznámka: Rozhodl jsem se smazat odpověď z této otázky a zaúčtovat zde upravenou verzi, když jsem si uvědomil, že unoconv se nezabývá soubory psw na vše dobře a nepřevádí je úspěšně do jiných formátů. Mohou také existovat problémy s formáty docx a xlsx.


Libreoffice však plně podporuje mnoho typů souborů; úplná dokumentace je k dispozici na oficiálních stránkách, kde jsou uvedeny podrobnosti o platných vstupních a výstupních formátech.

Můžete použít nástroj příkazového řádku libreoffice convert nebo noconv , který je k dispozici v úložištích. Považuji unoconv za velmi užitečnou, a to je asi to, co chcete. Přestože Takkat stručně zmínil unoconv, myslel jsem si, že by bylo užitečné uvést nějaké další podrobnosti a jednodílnou liniovou konverzi.

Pomocí terminálu můžete cd do adresáře obsahujícího vaše soubory a pak je všechny převést dávkovým spuštěním jednorázové linky, jako je tato:

for f in *.odt; do unoconv -f pdf "${f/%pdf/odt}"; done

(Tato jednostranná obálka je modifikací mého překládaného skriptu představovaného v této odpovědi .)

Pokud chcete později použít jiné formáty souborů, nahraďte odt a pdf za jakékoli jiné podporované vstupní a výstupní formáty. Podporované formáty pro typ souboru najdete zadáním unoconv -f odt --show. Chcete-li převést jeden soubor, použijte například unoconv -f pdf myfile.odt.

Další informace a možnosti programu naleznete po zadání v terminálu man unoconv nebo přechodem na buntu manuály online .

2
user76204

Přidávám novou odpověď, protože v nedávné době byla řada nových konverzních cest otevřena Pandoc získáním schopnosti číst soubory ODT.

Když Pandoc čte ve formátu souboru, převede jej na interní formát „nativní“ (což je forma JSON).

Ze své nativní podoby pak může dokument exportovat do celé řady dalších formátů. Nejen PDF, ale také DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki a co ne ...

Protože zde je požadovaným výstupním formátem PDF, máme další výběr různých cest, poskytovaný tím, co Pandoc volá a pdf-engine. Zde je seznam aktuálně dostupných motorů PDF (platí pro Pandoc v2.7.2 a novější - předchozí verze mohou podporovat pouze menší seznam):

  • pdflatex: To vyžaduje LaTeX nainstalovat kromě Pandoc.

  • xelatex: To vyžaduje XeLaTeX k instalaci kromě Pandoc (k dispozici také jako další balíček pro obecné - TeX distribuce ).

  • kontext: To vyžaduje ConTeXt nainstalovat kromě Pandoc; ConTeXt je k dispozici jako další balíček pro většinu obecných TeX distribuce ).

  • lualatex: To vyžaduje LuaTeX k instalaci kromě Pandoc (k dispozici také jako další balíček pro obecné TeX distribuce ).

  • pdfroff: To vyžaduje GNU Roff k instalaci kromě Pandoc.

  • wkhtml2pdf: To vyžaduje wkhtmltopdf nainstalovat kromě Pandoc.

  • prince: To vyžaduje PrinceXML k instalaci kromě Pandoc.

  • weasyprint: To vyžaduje weasyprint k instalaci kromě Pandoc.

Existuje několik dalších a novějších PDF motorů nyní integrovaných do Pandoc, které jsem dosud nepoužil sám a které v současné době nemohu podrobněji popsat: tektonický = a latexmk.

VAROVÁNÍ: Neočekávejte, že vzhled vašeho originálního dokumentu bude ve všech výstupech PDF) shodný s tiskem náhled nebo PDF export ODT! Pandoc, při převodu nezachová rozvržení, zachovává obsah a strukturu dokumentů: odstavce zůstávají odstavce, zvýrazněná slova zůstávají zvýrazněna, nadpisy zůstanou nadpisy, atd. Ale celkový vzhled se může výrazně změnit.

Příklad příkazů

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

ConTeXt:

 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

Výše uvedené příkazy jsou pro převod nejzákladnější. V závislosti na zvoleném motoru PDF, který vyberete) může existovat mnoho dalších možností, jak řídit vzhled výstupního souboru PDF soubor. Například následující další parametry) mohou být přidány do všech těchto cest směrovaných přes LaTeX:

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

který použije vlastní velikost stránky (o něco větší než DIN A4) s okraji 2 cm na horním okraji a 1,12 cm na ostatních třech okrajích).

1
Kurt Pfeifle

Další skript Nautilus

Tento velmi jednoduchý a lehký skript Nautilus používá unoconv k převodu vybraných souborů kompatibilních s LibreOffice do formátu PDF formát:

#!/bin/sh
#Nautilus Script to convert selected LibreOffice-compatible file(s) to PDF
#
OLDIFS=$IFS
IFS="
"
for filename in [email protected]; do
unoconv --doctype=document --format=pdf "$filename"
done
IFS=$OLDIFS
1
Sadi