Ten problém patrně nemá dobré řešení. Když jsem před třemi lety dokončil webový program právnických výpočtů, řešil jsem ho prvně. Jde o to, jakým způsobem vložit zdrojový soubor do souboru PDF, v případě právnických výpočtů tedy příkladmo do přehledu o vývoji peněžité pohledávky.
Problém je to velice praktický, protože vyplníte-li webový formulář spoustou dat, potřebujete mít možnost nějak si tato data uložit, abyste v případě změny nemuseli vyplňovat vše znovu. K tomu se hodí soubor XML, který aplikace umí ukládat i načítat (zde), avšak přemýšlel jsem, zda by nebylo praktičtější data uložit přímo do souboru PDF.
První, naivní přístup, bylo vytvoření PDF streamu, který, pokud není filtrovaný, způsobí, že XML parser dokáže soubor PDF zpracovat, jako by to byl soubor XML. Tak to fungovalo k mé plné spokojenosti více než rok, než se vyskytl jeden soubor, u kterého parsování selhalo – nevím, zda vinou novější verse některé knihovny nebo nahodilého datového obsahu.
V další iteraci jsem se rozhodl uložit data do položky /Metadata
, která má tu výhodu, že na ni vede odkaz z katalogu a lze ji proto vždy najít a extrahovat. Tak to fungovalo cca další dva roky. Než jsem se rozhodl uplatnit tentýž postup i pro jiné soubory vytvářené z TeXu. Tam sice zdroják vždy ukládám, ale může se stát, že ho v mezidobí změním a chtěl bych mít možnost podívat se, z jakého přesně kodu byl ten-který PDF výstup generován.
Když jsem takový soubor opatřil elektronickým podpisem (což přirozeně nedělám v produktu Adobe, ale vlastní utilitou v Javě), ukázalo se, že javová knihovna při ukládání metadat – s XML obalem a v sekci CDATA – tato vymaže a nahradí vlastním obsahem. Důvodem je, že pro metadata by se měl používat formát XMP a moje data v něm nejsou.
Nyní jsem měl na vybranou z různých možností. Rozumným by se jevilo přizpůsobit se XMP a obalit zdroják do některé vlastnosti. Jenže jsou zdrojové soubory podání skutečně metadata? To je poměrně hluboká filosofická otázka, na niž jsem si po několika dnech kontemplace odpověděl záporně. To také znamená, že bych neměl data do položky metadat ukládat vůbec (problém s podepisováním jsem technicky dokázal překonat a knihovnu donutit metadata ponechat, byť za cenu dvojího subclassování a nutnosti použít reflexi, neboť použít vlastní methodu pro zápis metadat knihovna zakazuje).
Další možností bylo připojit soubor jako řádný /EmbeddedFile
. Tím se všechny předchozí problémy odstraňují, avšak tato příloha se stává veřejnou
a mohlo by se stát, že ji na podatelně např. u soudu vytisknou a přiloží k podání. To nechci. Proto jsem se rozhodl vrátit ke kořenům
a ponechat zdrojová data v obyčejném streamu, jen jsem ho připojil jako zvláštní odkaz do katalogu.
Norma PDF je v tomto smyslu nepříliš velkorysá, dovoluje sice do katalogu, resp. do každého slovníku, přidávat libovolné položky, ale jejich PDF název musí být registrován; podobná omezení platí i pro pole /Type
a /Subtype
. Myšlenka registrace arci zůstala na papíře, Adobe žádné názvy nezaregistrovala, tudíž by zbývala volně používaná jména s prefixem XX
.
To mi přišlo mého softwaru nedůstojné, proto jsem místo toho sáhl po logických popisných klíčích /Source
a /Data
, a těmi své PDF soubory vybavil. Uvidíme, zda toto řešení konečně vydrží, případně zda čtenáři přijdou s nějakým jiným nápadem.
Důležité upozornění!
Policie České republiky a šéfcensor Ústavu pro studium totalitních režimů Jaroslav Čvančara varují: citovat jakékoli texty z tohoto blogu způsobuje vážné risiko trestního stíhání! Četba na vlastní nebezpečí!
Kam s ním?
- Autor: Tomáš Pecina
- Kategorie: Počítače
- Počet zobrazení: 2027
Číst dále...