Nejčastěji kladené otázky/Obecné/150

From The Document Foundation Wiki
< Faq‎ | General
Jump to navigation Jump to search
This page is a translated version of the page Faq/General/150 and the translation is 100% complete.
Other languages:
English • ‎Nederlands • ‎dansk • ‎español • ‎français • ‎italiano • ‎čeština • ‎한국어

Poznámka

Budeme se zabývat převodem z formátu .docx do .odt, ale syntaxe a postup jsou stejné i pro ostatní formáty podporované LibreOffice.


Kontext

Ve Windows 10 můžeme použít příkaz jako soffice.exe --convert-to odt my_document.docx pro převod my_document.docx z formátu MS docx do formátu otevřených dokumentů (odt). Funkce --convert-to nám umožňuje zadat sadu dokumentů pomocí obecné syntaxe zástupných znaků pro soubory. Například je legální použít *.docx, pokud máte k dispozici několik souborů .docx k převodu z aktuálního adresáře.

Translated with www.DeepL.com/Translator (free version)


Problém

Při použití v příkazovém řádku systému Windows však vůbec nefunguje. Zdá se, že všechny konverze jsou spuštěny současně, a protože při spuštění z příkazového řádku nemohou běžet dvě instance LibreOffice (soffice.exe) současně, proces se nikdy neukončí. V nejlepším případě skončíte s jedním nebo dvěma převedenými soubory, ale v každém případě budete muset ručně zabít spoustu procesů LibreOffice zavěšených v systému (na první pohled dvakrát více než počet nalezených souborů).


Řešení

K překonání tohoto problému lze jednoduše použít prostředí Windows Subsystem for Linux (WSL), které poskytuje společnost Microsoft pro svou verzi 10 systému Windows. Možná jej budete muset nejprve nainstalovat, což je poměrně jednoduché, pokud budete postupovat podle WSL documentation.


Po dokončení budete mít přístup k pěknému shellu Bash běžícímu nad základním systémem Windows a funkce --convert-to bude fungovat správně, v synchronním režimu.


Krátký ukázka

  1. Identifikujte cestu k soffice.exe.
  2. cd do adresáře obsahujícího soubory k převodu po vytvoření cílového adresáře.
  3. Zadejte tento příkaz: <cesta k soffice.exe> --convert-to odt --outdir <můj_výstupní_adresář> *.docx


Příklad

"/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" --convert-to odt --outdir ./Converted_To_odt *.docx převede soubory docx z aktuálního adresáře na jejich ekvivalent do podadresáře ./Converted_To_odt.


Proč tato syntaxe?

WSL sám připojí kompletní souborový systém. Syntaxe pro určení umístění souboru ve stromu adresářů se tedy liší od syntaxe systému Windows. První rozdíl je kořenový bod: Pod Windows to je C:\, ekvivalent v bash shellu je /mnt/c/. Oddělovač tokenů pod Windows je pak \, v bash je to / unixový. Ve zbytku jsou pravidla stejná, bash shell podporuje stejnou znakovou sadu jako příkazový shell Windows a také dlouhé názvy souborů a názvy souborů s mezerami, za předpokladu, že jsou odděleny dvojitými uvozovkami (").


Jak napsat příkaz?

Nejjednodušší způsob je prozkoumat zkratku, kterou používáte při každém spuštění LibreOffice. Klikněte na něj pravým tlačítkem myši a poté na „Vlastnosti“ a zkopírujte obsah pole „Cíl“. V uvedeném příkladu to bude "C:\Program Files\LibreOffice 5\program\soffice.exe". Poté upravte syntaxi na požadavky bash, jak bylo popsáno výše, abyste získali toto: "/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" Pozor, Unix rozlišuje velká a malá písmena, Windows ne.


V ostatních případech jste hotovi.


Závěr

Použití shellu Bash v systému Windows je snadný způsob, jak převést několik souborů z jednoho formátu do jiného pomocí funkce příkazového řádku integrované v LibreOffice. Funguje tiše.


Nebo nejjednodušší způsob, interaktivní

Ještě jednodušší je použít vestavěný Asistent pro převod dokumentů LibreOffice.


Můžete jej spustit pomocí nabídek: Soubor ▸ Průvodci ▸ Konvertor dokumentů


Všimněte si, že jeden uživatel již dříve hlásil, že musel své soubory rozdělit do skupin po 200, protože proces někdy spadl.

Dlouhý popis problému

Problém není v tom, že "všechny konverze jsou spuštěny současně". Je to jednoduše tím, že --convert-to LibreOffice ve skutečnosti nepodporuje použití zástupných znaků a funguje pouze na systémech jiných než Windows, protože zpracovávají zástupné znaky ve svých shellech (a tyto shelly samozřejmě fungují také na Windows, jako s Cygwin nebo WSL).

Co to znamená? To znamená, že když v Bash pošlete příkaz jako soffice --convert-to odt path/to/*.doc, příkaz je nejprve analyzován Bashem a najde cestu /to/*.doc a vyjmenuje každý soubor, který odpovídá masce, vloží jejich názvy do jednoho řetězce a nahradí cestu/k/*.doc něčím jako cesta/k/1.doc cesta/k/2.doc cesta/k/345.doc. Toto vidí LibreOffice.

Windows cmd.exe to nedělá a posílá cestu/k/*.doc do LibreOffice beze změny. LibreOffice se jednoduše pokusí otevřít soubor s názvem *.doc a selže. To je vše.

V souboru cmd.exe systému Windows by mělo být předběžné zpracování provedeno explicitně takto:

  pro %f v ("cesta\k\*.doc") zadejte "C:\Program Files\LibreOffice\program\soffice" --convert-to odt "%f"

Požadavek na vylepšení pro implementaci vlastního zpracování zástupných znaků je tdf#48413.