Externí manipulace s ODT souborem

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Externí manipulace s ODT souborem
« kdy: 03. 08. 2018, 19:48:14 »
Zdravím,

Potřeboval bych poradit nějakou utilitku, či způsob jak manipulovat s obsahem ODT souboru z nějakého programu či skriptu. Konkretně jde o to, že tvořím malý evidenční systém, který vytvoří ID, k němu přiřadí nějaké další informace a z toho vytvoří QR kod. Následně pak tyto informace (mimo QR kodu) odešle na server, kde se k němu ještě přiřadí nová tabulka databáze, se kterou se následně pracuje (pomocí klienta na PC, nebo mobilu).

Je však dán požadavek, aby se vytvořil ODT soubor (jako nejhorší a poslední možnost je možné ještě využít PDF) a do něho se vložil KAŽDÝ nově vytvořený QR Kod ve formě štítku, aniž by se vubec otevíralo okno LO Writeru. Tedy samotny obrazec a vedle něj ID a několik málo dalších informací. Ty se pak vytisknou na tiskárně a dal používají.

Vtip je v tom, že si s touhle částí moc nevím rady. Jako jedno řešení mě napadlo, udržovat štítky ve formě HTML a ten potom pomocí soffice konvertovat, ale moc se mi takový postup nezamlouvá.

Kdyby někdo znal "lepší", přímočařejší postup jak na ty štítky, prosím o radu. Dopředu díky.


Re:Externí manipulace s ODT souborem
« Odpověď #1 kdy: 03. 08. 2018, 20:07:12 »
Zdravím, Potřeboval bych poradit nějakou utilitku, či způsob jak manipulovat s obsahem ODT souboru z nějakého programu či skriptu.

Potřebujete knihovnu na práci s ODT. V javě používám na generování dokumentů jOpenDocument http://www.jopendocument.org/ - nenarazil jsem na žádný problém, dělám tím faktury a podobně - základem je šablona do které programově doplním údaje, knihovna umožňuje pracovat s ODS i ODT.

Samotná LibreOffice má taky možnost programově pracovat s dokumenty - viz https://api.libreoffice.org/ ale přišlo mi to o dost složitější.

Pokud by šlo jen o výměnu obrázku a změnu několika textů, šlo by zřejmě i rozbalit ODT, provést náhradu v xml a pak zase zabalit. ODT i ODS jsou jen zazipované balíčky s xml dokumentem, styly atd.

BoneFlute

  • *****
  • 1 997
    • Zobrazit profil
Re:Externí manipulace s ODT souborem
« Odpověď #2 kdy: 03. 08. 2018, 23:48:12 »
Pokud by šlo jen o výměnu obrázku a změnu několika textů, šlo by zřejmě i rozbalit ODT, provést náhradu v xml a pak zase zabalit. ODT i ODS jsou jen zazipované balíčky s xml dokumentem, styly atd.

Bych zdrůraznil.

Nestyděl bych se za to jít do toho natvrdo. Sám jsem to tak dělal (vytvářel si fakturu, kde jsem nahrazoval místa za částku a tak).

Jenda

Re:Externí manipulace s ODT souborem
« Odpověď #3 kdy: 04. 08. 2018, 00:02:41 »
Například DOCX se dá v Pythonu vytvářet programově stylem "tady obrázek, potom stránka s odstavcem" atd. Určitě to bude umět i ODT.

Kód: [Vybrat]
sudo pip3 install python-docx

from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading(sys.argv[2], 0)
document.add_paragraph(sys.argv[3])
document.add_picture("foo.png",width=Inches(6.0))
document.add_page_break()
document.save(sys.argv[1])

A nebo jak píšou ostatní - rozbalit, nahradit v XML, zabalit.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Externí manipulace s ODT souborem
« Odpověď #4 kdy: 04. 08. 2018, 07:46:14 »
Díky moc všem za rady.

Vůbec jsem netušil, že ODT soubory jsou zipované archivy. Člověk, aby se pořád učil!  ;D Co jsem se tak zběžně díval, tak se mi ta přímá manipulace se dokumentem (rozbalit - upravit xml - zabalit)  zamlouvá zatím asi nejvíc. Na první pohled to vypadá docela jednoduše a navíc dobře znám C++ knihovnu TinyXML, která je pro takové úlohy skvělá. Tak mě napadá, že někde na netu musí ležet specifikace, protože - pokud si dobře vzpomínám, tak na OpenDocument získali standard. Přes víkend to prozkoumám podrobněji a trochu si s tím trochu, vidím to dost optimisticky :)

JOpenDocument taky nevypadá vůbec špatně, ale nechci do toho tahat ještě Javu, pokud by to nebylo vyloženě nutné, ale i tak - někdy se může hodit o ní vědět. ;)

Ještě jednou velký dík za nakopnutí :-)


Franta <xkucf03/>

Re:Externí manipulace s ODT souborem
« Odpověď #5 kdy: 04. 08. 2018, 09:43:28 »
Nejen, že to jsou ZIP archívy – existují i „ploché“ varianty těch formátů – .fodt, .fods atd. – a to jsou přímo XML dokumenty bez jakékoli komprese, dají se zpracovávat běžnými XML nástroji, generovat přes XSLT nebo nějakou XML knihovnu. Obrázky a další binární obsah se vkládá dovnitř jako Base64, takže je to pořád jeden soubor, akorát trochu větší než ta ZIPovaná varianta.

Je to prostě takové trochu složitější HTML. Sice se tam nepočítalo s tím, že bys to psal ručně, ale i to by se dalo. Generovat to nějakým nástrojem není problém. A např. minimalistický tabulkový dokument je opravdu minimální:

Kód: [Vybrat]
<?xml version="1.0" encoding="UTF-8"?>
<office:document
  xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
  xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
  xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
  office:mimetype="application/vnd.oasis.opendocument.spreadsheet"
  office:version="1.2">
 
  <office:body>
    <office:spreadsheet>
      <table:table table:name="první tabulka">
       
        <table:table-row>
          <table:table-cell>
            <text:p>a</text:p>
          </table:table-cell>
          <table:table-cell>
            <text:p>b</text:p>
          </table:table-cell>
          <table:table-cell>
            <text:p>c</text:p>
          </table:table-cell>
        </table:table-row>
       
        <table:table-row>
          <table:table-cell>
            <text:p>1</text:p>
          </table:table-cell>
          <table:table-cell>
            <text:p>2</text:p>
          </table:table-cell>
          <table:table-cell>
            <text:p>3</text:p>
          </table:table-cell>
        </table:table-row>
       
      </table:table>
    </office:spreadsheet>
  </office:body>
</office:document>

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Externí manipulace s ODT souborem
« Odpověď #6 kdy: 06. 08. 2018, 19:25:31 »
Díky moc, tohle taky dost pomohlo - hlavně při experimentování.