Tisk

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání
DjVu-logo.svg

Obsah

Úvodem

Formát DjVu je podobně jako PDF určen pro elektronickou konzervaci dokumentů. Mezi jeho silné zbraně patří:

Komprimace obrazových vrstev wavelet kompresí
Použtím wavelet komprese DjVu dosahuje velmi dobrého poměru mezi čitelností dokumentu a celkovým objemem uložených dat.
Bezproblémové slučování a rozdělování jednotlivých stránek (dokumentů)
Každý dokument ba i každá jeho extrahovaná vrstva může existovat v rámci svazku jako samostatný dokument.
Obrazové a textové informace umístěné v oddělených vrstvách
Každá stránka DjVu dokumentu může mít svou vlastní skrytou editovatelnou textovou vrstvu s informacemi, které lze fulltextově prohledávat, indexovat i pomocí editačních nástrojů upravovat. Textovou vrstvu lze získat i aplikování OCR na černobílou obrazovou vrstvu dokumentu.
Skrytá textová vrstva také může obsahovat řadu dalších informací
Mohou to být kontrolní součty obrazových vrstev, takže pak lze ověřit zda nedošlo k jejich dodatečné úpravě, nebo informace o původu a zpracování originálního dokumentu, aj.

Tyto vlastnosti formát DjVu předurčují k archivaci tiskovin a listin do elektronické podoboby, neboť dovolují naskenované dokumenty redukovat na přijatelnou velikost, aniž by tím výrazně utrpěla obrazová informace. Proto je tento formát velmi výhodný pro publikování archivovaných materiálů prostřednictvím internetu[1]. Je-li konverze dokumentu kvalitně provedena, zůstane zachováno vše, co bylo vidět na originálu (např. nejrůznější vpisky, otisky atp.). S dokumentem pak lze dále pracovat, aniž by bylo nutné ho mít fyzicky v ruce.

Skrytá textová vrstva navíc dovoluje k dokumentu přidat indexovatelný obsah - kupř. překlad, nebo přepis jeho obsahu. Toho lze využít obzvláště u dokumentů psaných rukopisem či znakovým písmem. Díky tomu pak lze fulltextově prohledávat i takové dokumenty.

DjVu versus PDF

Formát DjVu byl navržen pro sdílení dokumentů v elektronické podobě skrz internetovou síť. To je základní rozdíl oproti formátu PDF[2], který vytvořila firma Adobe Systems proto, aby zajistila že dokument, vytvořený s využitím jejich produktů, vypadal po vytištění vždy stejně[3] - bez ohledu na to, na které platformě byl vytvořen. U PDF (Portable Document Format), tedy nebyla směrodatná velikost elektronického dokumentu, ale jeho přenositelnost.

Pro zobrazení a následný tisk PDF nabízelo Adobe software ke stažení zdarma. Specifikace byla otevřená, takže k jejich software mohly vznikat i otevřené alternativy.

Fakt, že hotový elektronický dokument v PDF formátu lze dodatečně upravovat jen v omezené míře, vedl k tomu, že se tento formát začaly firmy hojně používat k elektronickou dokumentaci svých produktů.

Čím se liší PDF od DjVu?

Základem PDF formátu je postscript - jazyk, kterým umí komunikovat počítač s tiskárnou. Proto má PDF - podobně jako postscript - lineární zápis i čtení. Prohlížečka ze souboru postupně načítá a vykresluje jednotlivé objekty, specifikované pomocí atributů a souřadnic. Objektem může být:

  • postscriptový obrazec
  • formátovaný text
  • nebo bitmapový obrázek

Pokud PDF obsahuje pouze kolekci postscriptových ilustrací a formátovaný text, je výsledný soubor poměrně malý a vyrenderování obrazu rychlé. Prohlížečka vykreslí obrázky a ke zobrazení textu použije předepsanou znakovou sadu (font). Takový dokument může být dokonce mnohem menší a vizuálně kvalitnější než DjVu dokument se stejným obsahem. PDF soubor totiž obsahuje v postatě to samé, co počítač při tisku posílá na tiskárnu.

Jenže font, použitý v takovém PDF souboru nemusí být k dispozici na každém počítači. Proto PDF od verze 1.3 umožňuje textový obsah uložit několika různými způsoby:

  • formátovaný text + použitý font[4] - v takovém případě však má každý takový PDF soubor v sobě uloženy kopie všech použitých fontů.
  • jednotlivá písmena textu jako postscriptové obrázky - to může být výhodné, pokud dokument používá hodně fontů a má hodně textu.
  • celá stránka jako postscriptový obrázek - se vyplatí pokud je na stránce málo textu, ale mnoho různých fontů

Pokud PDF obsahuje textový obsah ve formě bitmapového obrázku[5], jeho objem naroste. Každý obrázek je v PDF uložen jako samostatný objekt - včetně formátu. Do r. 2001 bylo možné použít buď TIFF, GIF nebo ztrátový JPEG. Bitmapový obrázek se do PDF souboru ukládá v takovém rozlišení, které odpovídá cílovému určení dokumentu. Čím má vyšší dpi (počet bodů na palec) tím víc detailů se při tisku zachová. Ovšem objem uložených dat s vyšším dpi kvadraticky stoupá.

Lidské oko je schopné rozeznat detaily zhruba v rozmezí od 300 do 600 dpi. Takže dokumenty, určené k tisku by měly mít uloženy obrázky nejméně v rozlišení 300dpi. Je-li však PDF dokument určen pouze ke čtení na monitoru, je tak velké rozlišení zbytečné. Do nedávna totiž většina monitorů ani nebyla schopna víc než 100 dpi vůbec zobrazit.

Takže i když na první pohled vypadá stránka PDF souboru v prohlížečce stejně, může se jeho vnitřní struktura značně lišit - v závislosti na tom, pro jaký účel byl dokument vytvořen.

U archivních dokumentů, které tvoří prakticky výhradně naskenované stránky, dnes nabízí PDF v podstatě totéž co DjVu, ovšem s tím rozdílem, že soubor se stejným obsahem je mnohonásobně větší a jeho zpracování v prohlížečce pomalejší.

Proč je DjVu pro práci s archivními dokumenty lepší

U vícestránkového DjVu dokumentu je každá stránka samostatný objekt, který je složen z několika vrstev dalších objektů - viditelný obraz vzniká až jejich sloučením:

  • Základem je obrazová vrstva (složená z několika dalších vrstev) - ta je přítomna vždy.
  • Kromě ní může být v dokumentu i textová vrstva s metadaty, hyperlinky, skrytým textem obsahu stránky a poznámkami.

Dokument zpracovaný do DjVu formátu bude vždy menší než v PDF, protože neexistuje takový algoritmus pro uložení bitmapového obrázku, který by dokázal skloubit:

  • rychlou dekompresi uložených dat
  • vysoký kompresní poměr
  • nízké zatížení procesoru v průběhu dekomprese
  • minimálně obsazenou pamě%t

Wavelet komprese

Naproti tomu obrazová vrstva DjVu je složena z několika barevných vrstev. Z nichž každou tvoří shluky skvrn komprimovaných wavelet kompresí. Takové shluky se dají matematicky popsat, takže je lze dobře komprimovat.

Maska

Obrazové formáty JPEG2000, a JBIG2, se kterými pracuje PDF, využívají stejně jako DjVu wavelet kompresi ale jsou náročnější při dekompresi na výkon procesoru protože se v paměti pracuje s celým bitmapovým obrázkem ve velkém rozlišení. Takže se jednotlivé stránky vykreslují velmi pomalu.

Trumfem v rukávu (a patentově chráněnou technologií) je u DjVu použití masky při kompresi. Zjednodušeně řečeno - před kompresí jsou odfiltrovány pomocí masky kontrastní plochy, takže s výsledkem je pak možné naložit stejně, jako by šlo o spojitou barevnou plochu. Místo mnoha členitých křivek se tak vektorově popíše jedna spojitá barevná plocha, která se uloží jako pozadí (background). A data odfiltrovaná pomocí masky se uloží do popředí (foreground).

Maska (mask) samotná je čistě černobílá, uložená v samostatné vrstvě. Hyperlinky, textové poznámky a další doplňkové informace jsou uloženy ve skryté textové vrstvě.

Obrazová vrstva složená z barevných skvrn

DjVu principiálně vychází z toho, že u archivního dokumentu nás většinou víc zajímá informace, kterou nese text, než jak vypadá struktura a zažloutlé okraje papíru, na kterém je napsaný. Takže nás tolik nebolí, že se z obrazu nepodstatné detaily vytratí, hlavně že je zachován tištěný či psaný text.

Vrstvy popředí a pozadí', získané po separaci s využitím masky se rozdělí na další vrstvy vektorově popsaných barevných skvrn. Takto popsané objekty, není problém zvětšovat, takže i při zvětšení obrazové vrstvy nevzniká problém s rychlostí při vykreslování obrazu.

U DjVu formátu je vždy nutné počítat s tím, že se při konverzi část obrazové informace ztratí, proto je občas třeba zvolit při konverzi optimální postup. Ale o tom více v kapitolách věnovaných anatomii DjVu souborů a konverzi do DjVu.

Nejsilnější argument - práce s poznámkami a vloženým textem

Když v roce 2001 firma Lizardtech uvolnila formát DjVu pro volné použití pod GPL2 licencí. Umožnila tímto krokem vývoj DjVuLibre - open source nástrojů a knihovny pro práci s DjVu, kterou dnes využívá k renderování DjVu stránek většina prohlížeček.

Léon Bottou - který byl jedním z otců formátu DjVu, tak mohl vytvořit a dát do pléna nástroje, srovnatelné s původním komerčním produktem, který se orientoval výhradně na oblast proprietárních operačních systémů MS Windows a Mac OS X. Každý uživatel opensource tak díky němu má možnost nejenom DjVu dokumenty číst, ale také vytvářet a upravovat v nich uloženou textovou vrstvu.

Vzhledem k tomu, jak byl DjVu formát navržen, lze díky čím dál lepším open source nástrojům znovu zpracovávat i staré DjVu dokumenty a dodatečně do nich doplnit chybějící metainformace a textová data.

Pokud jde o PDF, byla situace z hlediska zpracování textového obsahu dlouhé roky naprosto tristní, neboť s výjimkou komerčního balíku Adobe Acrobat dlouho nebyl k dispozici nástroj, který by umožnil editaci textové vrstvy a vkládání hypertextových odkazů a poznámek. V současné době sice již takové nástroje existují, ovšem vzhledem k vlastnostem formátu PDF nenabízí ani zdaleka takové možnosti jako DjVu.

PDF či DjVu?

Pro dlouhodobou archivaci má jednoznačně smysl mít naskenované stránky uložené v PDF souboru, ale pro zpřístupnění dokumentu k dalšímu bádání je jednoznačně lepší, je-li ve formátu DjVu.

Přehled verzí DjVu formátu

Vývoj DjVu formátu, a balíku nástrojů pro práci s tímto formátem s pracovním názvem DjVu Shop, probíhal v AT&T Laboratories v letech 1996-1999.

Konverze se prováděla pouze na příkazovém řádku. Jaký bude výsledek konverze bylo vidět až po konverzi, když se dokument otevřel v prohlížečce. Volba optimálních parametrů tak závisela na zkušenosti a odhadu tvůrce DjVu dokumentů.

DjVu dokument verze 16, 17

První beta verze aplikace DjVu Shop ukládala dokumenty ve verzi 16. A jako verzi 17 její, stále ještě neveřejný nástupce, DjVu Shop 2.0 Beta2.

DjVu dokument verze 18 a 19

Protože z uživatelského hlediska nebylo opakované zadávání konverzních parametrů komfortní, byl DjVu Shop (již pod vlajkou LizardTechu)) rozšířen o možnost využívat tzv. profil. Parametry uvedené v profilu nebylo nutné při konverzi zadávat na příkazové řádce. Stačilo pouze uvést - podle typu dokumentu - jaký profil se má použít.

Tato verze aplikace DjVu Shop 2.0.2, která ukládala soubory jako DjVu dokument verze 18, byla první komerčně distribuovanou aplikací pro tvorbu DjVu dokumentů.

Poslední verze DjVu formátu pod vlajkou AT&T měla číslo 19, ale dokumenty s tímto číslem verze se prakticky nevyskytují.

DjVu dokument verze 20

V dubnu 1999 totiž odkoupila práva na DjVu Shop od AT&T Laboratories fa. LizardTech a tato změna se projevila v tom, že rovnou změnila číslo verze na 20.

DjVu dokument verze 21

Po změně majitele práv následovalo v září 1999 rozšíření specifikace formátu a s tím i spojená změna čísla verze.

Nový formát pro svázané dokumenty
Tvorbu vázaných DjVu dokumentů umožňovala již aplikace DjVu Shop. A to buď konverzí dokumentů z bitmapových obrázků formátu BMP, GIF či JPG, nebo svázáním již hotových stránek v nativním DjVu formátu IW44. Problémem těchto svazků však bylo, že index svázaného dokumentu byl uchováván ve zvláštním souboru (djvudir.iff), bez kterého DjVu prohlížečka nebyla schopna s dokumentem pracovat jako se svazkem.
V původní specifikaci DjVu formátu, kterou uvolnila firma AT&T v dubnu r. 1999 však nebyla o svazcích žádná zmínka. Z toho lze soudit, že AT&T nepovažovalo stávající řešení vícestránkových svazků za konečné. LizardTech tedy změnil formát svazků[6] a rozšířil stávající specifikaci formátu DjVu.
Sdílená obrazová data u svazků
Formát svazků byl dále rozšířen o blok sdílených dat 'Djbz'. Tento blok obsahuje set zakomprimovaných vzorků (shapes), které se na jednotlivých stránkách svazku mohou opakovat. Vrstva 'Sjbz' jednotlivých stránek ve svazku tak nemusí obsahovat všechny vzorky, ale pouze ty, které nejsou součástí tohoto sdíleného bloku.
Skrytá textová vrstva
K obrazové vrstvě přibyla také skrytá textová vrstva.

S rozšířením formátu přišel LizardTech také s novými aplikacemi pro tvorbu DjVu dokumentů u kterých změnil číslo verze v názvu z 2.0 na 3.0.

DjVu Solo

Aby firma podpořila rozšíření DjVu formátu, nabídla k osobnímu použití bezplatnou aplikaci DjVu Solo 3.0[7] (kterou později nahradila verzí DjVu Solo 3.1). Všechny verze aplikace DjVu Solo ukládají konvertované dokumenty jako DjVu dokument verze 21.

Aplikace DjVu Solo byla určená pouze pro platformu MS Windows a licenčním ujednáním bylo omezeno veřejné publikování vytvořených dokumentů prostřednictvím internetu.

Document Express

Pro komerční účely a publikování DjVu dokumentů prostřednictvím internetu nabídla firma tři variace produktu pod názvem DocumentExpress[8]. První dvě variace Desktop a Proffesional byly z uživatelského hlediska velmi podobné. Lišily se především v tom, že lacinější verze Document Express Desktop umožňovala zpracovávat pouze jednostránkové dokumenty, kdežto Document Express Proffesional umožňoval pracovat se svazky.[9]

Variace Document Express Enterprise nebyla určena pro desktopové použití, ale pro nasazení na server. V této oblasti však Microsoft nedominoval, tak jako na desktopech, proto nebyla nabízena jen verze pro platformu MS Windows, ale do verze 5.1 i verze pro unix.[10]

Uvolnění formátu DjVu pod GPL2 licencí

Formát DjVu byl uvolněn pod licencí GPL2 v březnu 2001. Nejprve verze 2.0 a posléze i verze 3.5. Na jejím základě začal Léon Bottou[11] vyvíjet, jakožto odvozené dílo, opensource knihovnu DjVulibre.

Dvě důležité části původního DjVu enkodéru - Z-kodér a techniku maskování pozadí která se používá u iw44 enkodéru, však chrání několik patentů z nichž většinu vlastní AT&T[12]. Firma Lizardtech proto aby bylo možné formát pod GPL2 uvolnit získala na tyto patenty rozsáhlá práva a veřejným prohlášením poskytla pro tento formát a s ním spojené patenty pro použití v rámci GPL software trvalou volnou licenci.[13]

Text několika odstavců tohoto prohlášení však nebyl zcela jednoznačný a mohl bránit dalšímu vývoji opensource DjVu knihovny, proto dopisem z 19. června 2002 LizardTech pozměnil text omezujících odstavců tak, aby bylo zřejmé, že se omezení vztahuje pouze na jeho originální kód. Tím, že LizardTech výslovně zmínil, že se omezení vztahuje pouze na původní část kódu, umožnil další vývoj knihovny DjVuLibre pod GPL2, která kromě těchto původních patentově chráněných technologií knihovna již žádný jiný patentově chráněný kód nebsahuje[14].

DjVu dokument verze 22

DocumentExpress verze 3.5 a 3.5.4 ukládal dokumenty ve formátu DjVu verze 22 (resp. 23). Od verze 3.6, kdy byla implementována další rozšíření formátu DjVu, pak jako DjVu verze 24.

  • Jak DjVu Solo, tak DocumentExpress umožňovaly při konverzi dokumentů do DjVu zvolit podle typu předlohy jeden ze čtyř přednastavených profilů - skenovaný dokument, barevná fotografie, černobílý dokument a indexovaný dokument.
  • Objevily se také náhledy
  • Svazky dokumentů bylo možné uložit buď jako pevný, nebo volný svazek.
  • Obě aplikace také umožňovaly tvorbu hyperlinků

Rozdíl mezi komerční aplikací DocumentExpress a aplikací DjVu Solo byl především v dalších opravných algoritmech, které LizzardTech implementoval pouze u svých komerčních produktů. Aplikace pomocí těchto algoritmů při konverzi používá optimální segmentaci barevných vrstev, což se projeví zvláště při zpracování dokumentů, které byly nějakým způsobem poškozené (resp. obsahovují strojopis, čárovou grafiku atd.). Při obdobné kvalitě zpracování tak lze u DjVu souboru téže stránky dosáhnout mnohem lepšího kompresního poměru.

Dalším rozšířením komerční aplikace byla virtuální tiskárna, která umožňovala přímý tisk do DjVu


OCR od verze 3.5 omezení pouze na latinku

4.1.0 - nové možnosti poznámek - bitmapa, čára základní geometrické obrazce, polygon, přišpendlená poznámka Prvně se objevily záložky

V roce 2004 se objevila verze 5.0 (zmizely poznámky neboť značně zpomalovaly čtení a zvětšovaly objem souboru) Byly zakoupeny práva na engine ReadIris a objevil se nový modul Enterprise Workflow Manager

také se objevil vodoznak. Umožňoval ho přidávat výlučně Workflow manager Editace profilů -scénáře

Rozdíl mezi virtuálním tiskem do djvu a konverzí postscriptu do Djvu

V roce 2005 se objevila verze 6.0 [15]

  • Možnost editace záložek
  • rozšířené možnosti hyperlinků
  • Znovu se objevila možnost měření, která sice byla již ve verzi 4, musela však být zapsána v souboru.

DocumentExpress verze 6.0 ukládá dokumenty následovně: Starší dokument do kterého se přidá nějaké rozšíření se uloží jako verze 26. Pokud je tento dokument editován znovu a tato rozšíření se odstraní, pak se uloží jako verze 25. je to kvůli tomu, že prohlížečka pak zbytečně neprovádí některé procesy.


Secure DjVu

Upravený DjVu formát obsahující kryptované chunky - Secure DjVu (neboli "zabezpečené" DjVu) je implementován pouze v komerčním produktu DjVuExpress Enterprise a to od verze 6.1, kterou začal prodávat ještě LizardTech od června 2007

Specifikaci této úpravy formátu DjVu uvolnila fa. Celartem 25. září 2007. Tato "specifikace" však pouze popisuje jakým způsobem je kryptování implementováno na strukturu DjVu dokumentu. Vlastní kryptovací metody však součástí specifikace nejsou. Z toho důvodu nelze napsat opensource prohlížeč, který by byl schopen pracovat s takto "zabezpečenými" DjVu dokumenty. Tj. který by umožňoval jejich čtení.

I když by technicky bylo možné implementovat nějakou opensource kryptovací metodu, znamenalo by to ve skutečnosti pouze podporu proprietárního prohlížeče, neboť tu by mohl díky otevřenosti kódu Celartem bez problémů do svého produktu implementovat.

Navíc formát SecureDjVu není pouhým rozšířením původního DjVu formátu, ale dosti zásadním způsobem překopává jeho vnitřní strukturu. Ta umožňuje umístit do SDJV i nekryptované DjVu dokumenty, ale nezachovává zpětnou kompatibilitu.

Nejspíš i to je důvodem, proč DjVuLibre dokumenty tohoto typu ignoruje.

Celartem - Caminova 2007-?

Na konci roku 2007 koupila LizardTech japonská firma Celartem. Vedení této firmy pravděpodobně rozhodlo, že LizardTech bude do budoucna nabízet již pouze své produkty na základě formátu MrSid a tak přislíbené vydání aplikace Document Express Enterprise Edition 7.0 již proběhlo pod jejich vlajkou.

Zřejmě to však nebylo asi nejlepší řešení, neboť další vývoj a prodej produktové řady DocumentExpress převzala nově založená dceřinná společnost Celartemu založená r.2009 Caminova. Ta vydala r.2009 Document Express Editor verze 6.5 a v lednu 2010 vyšla i nová verze aplikace Document Express 7.5 Enterprise. Z hlediska funkcionality se však zdá, že žádný zásadní vývoj u těchto aplikací od r.2007 neproběhnul.

Konec komerčních DjVu aplikací

Po roce 2010 se firma LizardTech plně přeorientovala na GIS aplikace a oblast elektronického zpracování dokumentů přenechala komerčně úspěšnějším produktům firmy Adobe, které pracují s formátem PDF.

Konec komerčních aplikací neznamenal konec DjVu formátu. Bohužel opensource aplikace, která by nabídla obdobný komfort při editaci DjVu dokumentu jako DjVu Solo 3.1 zatím nevznikla. Objevily se ale jiné nástroje, které posunuly především možnosti zpracování textové vrstvy získané přes OCR. V současné době tak většina DjVu dokumentů vzniká konverzí z PDF.


Čtení DjVu souborů

Základním nástrojem pro práci s DjVu soubory jsou prohlížečky, které umožňují čtení již hotových DjVu dokumentů.

Ty mohou být dostupné buď ve formě pluginu do internetového prohlížeče, nebo jako samostatné aplikace.

Podpora prvků DjVu formátu v prohlížečkách

Poznámka Z následujícího přehledu byly vyřazeny již zastaralé verze aplikací pro čtení DjVu souborů, které již nejsou běžně ke stažení.

Všechny uvedené aplikace lze zprovoznit v linuxovém prostředí – aplikace pro MS Windows jsem testoval pod wine v prostředí PlayOnLinux.


Základní funkcionality DjVu prohlížeček
Jméno aplikace Taby Podpora pro EXIF Podpora pro XMP Náhledy Rejstřík Hyperlinky Podpora textové vrstvy Zobrazování alternativního textu v bublině Záhlaví a zápatí při tisku[16]
Djview (4.10) ne ano ne ano ano ano ano ano ne
JavaDjVu 8.09 ne ne ne ne ano ano ano ano ne[17]
DjVu Browse plug-in 6.1.4 build 35467 ano ne ne ano ano ano ano ano ano
qpdf ano ano ne ano ano ano[18] ano ano ne
Zathura ne ne ne ne ne ano[19] ano ne ne
SumatraPDF ano ne ne ne ano ano ano ne ne


Podpora dsed elementů
Jméno aplikace url oval rect poly xor shadow_in border border_avis pushpin line arrow none
Djview (4.10) ano ano ano ano ano ano ano ano ano ano ano ano
JavaDjVu 8.09 ano ano ano ano ano ne ano ? ano ano ano ano
DjVu Browse plug-in 6.1.4 build 35467 ano ano ano ano ano ano ano ano ano ano ano ano
qpdf ano ano ano ano ne ne ne ne ? ? ? ne
Zathura ne ne ano ne ne ne ne ne ne ne ne ne
SumatraPDF ano ano[20] ano[20] ne ne[20] ne[20] ne[20] ne[20] ne ne ne ne[20]
  1. Pracuje s ním kupř. internetový archív http://www.archive.org
  2. První verze PDF formátu se objevila v roce 1993, tedy o tři roky dříve, než začal vývoj DjVu ve firmě AT&T Laboratories.
  3. Fa. Adobe Systems vyvíjela software jak pro Mac OS X, tak MS Windows ale u každého z nich se tisk řešil jiným způsobem. U Apple šli cestou lokálního tiskového serveru CUPS, který se dnes používá i u jiných unixových systémů. U Microsoftu závisela výsledná podoba tisku na konstelaci lokální instalace - dostupných fontech, aplikaci a ovladači tiskárny.
  4. Verze 1.3 (z r. 2000) pracovala pouze s CID fonty. TrueType a OpenType fonty podporuje PDF až od verze 1.6, uvedené v r. 2004
  5. Takový PDF dokument se již nedá znovu editovat, a pokud nemá skrytou textovou vrstvu, ani prohledávat. Skrytá textová vrstva, jako má DjVu, byla do specifikace PDF zahrnuta až od rozšířené verze 1.7 v r. 2008.
  6. U původního formátu svazků (který nebyl součástí specifikace DjVu) každá jednotlivá stránka svázaného dokumentu odkazovala na index (identifikovaný jako 'DIR0'). Prohlížečka tedy nepracovala s jedním kořenovým dokumentem, ale s každou stránkou samostatně. V případě, že byl index poškozen (nebo byl nedostupný) přestaly stránky fungovat jako svazek. Nová specifikace vyřešila otázku svazků obráceně. Při prohlížení nepracuje prohlížečka rovnou s jednotlivými stránky svazku, ale s jedním kořenovým DjVu dokumentem, který obsahuje blok dat s indexem (indentifikovaný jako DIRM). Ten, podle typu svazku, obsahuje buď offsety na jednotlivé stránky nebo jména fyzických souborů, které jsou součástí svazku.
  7. O existenci formátu DjVu se autor tohoto manuálu prvně dozvěděl v roce 1999, během studií na Masarykově Univerzitě v Brně. Nejstarší zachovaný dokument v DjVu formátu (vlastní provenience) byl vytvořen během prvních pokusů v r. 2003, tehdy ještě na platformě MS Windows, právě aplikací DjVu Solo.
  8. Jen pro zajímavost zde uvádím jaké byly prodejní ceny těchto aplikací na jaře 2005:
    • Document Express Desktop 4.1 - $195
    • Document Express Professional 4.1 - $249
    • Document Express Enterprise 5.1 - $6500(!)
    Pozn.: v r. 2005 kurz koruny vůči dolaru poprvé v historii klesnul k hranici 22Kč/$1
    V současné době (podzim 2010) nabízí fa. Caminova tyto aplikace:
    • Document Express Desktop 6.5 - $39
    • Document Express Professional 6.5 - $149
    • Document Express Enterprise 7.5 - aktuální cenu se nepodařilo zatím zjistit
  9. V současné době obě variace vychází z původní verze Proffesional a jsou označovány jako DjVu Editor. Liší se tím, že variace Desktop neobsahuje OCR engine.
  10. Od verze 7.0 je však Document Express Enterprise díky vazbě na .NET a autorizační mechanismy MS svázan již výlučně s platformou MS Windows.
  11. Léon Bottou je jeden z původních vývojářů formátu DjVu
  12. Podrobně je popsána celá záležitost s patenty přímo ve zdrojových kódech DjVuLibre.
  13. Text tohoto prohlášení i elektronickou kopii dopisu v níž LizardTech upřesnil co je předmětem omezení můžete nalézt mezi Přílohami
  14. I když byl součástí uvolněného kódu původní Z-kodéru, který používal patentově chráněný aritmetický MEL kodér, používá DjVuLibre pro kompresi přepsanou opensource variantu s názvem ZP-kodér. I ta pochopitelně používá metody, které jsou patentově chráněné, ty však (na rozdíl MEL kodéru) LizardTech pro GPL použití uvolnil.
  15. verze 5.1 byla dodávaná ve dvou variacích Unlimited a Limited, která byla omezená na 25000 konverzí. DocumentExpress LizzardTech nikdy nenabídnul jako OEM, nebo jako Academic Edition.
  16. Podpora elementů phead a pfoot
  17. Nemá podporu tisku
  18. Aktivní oblasti s odkazy jsou trvale viditelné.
  19. Aktivní oblasti s odkazy jsou defaultně skryté. Zobrazí se jen v případě, že je stisknuta na stránce s odkazy klávesová zkratka Shift+f.
  20. 20,0 20,1 20,2 20,3 20,4 20,5 20,6 Okraj se u odkazů nikdy nezobrazuje

Plnotučné desktopy

Linux

Pro linux je k dispozici čtečka djview, která je součástí DjVuLibre. Její starší verze pužívala pro své GUI knihovny Qt3. Proto se označovala jako 3. Aktuální založená na Qt4, již má doplněnou řadu věcí co původní verzi 3 scházely a její vývoj stále aktivně probíhá.

Aktuální verze 4.10.3 již má podporu i pro Qt5. Podporuje rejstříky (outline), zvýraznění oblasti, oválné hyperlinky, zobrazování metainformací, atd. V současné době jde o nejlepší čtečku djvu souborů.

Plusy
- funguje zobrazování metainformací jak pro dokument, tak jednotlivé listy
- zobrazuje rejstříky a náhledy
- fungují vložené poznámky
- fungují všechny typy hyperlinků (typ polygon jsem nezkoušel )
- fungují vložené šipky
Mínusy
- nefunkční tisk přímo na tiskárnu (může být problém mojí distribuce)
- pracuje vždy s jedním dokumentem, tzn. při otevření nového dokumentu předchozí uzavře

Kromě ní umí s DjVu pracovat i jiné linuxové aplikace - např. Evince, Imagemagick, XnView, Irfan aj. Ovšem většinou se omezují pouze na zobrazení obrazové vrstvy. K renderování obrazu využívají knihovny DjVuLibre. Výjimkou je aplikace Imagemagick, která používí pro konverzi DjVu vlastní kód. Většina z nich však vůbec neumí pracovat s metainformacemi DjVu. čestnou výjimkou je v tomto směru Okular

MS Windows

Open source prohlížečky DjVu dokumentů pro platformu MS Windows

WinDjView

Za vývojem této prohlížečky stál Андрей Жежерун[1] (čti: Andrej Žežerun) je WinDjView. K renderování stránek používá (stejně jako djview knihovnu DjVuLibre. První použitelná verze (0.4.2) byla uvolněna v r. 2006, a poslední 2.1 je z 23. února 2015[2].

Mac OS X

MacDjView open source prohlížečka od stejného autora jako WinDjView. Vzhledem k tomu že verze 0.1.2 je první a poslední vydání z r. 2006, předpokládám že se už dále nevyvíjí. Mezi tím totiž začaly DjVu formát, zpravidla s využitím knihovny DjVulibre podporovat i jiné, rozšířenější čtečky elektronických knih.

Mobilní platformy

V současné době (r.2015), již existuje pro každou z mobilní platformu čteček které zvládají také DjVu formát celá řada. Rozdíl mezi nimi a těmi pro plnohodnotné OS je především v tom, že ty mobilní se většinou omezují pouze na zobrazování grafické informace a neumí využívat všech vlastností DjVu formátu. Jako je například zobrazení skrytých poznámek, využití hyperlinků, aj. Toto je pouze ilustrativní přehled:

VuDroid
je open source prohlížečka DjVu a PDF dokumentů pro mobilní OS Android, kterou vyvíjí Pavel Tiunov.
NSR Reader
Telefony Blackberry Q10 jsou založeny na operačním systému QNX, který umí spouštět také aplikace primárně určené pro Android. Existuje ale i tato nativní aplikace, která v některých parametrech Androidí aplikace předčí. Bohužel je placená

Zastaralé DjVu prohlížečky

Čistě z nostalgie zde zmíním i prohlížečky pro dnes již zastaralé mobilní systémy

Symbian
Symbianu již na mobilních zařízeních definitivně zazvonil umíráček. Svého času pro mobilní Symbian 9.3 (s60v3) bývala k dispozici open source aplikace SymDjvu, kterou naprogramoval Алексей Зарянов (Alexej Zarjanov). Poslední verze 1.0 alpha byla uvolněna v červnu 2009. K renderování stránek využívala knihovnu DjVuLibre. V současnosti se již nevyvíjí a nemá ani žádný oficiální repozitář i když se stále kdesi na internetu válí.
Windows Mobile 2003/2005
Pro zařízení s Windows Mobile, existuje prohlížečka PocketDjVu, kterou vyvíjel Igor Solovjov od konce r. 2006. Poslední dostupný build byl ve verzi 0.9.6.3. Její zdrojové kódy jsou ale stále dostupné - http://code.google.com/p/pocketdjvu
Windows CE
I pro zařízení s MS Windows CE existovala open source prohlížečka DjVu formátu DjVuCE 0.1. I tuto aplikaci lze ještě z internetu vyšťárat.

Jediná multiplatformní prohlížečka naprogramovaná v Javě je Java DjVu Viewer. Je to už ale dávno mrtvý projekt - poslední verze (0.8.09) vyšla v říjnu 2005. Uvádím ji zde pouze proto, že na ni lze na internetu stále ještě narazit.

Když jsem ji naposled zkoušel, tak jsem musel subjektivně konstatovat, že stránky renderuje velmi pomalu, a nebyl k dispozici ani žádný dialog s bližšími informacemi o stránkách ve svázaném dokumentu. Byla zde sice nějaké podpora záložek (outline), a editaci textu (pro výběr textu se hlavní okno přeplo do módu, který vypsal podobný výstup jako djvutxt (DjVuLibre), ale celkově to nebylo použitelné.

Anatomie DjVu dokumentu

DjVu dokument je produkt zobrazovací technologie, která byla postavena na výchozím poznatku že u klasického, až již psaného či tištěného, dokumentu zabírá "barva", která je nositelem textové informace, z celkové plochy pouhých pár procent. Je-li písmo (popředí) odseparováno za pomoci masky od pozadí, lze využít při kompresi každé z těchto vrstev postupů, které výrazně zlepší jejich kompresní poměr.

Komprese používané u DjVu

Identifikace použité komprese v označení obrazové vrstvy

bz
vrstva černobílá (resp. v indexovaných barvách) komprimovaná BZZ
44
vrstva komprimovaná IW44
jp
vrstva komprimovaná JPEG
2k
vrstva komprimovaná JPEG-2000
mmr
černobílá vrstva komprimovaná G4

BZZ - základní kompresní algoritmus

Výchozí kompresní algoritmus pro DjVu byl postaven, podobně jako bzip2, na Burrows-Wheelerově transformaci v kombinaci s algoritmy Karp-Miller-Rosenberga a Bentley-Sedgewicka. Spolu s dalšími technikami se využívá pro kompresi barevných vrstev u JB2 a při kompresi vrstev které nesou textovou informaci.

DjVuText - komprese JB2

JB2 není samostatný kompresní algoritmus, ale aplikace BZZ komprese na sadu samostatně komprimovaných bloků obrazových dat. Kompresní utilita nekomprimuje celý obraz, ale z celkové plochy obrazu vyseparuje pouze bloky, které nesou nějakou informaci (shapes) - typicky písmena - a pouze ty zakomprimuje pomocí BZZ. Do souboru se pak postupně za sebou ukládají souřadnice bloku, informace o jeho barvě, velikost komprimovaných dat a blok komprimovaných dat.

Prohlížečka při dekompresi postupně tyto bloky načítá a zobrazuje. Pro výsledný kompresní poměr tedy není ani tak důležitý počet barev, jako spíš počet a velikost komprimovaných plošek. Čím vyšší je u vstupního dokumentu úroveň "šumu", tvořeného různými drobnými artefakty ( nečistoty, ev. mechanická struktura skenovaného dokumentu) tím větší počet bloků je ke komprimaci a horší výsledný kompresní poměr.

Bitonální JB2 komprese se využívá při kompresi masky (vrstva 'Sjbz') a barevná u popředí, je-li v indexovaných barvách (vrstva 'FGjz').

U vícestránkových dokumentů lze kompresní poměr zlepšit také použitím sdílené 'Djbz' vrstvy. Ta je založena na předpokladu, že se podobné komprimované plošky (písmena) na stránkách opakují. U stránky, která využívá sdílenou 'Djbz' vrstvu se do 'Sjbz' vrstvy (masky) ukládají pouze ty komprimované plošky, které ve sdílené 'Djbz' vrstvě nevyskytují.

DjVuPhoto - komprese IW44

Pro kompresi obrázků používá DjVu kompresní formát založený na vlnkové (wavelet) kompresi. Ta je založena na tom, že barevný obrázek tvoří barevné plošky, které lze vymezit pomocí křivky.

Oproti klasické bitmapové kompresi při které je obrázek popsán jako jeden barevný bod, lze obrázek kde je barevná plocha definována pomocí křivky zvětšovat, aniž by se z něj stala změť barevných čtverečků.

Komprese IW44 funguje tak, že se obrázek nejprve zredukuje na celistvé barevné plošky, ty se převedou na křivky (splices), a ty se pak podle předem zvoleného schématu umístí do dalších vrstev.

Při generování obrázku pak prohlížečka tyto vrstvy postupně načítá a zobrazuje.

IW44 se používá především ke kompresi fotografií, u kterých drobné rozostření nevadí, barevných obrázků a obrázků v odstínech šedi.

DjVuLayered - aplikace masky

U IW44 platí, že čím celistvější je barevná plocha, tím lze dosáhnout lepší komprese. Proto je výhodné využít při kompresi pozadí psaných, resp. tištěných dokumentů masku, která odfiltruje popředí. Díky tomu, že maska odfiltruje popředí, lze pozadí "popsat" pomocí menšího množství křivek a tím pak dosáhnout vyššího kompresního poměru.

Každý DjVu dokument je ve své podstatě vrstvený DjVu dokument (DjVuLayered), který může obsahovat minimálně jednu vrstvu, většinou však tyto dokumenty obsahují masku, popředí i pozadí.

Schéma DjVu svazku

Schéma DjVu dokumentu

Základem je stránka, která má několik vrstev tzv. "chunks". Jednotlivé stránky lze spojovat do jednoho celku - "svazku" (bundle) pomocí aplikace djvm. V případě rozsáhlejších dokumentů umožňuje djvu formát také volnější spojení svazku (indirect), kdy jsou stránky uloženy v jediném společném adresáři a svázány jedním indexovým djvu souborem.

Převod mezi "bundle" a "indirect" lze bez problémů provádět pomocí djvmcvt. Výhodou spojených stránek je mimo jiné možnost používat interní hypertextové odkazy, podobně jako tomu je u PDF, generovat náhledy, atd.

Výpisu struktury pomocí utility djvudump se liší podle toho, zda je dokument typu "bundled" nebo "indirect". Protože v "bundled" svazku jsou přítomny zároveň všechny stránky, není problém vypsat také informace o vrstvách které obsahují. To však neplatí v případě že je dokument typu "indirect". Příklad téhož dokumentu ve formě:

"indirect"

  FORM:DJVM [136]
    DIRM [78]         Document directory (indirect, 3 files 2 pages)
      p0001.djvu -> p0001.djvu
      shared_anno.iff -> shared_anno.iff
      p0002.djvu -> p0002.djvu
    NAVM [38]

"bundle"

  FORM:DJVM [84467]
    DIRM [90]         Document directory (bundled, 3 files 2 pages)
    NAVM [38]
    FORM:DJVU [51805] {p0001.djvu}
      INFO [10]         DjVu 4960x7016, v24, 600 dpi, gamma=2,2
      INCL [15]         Indirection chunk --> {shared_anno.iff}
      Sjbz [28088]      JB2 bilevel data
      FGbz [5681]       JB2 colors data
      BG44 [4822]       IW4 data #1, 72 slices, v1.2 (color), 1654x2339
      BG44 [2683]       IW4 data #2, 11 slices
      BG44 [3939]       IW4 data #3, 10 slices
      BG44 [6399]       IW4 data #4, 10 slices
      TXTz [7]          Hidden text (text, etc.)
      ANTz [71]         Page annotation (hyperlinks, etc.)
    FORM:DJVI [65] {shared_anno.iff}
      ANTz [53]         Page annotation (hyperlinks, etc.)
    FORM:DJVU [32423] {p0002.djvu}
      INFO [10]         DjVu 4960x7016, v24, 600 dpi, gamma=2,2
      INCL [15]         Indirection chunk --> {shared_anno.iff}
      Sjbz [15651]      JB2 bilevel data
      FGbz [497]        JB2 colors data
      BG44 [4836]       IW4 data #1, 72 slices, v1.2 (color), 1654x2339
      BG44 [2326]       IW4 data #2, 11 slices
      BG44 [3202]       IW4 data #3, 10 slices
      BG44 [5719]       IW4 data #4, 10 slices
      ANTz [72]         Page annotation (hyperlinks, etc.)
      TXTz [7]          Hidden text (text, etc.)

Kromě stránek s obrazovou informací může obsahovat DjVu dokument také další stránky. Každá z nich je určena parametrem FORM. Podle jejich kodu můžete poznat jakou informaci obsahují

DJVM

Je identifikátor, který najdete výhradně u vícestránkových DjVu dokumentů. Může obsahovat jeden až dva bloky informací. Vždy obsahuje blok DIRM a pouze je-li součástí svazku textový rejstřík (outline) obsahuje také blok NAVM.

DIRM

Je blok dat, který se vyskytuje u všech typů svázaných dokumentů. Obsahuje základní informaci o dokumentech, které jsou součástí svazku a také informaci, zda-li je svazek pevný či volný. Na tom totiž záleží jak vypadá struktura dat.

Na rozdíl od volného (indirect) svazku obsahuje pevný (bundled) svazek blok s offsety jednotlivých stránek.

INT8 (1 bajt) informace o typu dokumentu. Může mít pouze dvě hodnoty 1 (indirect) nebo 129 (bundle)
Následující blok následuje pouze u pevných (bundled) svazků...
INT16 (2 bajty) celkový počet spojených dokumentů
Následující sekvence offsetů se opakuje podle počtu vložených dokumentů, a to včetně dokumentů sdílených!...
INT32 (4 bajty) offset na kterém začíná spojený dokument

Za offsety následuje komprimovaný blok dat. U volných (indirect) svazků následuje komprimovaný blok dat bezprostředně za identifikátorem typu svazku. Obsah komprimovaného bloku dat se opět liší podle typu svazku.

U pevného svazku obsahuje informaci o velikosti, typu a ID vložených dokumentů:

INT24 (3 bajty) * počet vložených dokumentů délka vloženého dokumentu
INT8 (1 bajt) * počet vložených dokumentů typ vloženého dokumentu
Následující sekvence se opakuje pro jednotlivé vložené dokumenty až do konce bloku dat...
UTF8 (řetězec) ID vloženého dokumentu
NULL (1 bajt) oddělovač identifikátorů

U volného (indirect) svazku obsahuje pouze odkazy na soubory.

NAVM

Je komprimovaný blok dat, který následuje bezprostředně za blokem DIRM, pokud dokument obsahuje textový rejstřík (outline). U "volných" svazků je tedy stejně jako DIRM součástí indexového DjVu souboru. NAVM je součástí formátu DjVu od května 2003.

INT16 (2 bajty) celkový počet elementů
Následující sekvence se opakují pro jednotlivé položky až do konce bloku dat...
INT8 (1 bajt) počet potomků elementu
INT24 (3 bajty) délka řetězce popisu
UTF8 (řetězec) popis elementu
INT24 (3 bajty) délka řetězce URL
UTF8 (řetězec) URL

Viz ukázka rozbaleného bloku dat NAVM ukázkového souboru example_outline.djvu:

Poznámka
0000000  00  08  05  00  00  13  4f  6e  6c  69  6e  65  20  50  75  62
         .....8   5  ........19   O   n   l   i   n   e  __   P   u   b
0000016  6c  69  63  61  74  69  6f  6e  73  00  00  00  01  00  00  09
          l   i   c   a   t   i   o   n   s  .........0   1  .........9
0000032  53  61  6d  70  6c  65  73  20  31  00  00  0b  23  70  30  30
          S   a   m   p   l   e   s  __   1  ........11   #   p   0   0
0000048  30  31  2e  64  6a  76  75  01  00  00  0c  64  61  6c  73  69
          0   1   .   d   j   v   u   1  ........12   d   a   l   s   i
0000064  5f  75  72  6f  76  65  6e  00  00  00  00  00  00  0d  61  20
          _   u   r   o   v   e   n  .........0   0  ........13   a  __
0000080  6a  65  73  74  65  20  64  61  6c  73  69  00  00  00  00  00
          j   e   s   t   e  __   d   a   l   s   i  .........0   0  ..  
0000096  00  09  53  61  6d  70  6c  65  73  20  32  00  00  0b  23  70
         .....9   S   a   m   p   l   e   s  __   2  ........11   #   p
0000112  30  30  30  32  2e  64  6a  76  75  00  00  00  09  53  61  6d
          0   0   0   2   .   d   j   v   u   0  .........9   S   a   m
0000128  70  6c  65  73  20  33  00  00  0b  23  70  30  30  30  33  2e
          p   l   e   s  __   3  ........11   #   p   0   0   0   3   .
0000144  64  6a  76  75  00  00  00  15  50  75  62  6c  69  73  68  65
          d   j   v   u   0  ........21   P   u   b   l   i   s   h   e
0000160  72  73  20  54  65  63  68  6e  6f  6c  6f  67  79  00  00  1b
          r   s  __   T   e   c   h   n   o   l   o   g   y  ........27
0000176  23  70  75  62  6c  69  73  68  65  72  73  5f  54  65  63  68
          #   p   u   b   l   i   s   h   e   r   s   _   T   e   c   h
0000192  6e  6f  6c  6f  67  79  2e  64  6a  76  75  00  00  00  08  44
          n   o   l   o   g   y   .   d   j   v   u   0  .........8   D
0000208  6a  56  75  20  46  41  51  00  00  0d  23  64  6a  76  75  66
          j   V   u  __   F   A   Q  ........13   #   d   j   v   u   f
0000224  61  71  2e  64  6a  76  75
          a   q   .   d   j   v   u

Aplikace djvused interpretuje tento blok kódu následujícím způsobem:

user@stroj:~$ djvused example_outline.djvu -e 'print-outline'
(bookmarks
 ("Online Publications"
  ""
  ("Samples 1"
   "#p0001.djvu"
   ("dalsi_uroven"
    ""
    ("a jeste dalsi"
     "" ) ) )
  ("Samples 2"
   "#p0002.djvu" )
  ("Samples 3"
   "#p0003.djvu" )
  ("Publishers Technology"
   "#publishers_Technology.djvu" )
  ("DjVu FAQ"
   "#djvufaq.djvu" ) ) )

Informace vytažené přímo z kodu:

Celkový počet položek: 8

  1. 5 Online_Publications
  2. 1 Samples_1 #p0001.djvu
  3. 1 dalsi_uroven
  4. 0 a_jeste_dalsi
  5. 0 Samples_2 #p0002.djvu
  6. 0 Samples_3 #p0003.djvu
  7. 0 Publishers_Technology #publishers_Technology.djvu
  8. 0 DjVu_FAQ #djvufaq.djvu

Interpretace kódu v prohlížečce:

"Online Publications"
  • "Samples 1"
  • "dalsi_uroven"
  • "a jeste dalsi"
  • "Samples 2"
  • "Samples 3"
  • "Publishers Technology
  • "DjVu FAQ"
Upozornění U dokumentů Secure DjVu zůstává blok DIRM nešifrovaný. Více viz SDJVU

DJVI

Je identifikátor sdíleného dokumentu. Ten obsahuje informace, které mají být dostupné ze všech dokumentů ve svazku. Metainformace, osnova, atd. Při převedení pevného (bundle) svazku na volný (indirect) mají soubory s těmito sdílenými dokumenty příponu "iff". Výjimkou jsou náhledy, které používají příponu "thumb".

Poznámka U normálního DjVu dokumentu je v každém DJVI dokumentu vždy pouze jeden blok dat některého z následujících typů. U kryptovaného DjVu souboru to neplatí, protože u něj blok dat s informacemi o zabezpečení obsahuje bloky dva INCL a SINF.

Djbz

Je blok dat, který obsahuje knihovnu tvarů (shapes), které se na stránkách opakují - typicky jde o písmo. Vrstva Sjbz (maska) ve stránce dokumentu pak obsahuje pouze ty tvary, které se v tomto sdíleném bloku nevyskytují.

ANTa

Původní, dnes již nepoužívaný nekomprimovaný blok poznámkových dat

ANTz

U DjVuLibre se setkáte pouze s jediným dokument tohoto typu - "shared_anno.iff", ve kterém by měly být soustředěny informace společné pro celý svazek. U některých volných svazků však lze narazit i na jiné soubory - "docmeta.iff" a "pagemeta.iff", s nimiž pracoval (dnes již nedostupný) komerční software JRAPublish. Nebo "djvudir.iff", který se používal pro DjVu svazky do verze 20.

Vykuchání obsahu těchto souborů a jejich případná modifikace je relativně snadná operace.

  1. Nejprve pomocí djvmcvt převeďte pevný svazek (bundles) na volný (indirect). Tím se dostanete na jednotlivé sdílených metadat s nimiž lze dále pracovat.
  2. Strukturu dokumentů .iff lze dumpnout buď přes djvused, příkazem dump, nebo přes djvudump
  3. Z .iff souboru, pak lze vykuchnout vrstvu ANTz přes djvuextract
  4. Vytažený datový blok rozbalte pomocí bzz, a získáte normální textový dokument, který lze editovat běžným textovým editorem.
Manuální sestavení sdílené metadatové vrstvy

Editovat obsah sdílené metadatové vrstvy tímto způsobem, je ovšem nesmysl. Nicméně, tento postup se může hodit v situaci, kdy se při sloučení několika DjVu svazků objeví těchto vrstev více. V zásadě to sice ničemu nevadí, ale můžeme se dostat do situace, kdy bychom chtěli zrušit některá metadata z dodatečně vloženého svazku, nebo bychom chtěli sloučit obsah obou souborů do jednoho.

V takovém případě nezbývá než přistoupit k manuální práci.

Nejprve se sdílená data sloučí do jednoho z upravených souborů, který se opět pomocí bzz zabalí. Bohužel djvumake nedovoluje sestavit soubory .iff nezbývá tedy než si pomoci jinak.

Je třeba vyrobit hlavičku 'AT&TFORM' za kterou bude následovat na čtyřech bajtech celková délka upraveného .iff souboru, zkrácená o xxx bajtů, které patří hlavičce. Pak následuje hlavička sdílené vrstvy DJVI, kód vrstvy ANTz, na 4 bajtech délka zapakovaného souboru a za ní vlastní data.

Odstranění sdílené metadatové vrstvy

Bohužel pro odstranění sdílené metadatové vrstvy žádný triviální příkaz neexistuje. Udělat to lze pouze jediným způsobem – postupně vyexportovat u všech stránek dokumentu všechny vrstvy, a pak s z nich sestavit stránky znovu, pod stejným jménem. Ovšem bez vrstev INCL, které obsahovaly odkazy na sdílené metadatové soubory.

JRMD

S tímto identifikátorem datového bloku se můžete setkat pouze u dokumentů, které generoval již výše zmíněný JRAPublish. Podle stránky ( dnes již nedostupné ) http://www.planetdjvu.com/metadata_storage_for_djvu_files_m.htm měl tento blok obsahovat následující meta klíče:

docmeta.iff - Title, Author, Date, Subject, Summary, Publisher
pagemeta.iff - Author, Date, Subject, Publisher

Vrstvy JRMD které jsou součástí jednotlivých stránek by pak měly obsahovat meta klíče - Title a Summary

Vzhledem k tomu, že ve své "sbírce" mám jeden dokument, který byl vytvořený v JRAPublish, bylo možné tento blok částečně analyzovat

THUM

Tento datový blok s předem vyrenderovanými náhledy se ve svazku může objevit i víckrát, ale u menších svazků nemusí být uveden vůbec. Má význam u pevných svazků kde je hodně stránek, resp. jsou velké, takže by renderování náhledu za běhu příliš zdržovalo, nebo u volných svazků prohlížených on-line.

Náhledy mohou být vyrenderované zvlášť pro každou stránku, ale mohou být i seskupeny povícero v několika blocích. Identifikátorem náhledu je TH44.

DJVU

je vlastní stránka s obrazovou informací, která může kromě obrazových vrstev obsahovat také skryté textové vrstvy s textovým obsahem stránky, meta informacemi, hyperlinky, atd..

Vrstvy DJVU dokumentu

Základní informace o DjVu dokumentu (kolik má stránek, vrstev, atp.) lze získat buď pomocí utility djvudump, nebo příkazem dump při editaci DjVu dokumentu pomocí editoru djvused.

Obrazové vrstvy (chunks) lze extrahovat pomocí nástroje djvuextract. Ovšem pozor! Z DjVu souborů nikdy nelze získat zpět soubory identické s těmi, ze kterých byly vytvořeny, protože se při konverzi používá ztrátová wavelet komprese. DjVu dokumenty nejsou určeny k elektronické archivaci, ale pro zpřístupnění archivních dokumentů ke čtení a studiu.

Vytažené vrstvy však lze použít do jiných dokumentů (např jako "vodoznak"), nebo z nich vyrenderovat bitmapový obrázek, který lze odeslat k tisku.

INFO
je informační vrstva která obsahuje údaje pro výchozí nastavení obrázku. Jaké má použít prohlížeč výchozí rozměry, rozlišení, nastavení gammy. Od dubna 2001 je také jeho součástí příznak, který definuje jaká má být orientace stránky.
INCL
je virtuální vrstva která obsahuje odkaz na shared_anno.iff hlavičku a patičku dokumentu.
Sjbz
je vrstva která funguje jako maska při renderování popředí. V případě, že je zvolen při prohlížení režim kresba, nahrazuje chybějící barevné vrstvy. Může jí být obrázek zkomprimovaný nástrojem cjb2 ale také celý djvu dokument, je-li pouze jednobarevný. Od dubna 2001 podporuje kompresní formát jb2, který se na komprimaci této vrstvy používá, barvy. Předtím bylo možné použít pouze černobílou masku. Význam to má zvláště u starších tištěných dokumentů, kde díky tomu lze dosáhnout příznivé komprese celého djvu dokumentu. Zažloutlé pozadí stránek je odmaskováno do pozadí a písmo vhodným kontrastem vytaženo do popředí. Maska může být také vrstva typu Smmr - je-li komprimovaná technologií MMR/G4, kterou používá TIFF. Ovšem tento typ masky z principu nemůže být tak efektivní jako Sjbz. Vrstvu typu Sjbz totiž netvoří bitmapový obrázek, ale očíslovaná sada jednobarevných tvarů (shapes), komprimovaných vlnkovou kompresí, namapovaných do plochy o rozměru původního obrázku. Typicky jde o znaky písma. Místo opakujících se barevných pixelů se tak na ploše opakují pouze identifikační čísla tvarů. Využívá se toho i u sdílené obrazové vrstvy dokumentu typu Djbz.
Djbz
Je v podstatě sdílená sada tvarů (shapes) které se vyskytují na více než jedné stránce DjVu svazku. Vrstva Sjbz (maska) stránky pak u takového DjVu svazku obsahuje jen tvary, které se na žádné jiné stránce neopakují. To je výhodné v případě rozsáhlých DjVu dokumentů, u kterých dominuje text – typicky jde o knihy. Sdílená vrstva však může sebou nést i komplikace, které jsou spojené se závislostí stránky na sdílené vrstvě Djbz při manipulaci se stránkami. Proto je doporučeno přistoupit k vytvoření sdíleného slovníku pomocí utility jb2unify až ve finální fázi zpracování DjVu svazku.
BG
vrstva pozadí - je tvořena z několika vrstev řezů (slices), proto se při výpisu struktury DjVu stránky přes djvudump jich obvykle zobrazuje víc než jedna. Ve skutečnosti jde o jeden blok dat, zapakovaný přes bzz, který obsahuje kontejner FORM, a v něm je několik bloků typu PM44. Při extrakci přes djvuextract se tento kontejner vybalí, a jehoho strukturu lze vypsat přes djvudump. Každý z bloků dat, který obsahuje jednu vrstvu má hlavičku PM44.
Tyto bloky dat však nejsou stejné. Jsou číslované od 0 nahoru a ten první obsahuje navíc informace o verzi a velikosti obrazu.
Následující bloky dat pak obsahují soubory řezů (slices), jimiž se pak barevná informace nulové vrstvy v průběhu načítání stránky "doostřuje".
Při importu vyexportované vrstvy pozadí do nového souboru umožňuje djvumake určit kolik z těchto vrstev řezů se má naimportovat (není-li uvedeno jinak, naimportují se všechny). Ve výsledku tak může být nově sestavený DjVu dokument co do velikosti menší než originální DjVu dokument, ovšem s poněkud horším vykreslením detailů.
FG
vrstva popředí může být – na rozdíl od vrstvy pozadí, která je většinou enkódovaná přes c44 – vícero typů. Je-li vytvořená s aplikací masky, nebo přes c44, obsahuje také kontejner PM44 – ovšem bez dalších vrstev řezů. Ve výpisu se pak zobrazuje jako FG44
Vrstva popředí typu FGbz může být buď černobílá (vytvořená přes cjb2), nebo v indexovaných barvách (je-li enkódovaná přes cpaldjvu). Tvoří ji seznamem zakomprimovaných tvarů (shapes). Jednotlivé tvary jsou v rámci vrstvy odděleny mezerou.
Při "manuální" tvorbě dokumentu můžeme zadanými parametry ovlivnit, které barvy budou součástí popředí a které již spadnou do pozadí.
TH
je vrstva s náhledy stránek vložených v dokumentu.
TXT
je textová vrstva dokumentu s vlastním textovým obsahem stránky.
ANT
je textová vrstva dokumentu, určená pro poznámky, bookmarky, hypertextové odkazy atp. Součástí formátu od dubna 2005
JRMD
je dnes již nepoužívaná textová vrstva dokumentu, určená pro poznámky, bookmarky, hypertextové odkazy. Generoval ji JRApublish 3.0(software, který je dnes prakticky nedostupný.).
CIDa
byla vrstva, kterou podle mnou nalezených informací generovaly nástroje od Lizzardu kupř. Virtual Print Driver, nebo msepdjvu[3] verze 3.6.1, ovšem byla součástí DjVu formátu velice krátce[4] a od června 2002 není vůbec podporovaná.

Textová vrstva DjVu dokumentu

U DjVu formátu se pracuje s několika typy textových informací, z nichž každá používá svůj vlastní typ vrstvy. Pro uložení skrytého textového obsahu stránky (Hidden text), se používá vrstva TXTz – komprimovaná textová vrstva, se kterou lze (podobně jako s metadaty) pracovat pomocí utility djvused.

Pokud skrytá textová vrstva obsahuje nějaký text, pak se můžete při výpisu setkat s těmito prvky:

page
je přítomen vždy a vymezuje obsah stránky
column
sloupec - vyskytuje se v dokumentech co mají text stránek uspořádaný do sloupců
region
oblast?
para
odstavec
line
řádek
word
nejmenší prvek obsahující samotný text

Souřadnice - Každý z těchto prvků má uvedeny souřadnice levého horního rohu a pravého dolního rohu, jimiž je vymezena jeho pozice vůči stránce. V případě že je obsažen pouze jediný prvek přebírá nadřazený prvek souřadnice podřízeného prvku. Jinak platí že:

  • leftmin - nejnižší leftmin ze všech podřízených prvků
  • topmin - nejnižší topmin ze všech podřízených prvků
  • leftmax - nejvyšší ze všech podřízených prvků
  • topmax - nejvyšší ze všech podřízených prvků

Vytvoření skryté textové vrstvy pomocí OCR

Pro získání textu z obrazové vrstvy pomocí OCR vytvořil Jakub Wilk[5] vynikající opensource nástroj ocrodjvu, který pro rozpoznávání umožňuje vybrat jeden ze dvou OCR nástrojů:

cuneiform
rychlý OCR engine, ruské provenience. Při rozpoznávání českého či slovenského textu poskytuje v některých případech lepší výsledky než tesseract.

nebo

tesseract
se neustále intenzivně vyvíjí a má širokou podporu nejrůznějších jazyků a slovníků

Výpis textové vrstvy

Pro výpis textové vrstvy se používá utilita djvutxt

Korektury skryté textové vrstvy

Korektura skryté textové vrstvy v DjVu dokumentech byla dlouhou dobu dost nepohodlná. Bylo to do značné míry dáno tím, že neexistovalo vhodné GUI, které by to usnadnilo vizuální orientaci při editaci textu.

Vůbec první aplikací, která umožnila alespoň úpravy pozice a změnu velikosti jednotlivých prvků v rámci textové vrstvy, byl djvusmooth. Nicméně v současné době existuje mnohem lepší editor textové vrstvy, který pracuje s textovým obsahem vyexportovaným do DjVuXML formátu spřes utilitu djvutoxml, založený na javascriptu – WebDjVuTextEd


DjVu a metainformace

Metadata (Annotation) jsou u DjVu formátu umístěná na více místech.

Metadata ke stránce

Jsou uložená v podobně jako skrytý textový obsah stránky v samostatné vrstvě ANTz – což je komprimovaná textová vrstva, se kterou lze pracovat (podobně jako s textem) pomocí utility djvused.

Sdílená metadata

Kromě toho však může DjVu soubor obsahovat také sdílená metadata. Jsou uložené v samostatné stránce s příponou .iff, na kterou ostatní stránky (vždy s příponou .djvu) odkazují odkazem v samostatné vrstvě INCL (tzv. nepřímý linkindirection chunk).

Mezi sdílená metadata patří informace společné pro všechny stránky – copyright, aktivní link, co odkazuje na obsah, & etc.

Typy metadat

V metadatové vrstvě se můžeme setkat v podstatě s těmito základními typy metadat:

xmp
Obsahuje blok metadat ve XMP formátu, který obsahuje informace ke grafické vrstvě stránky
metadata
Normované klíče, které jsou interpretovány jako EXIF tady – obsahují informace o titulu, autorech, tcůrcích dokumentu aj.
mode, zoom, align, background
Jsou metadatové elementy, jimiž lze ovlivnit výchozí nastavení prohlížeče DjVu souborů, pokud je ovšem podporuje.
phead, pfoot
Jsou metadatové elementy, určené pro tisk DjVu stránky. V praxi se však neujaly – prakticky žádný ze současných prohlížečů DjVu souborů s nimi nepracuje.
maparea
Každý hyperlink, zvýrazněná oblast na stránce či textová poznámka

XMP

Metadata

Metadata mohou obsahovat bud jednotlivé stránky DjVu dokumentu nebo celý dokument a jsou součástí skryté textové vrstvy s poznámkami (annotations). Lze je tedy vložit dvěma způsoby. Bud pomocí volby set-ant nebo set-meta V prvém případě je třeba použít plný zápis. Syntaxe je jednoduchá. Klíčovým slovem může být jakékoliv slovo bez mezer a diakritiky. djvused vám sice umožní klíčové slovo s diakritikou vložit, ale djview vám potom odmítne s meta informacemi dále pracovat.

Obsah klíče je oddělen od klíčového slova mezerou a je uzavřen do uvozovek

Příklad syntaxe pro vložení přes set-meta:

klic "Text co se zobrazí pokud umožňuje prohlížeč djvu dokumentů pracovat s metatagy"

Příklad syntaxe pro vložení přes set-ant:

(metadata 
   (klic "Text co se zobrazí pokud umožňuje prohlížeč djvu dokumentů pracovat s metatagy") )

Hypertextové odkazy

Odkazem hypertextových odkazů v DjVu dokumentu nemusí být nutně URL ale lze použít také skok na stránku v rámci dokumentu podle jejího pořadového čísla např. "#2" nebo jména dokumentu "p001_002.djvu" eventuálně vloženého titulku stránky (tu už ale vařím z vody).

Příklad:

(maparea "http://www.neco.cz" "Text co se zobrazí v bublině" (rect 225 0 804 61) (xor))

alternativně lze použít

(maparea (url "http://www.neco.cz" "_blank") "Odkaz bude otevřený do nového okna prohlížeče" (rect 225 0 804 61) (xor))

Hlavička a patička stránky

Nastavení hlavičky a patičky se vkládá jako poznámka (set-ant) do shared_anno.iff (select-shared-ant). Jejich tisk je však záležitostí prohlížeče DjVu souborů, zda je do tisku pošle či nikoliv. Jinde totiž než na vytištěném dokumentu záhlaví a patička vidět není. Pokud vím tak ani žádná prohlížečka krom produktu Lizardtechu tento prvek při tisku zatím nepoužívá.

Klíčová slova

  • phead - hlavička
  • pfoot - patička

Zajímavé je, že lze do nich vkládat proměnné - bohužel, nevydedukoval jsem nic než že..

  • proměnnou je nahrazeno místo v uvozovkách..
  • je úplně putna jestli se do uvozovek napíše date, time, page.. vždy totiž nahradí..
    • obsah pravého horního rohu - číslem stránky / celkový počet stránek
    • obsah levého dolního rohu - názvem tištěné stránky dokumentu
    • obsah pravého dolního rohu - aktuálním datem
  • nelze kombinovat text a proměnnou v takových případech se zobrazí pouze text

Příklad použití:

(phead "left::Text v levém rohu" "right::Text v pravém rohu" )
(pfoot "left::Text v levém dolním rohu. Napravo se zobrazí aktuální datum" "right::" date"" )

Rejstřík

ant txt meta outline thumbnails

Akce print output set remove

Zvláštní kombinace: print-pure-txt print-merged-ant output-all


Rozbalovací menu - outline/bookmarks - (bookmarks ("První stránka" "#1") ("Druhá stránka" "#2"))

Jak vytvořit DjVu dokument s využitím opensource nástrojů

Aby bylo možno s dokumenty v djvu pracovat, je nutné mít v systému nainstalované příslušné knihovny a nástroje - distribuční balíky mají obvykle v názvu "djvu", ale kdo chce, tak si je může zkompilovat sám. V případě aplikace gsdjvu, kterou využívá djvudigital to je dokonce nutnost.

Konzervace psaného či tištěného dokumentu

Pokud chceme zpracovat do djvu klasický papírový dokument, tak jej musíme nejprve naskenovat. Už přitom musíme mít na paměti, že v případě djvu platí - čím kvalitnější výchozí předloha, vyšší použité rozlišení při skenování a celistvější barevné plochy v rámci dokumentu, tím kvalitnější (a menší) výsledný dokument. Nalézt optimální hodnoty nemusí být jednoduché, zvláště v případě že zpracováváme dokumenty hodně barevné. Záleží pak hodně na zkušenosti zpracovatele.

Na hotový DjVu dokument pak můžeme aplikovat OCR pomocí ocredjvu. Tato aplikace výsledek umí rovnou vložit do DjVu dokumentu jako textovou vrstu - umožníte tím pak fulltextové prohledávání dokumentu. Korekturu textové vrstvy lze udělat pomocí nástrojů djvusmooth a djvused

Naskenovanou stránku můžete zpracovat rovnou příslušným enkoderem (na barevný obrázek použijeme c44 na černobílý cjb2), ale mnohem lepšího výsledku lze dosáhnout použitím masky a kombinací různých technik a nástrojů.

Skript pro převod naskenované stránky do DjVu

Tajemství malé velikosti DjVu souborů totiž není ve wavelet kompresi, ale v použití masky. Kdybychom totiž celý dokument i s barevnou informací zkomprimovali jednoduše pomocí barevného enkodéru c44, byl by zbytečně velký. Vyplatí se to pouze pouze v případě, že jsou na stránce jenom fotografie.

Objem dat lze snížit tím, že dokumenty naskenujete rovnou černobíle, a převedete do DjVu pomocí bitonálního enkodéru cjb2. Ovšem toto je řešení pouze pokud stránka nenese žádnou jinou informaci (např. fotografie, barevné pozadí, poznámky v textu atd.)

Optimální komprese dosáhneme odfiltrováním textu od pozadí (a obrázků) pomocí masky. V následujícím příkladu je uveden opravdu velmi jednoduchý konverzní skript, který umožňuje volitelně při konverzi upravovat práh masky. Lze jej použít i na dokumenty s fotografiemi, ale na takové je už lepší vytvořit sofistikovanější nástroj, který umožní pomocí masky odsunout obrázky do pozadí. Usnadní to mimo jiné i aplikaci OCR.

Poznámka
#!/bin/bash

TEMP_DIR="/tmp/$WINDOWID$BASHPID"
mkdir $TEMP_DIR
TEMP_IMG="$TEMP_DIR/temp.ppm"
TEMP_MASK="$TEMP_DIR/mask.pbm"
DJVU_MASK="$TEMP_DIR/mask.djvu"

case ${1##*.} in
    tiff) KONVERT="tifftopnm";;
    png) KONVERT="pngtopam";;
    jpg) KONVERT="jpegtopnm" ;;
esac

$KONVERT $1 | tee $TEMP_IMG | pamditherbw -threshold -value 0.${3-5} |pnmtoplainpnm > $TEMP_MASK;
cjb2 -lossy -clean $TEMP_MASK $DJVU_MASK;
djvumake $2.djvu Sjbz=$DJVU_MASK PPM=$TEMP_IMG;
EOF


Příklad použití:

./konverzni_skript.sh original.tiff vysledny 4
  1. Prvním parametrem je cesta ke konvertovanému dokumentu.
  2. Druhým parametr je název cílového djvu souboru
  3. Třetím, volitelným parametrem je nastavení prahu pro masku (není-li uveden, použije se hodnota 5)

Konzervace elektronického dokumentu

Pokud si kladete otázku jaký má smysl převádět do DJVU např. webovou stránku, tak mohu nabídnout několik odpovědí.

  • Podobně jako PDF uchová DJVU včetně jejího grafického vzhledu - je to v podstatě obrázek.
  • Navíc je možné do dokumentu natlačit i textovou vrstvu, kterou lze fulltextově prohledávat a v případě potřeby vytáhnout a použít pro kompilaci jiného textu.
  • Podobně jako PDF lze DJVU dokumenty spojovat do svazků a rozšiřovat o náhledy a hypertextové odkazy.
  • Na rozdíl od PDF je-li DJVU dokument otevíraný skrz URL, není nutno čekat na stažení všech stránek, ale stránky se načítají průběžně. Navíc, pokud má webserver pro HTTP/1.1 protokol volbu "byte serving" a podporuje ji také váš prohlížeč a nejrůznější proxy mezi vámi a serverem, tak lze přejít i na další stránky aniž by bylo nutno čekat až přijde řada na jejich stažení - browser si o ně řekně přednostně.


Asi nejjednodušším způsobem jak získat z elektronického dokumentu dokument djvu je použití aplikace djvudigital, ta však vyžaduje aby bylo v systému nainstalováno ghostscriptové rozšíření gsdjvu které bohužel nemá GPL licenci, tudíž není součástí distribučních balíků. Ovšem lze je bez problému stáhnout z CVS archívu a zkompilovat zvlášť.

Výchozí dokument pak vytiskneme do postscriptového či PDF souboru a ten pak převedeme do djvu

Manipulace se stránkami DjVu dokumentu

V předchozí kapitole bylo popsáno, jak vytvořit tzv. single-page dokument. Formát DjVu má podporu vícestránkových dokumentů a tyto jednostránkové dokumenty lze vázat do jednoho svazku, který může obsahovat další doplňkové informace, rejstřík, hypertextové odkazy atp.

Vytvoření svázaného dokumentu

Vícestránkový dokument lze vytvořit pomocí nástrojů djvm, resp. djvmcvt buď svázáním jednostránkových dokumentů,

djvm -c svazek.djvu strana1.djvu ... stranaN.djvu

nebo přidáním dalšího DjVu dokumentu - kterým může být i jiný svazek - k již existujícímu svazku ( v níže uvedeném příkladu je jím svazekA.djvu )

djvm -i svazekA.djvu stranka_nebo_svazek.djvu

Při vkládání stránky do svazku lze pořadovým číslem zvolit, od jaké pozice se má s vkládáním začít.

Zajímá vás co se stane s vrstvami u svázaných dokumentů, které obsahují sdílené informace?

Při vkládání platí, že přednost má dokument do kterého stránky vkládáme. Tudíž jeho sdílené vrstvy zůstávají zachovány. Sdílená vrstva importovaného svázaného dokumentu se sice rovněž vloží, ale pod upraveným názvem a prohlížeč s ní dále nepracuje.

Také - pokud vložíte stránku jinam než na konec dojde k rozhození rejstříku (outline) pokud odkazuje pořadovým číslem stránky a ne titulem či jménem cílové stránky.

Upozornění Pokud vložíte do svazku DjVu dokument, který obsahuje stránku se stejným názvem, bude importovaná stránka přejmenovaná. Má-li některá z importovaných stránek nastaven titul, tak o něj přijde. Tento fakt je třeba vzít v úvahu zvláště při úpravě pořadí stránek ve svazku. Jediný způsob jak se tomu vyhnout je - vyexportovat před operacemi se stránkami všechna skrytá textová data do samostatných souborů, upravit ručně a následně naimportovat pomocí djvused do cílového svazku.

Volný svazek (indirect)

Volný svazek na rozdíl od pevného (bundled) svazku ( který je tvořen jediným souborem) tvoří hlavní DjVu dokument s indexem a adresář, ve kterém jsou uloženy jednotlivé stránky.

DjVu svazky lze z pevných na volné (a obráceně) převádět nástrojem djvmcvt

Upozornění Při vytváření volného svazku musí cílový adresář - do kterého se budou při konverzi ukládat jednotlivé stránky - existovat

Export stránky z DjVu

DjVuLibre nemá žádný speciální nástroj, kterým by bylo možné vyexportovat jednu stránku z DjVu svazku. Asi nejjednodušším způsobem je převést pevný svazek na volný a pak žádanou stránku samostatně použít.

Export vrstev

Pro export jednotlivých vrstev z DjVu svazku ( či single-page dokumentu ) se používá nástroj djvuextract Tyto jednotlivé vrstvy lze pak použít při tvorbě nových DjVu dokumentů viz předchozí kapitolu DjVu/Jak vytvořit DjVu dokument nástroji z DjVuLibre.

Export obrazové informace

Právě u exportu obrazové informace je důležité si uvědomit, že DjVu je formát ztrátový, tudíž z něj nelze obnovit soubor zcela identický s tím, ze kterého byla DjVu stránka vygenerována. Dokonce ani kdyby byla vyexportovaná obrazová informace znovu zpracována do DjVu souboru nelze dosáhnout stejného výsledku jako v případě originálu. Více v kapitole Djvu/Formát DjVu a zabezpečení.

Obrazovou informaci lze vyexportovat pomocí nástroje ddjvu. Při exportu lze zvolit:

  1. mód, ze kterého má být stránka vyrenderovaná
  2. rozlišení budoucího obrázku
  3. velikost vyexportovaného obrázku
  4. a případně pomocí dalších voleb ovlivnit kvalitu výsledného obrázku

Vyexportovat lze také libovolně zvětšený či zmenšený výřez, nejenom celou stránku. Podporované formáty do kterých lze provést export:

  • pbm (černobílý), pgm (stupně šedi), ppm (plné barvy v RGB), pnm (formát, který může obsahovat kterýkoliv ze tří předcházejících)
  • rle (černobílý)
  • tiff plnobarevný formát, který ve výchozím stavu nemá nastavenou žádnou kompresi. Při exportu se snížením kvality se použije komprese JPEG
  • pdf podobně jako tiff ve výchozím stavu nepoužívá žádnou ztrátovou kompresi, není-li parametrem nastavená snížená kvalita.
Poznámka Do PDF lze DjVu dokumenty exportovat také přes postscript, pomocí nástroje djvups. Nejprve se z dokumentu vytvoří postscriptový soubor, jako pro tisk a ten se následně "vytiskne" do PDF


Export textových informaci a metainformací

Univerzálním nástrojem pro práci s textovou vrstvou je djvused, pro export těchto informací lze dále použít djvutxt resp. djvutoxml a pro import dat z upraveného xml souboru pak djvuxmlparser. Více se dozvíte v kapitole Textová vrstva DjVu dokumentu

Úpravy DjVu dokumentů

Aplikace OCR

for i in $(ls -1 *.xcf); do ./convert.sh $i && ocrodjvu --in-place -l ces out.djvu  && mv out.djvu ${i/.xcf/.djvu} ; done

Změna orientace stránky

djvused -e 'select 6; set-rotation +45; save' vicestrankovy_soubor.djvu

Odstranění stránky ze svazku

djvm -d vicestrankovy_dokument.djvu -d 5

Změna pořadí stránek

Nejjednodušším způsobem, jak změnit pořadí stránek, je rozbalit svázaný (bundled) DjVu soubor do volného svazku (indirect), pak rozbalené soubory stránek přejmenovat, tak aby bylo pořadí stránek správné a poté dokument znovu svázat

 mkdir vatra-28-1
 djvmcvt -i vatra-28-1.djvu vatra-28-1 index.djvu

Vytažení textu pro korekturu přes WebDjVuTextEd

 for i in $(ls -1 test*djvu); do djvutoxml $i ${i/.djvu/.xml}; done

Vygenerování náhledů pro WebDjVuTextEd

for i in $(ls -1 test*djvu); do ddjvu --format=tiff $i ${i/.djvu/.tiff} &&  convert ${i/.djvu/.tiff} ${i/.djvu/.png}; done

Vložení opravených textů zpět do djvu souborů stránek

for i in $(ls -1 test*djvu); do djvuxmlparser -o $i ${i/.djvu/.xml} ; done

Opětné svázání volného svazku do jednoho souboru

djvmcvt -b index.djvu ../vatra-28-1.djvu

Překlepy a velikost textových rámců lze udělat při finalizaci souboru přes djvusmooth. V něm lze také vytvořit anotace, hyperlinky a přidat další metainformace o původu dokumentu, jeho zpracování aj.

Nástroje pro úpravu DjVu dokumentů

Na základě empirického srovnávání konverzních výsledků komerční aplikace Document Express a opensource nástrojů z DjVuLibre, lze konstatovat, že u kvalitních předloh, skenovaných na kvalitním skeneru lze s komerčním nástrojem dosáhnout mnohem lepší výsledek. A to jak z hlediska kompresního poměru, tak i pokud jde o kvalitu OCR.

Naopak u předloh velice špatné kvality byl lepší výsledek spíše na straně opensource nástrojů. Navíc na straně opensource je jeden velice důležitý trumf - skutečný editor skryté textové vrstvy djvusmooth kterým lze provést korekturu výsledku OCR.

Djvusmooth

http://jwilk.net/software/djvusmooth

Je opensource editor DjVu dokumentů, jehož autorem (stejně jako ocrodjvu je Jakub Wilk.

Jde v podstatě o grafickou nadstavbu k jeho pythonovského modulu pro práci s DjVu, která je určena pro práci s metainformacemi a již existující skrytou textovou vrstvou..

Plusy
- umožňuje vytvářet a editovat záložky obsahu (outline)
- umožňuje vkládat hyperlinky a metainformace
- umožňuje editovat skrytou textovou vrstvu a měnit umístění a rozměry všech prvků textové vrstvy
- Pro OCR lze nastavit použitý jazyk a funguje docela dobře
Mínusy
- pouze v omezené míře umožňuje přidávat a odstraňovat nové prvky ve skryté textové vrstvě
- neumí prvky ve skryté textové vrstvě přesouvat

Aplikace je stále v aktivním vývoji

Djvusmooth 0.2.7.png

Ocrodjvu

http://jwilk.net/software/ocrodjvu

Je ve své podstatě konzolová nadstavba pro aplikaci OCR na DjVu dokumenty. Jako engine může používat buď Tesseract, nebo Cuneiform.

Zatím co ocrodjvu je samostatná konzolová aplikace, komerční nástroje pro zpracování DjVu obvykle pracují přímo s OCR aplikací třetích stran, kterou si nesou sebou. Výhodou ocrodjvu je že umožňuje zvolit která aplikace se má na OCR použít. Např.při použití cuneiform u stránky s českým textem lze dosáhnout mnohem lepšího výsledku, než komerčního produktu.

Také vhodnou volbou parametrů a úpravou zpracování vstupního dokumentu, lze dosáhnout kvalitnějšího výsledku OCR

Příklad aplikace ocrodjvu na DjVu dokument najdete jako přílohu. Pro porovnání je uveden výsledek OCR u aplikace Document Express.

Výstup z ocrodjvu byl upraven tím že odstavce byly zalomeny na řádky, pro větší přehlednost.

ocrodjvu Document Express
Mat/ic Icosa/tec/ran
!icet'b
IV/ KOMBINATOR ICKÉ HLAVOLAMY
5/ PLATONOVA TĚLESA A HRAČKY FIRMY PYRAMINX
ce těchto hraček je však velmi obtížné provádět, pokud hračky samy nejsou k dispozi-
 ci. Jako u Rubikovy kostky, i zde je potřeba si trochu zaexperimentovat, abychom na-
 lezli užitečné postupy.
Řekli jsme, že všechna Platónova tělesa byla vvužita ke konstrukci těchto hraček.
 Kdepak tedy márne ikosaedr?, zeptáte se zcela oprávněně. Ten je šikovně zamaskován
 do tvaru koule s názvern „Incredi Ball" — tedy neuvěřitelnÝ míč. Hračka je to krásná,
 ale víte-li si rady s dodekaedÍ ickou íílohou na Megaminxu, zvládnete ji okamžitě. In-
 credi Ball je totiž k IVIegaminxu ve stejnétn vztahu, jako minikostka ke klasické kostce.
 Trojůhelníky, ze kterúch se tato hračka skládá, se totiž při otáčení pohybují stejně jako
 rohové kostičky Megantinxu a navíc nemáte žátlné starosti s hranovými kostičkamL
 Na těchto příkladech vzájemných vztahů jednotlivúch hraček je vidět, že má smysl Še
 jimi zabúvat hlouběji jako celkem.
Scewb
Magic /cosahedron
ce těchto hraček je však velmi obtížné provádět, pokud hračky samy nejsou k dispozi-
ci. Jako u Rubikovy kostky, i zde je potřeba si trochu zaexperimentovat, abychom na-
lezli užitečné postupy.
Í{.ekli jsme, že všechna Platónova tělesa byla využita ke konstrukci těchto hraček
Kdepak tedy máme ikosaedr?, zeptáte se zcela oprávněně. Ten je šikovně zamask()Ván
do tvaru koule s názvem ..Incredi Bali" - tedy neuvěřitelný míč. Hračka je to krásná,
ale víte-li si rady s dodekaedrickou úlohou na Megaminxu, zvládnete ji okamžitě. In-
credi Bali je totiž k Megaminxu ve stejném vztahu, jako minikostka ke klasické kostce.
Trojúhelníky, ze kterých se tato hračka skládá, se totiž při otáčení pohybují stejně jako
rohové kostičky Megaminxu a navíc nemáte žádné starosti s hranovými kostičk mi.
Na těchto příkladech vzájemných vztahů jednotlivých hraček je vidět, že má smysl s
jimi zabývat hlouběji jako celkem.
lVI KOMBINATORICKÉ HLAVOLAMY
51 PLATONOVA Ti:LESA A HRACKY FIRMY PYRAMINX
209

Rozdíly:

  • ocrodjvu se pokusí rozpoznat nejenom řádky, ale také odstavce (Document express pracuje pouze s řádky)
  • ocrodjvu při rozpoznávání pravděpodobně primárně postupuje zleva doprava. Proto je text záhlaví umístěn před vlastním obsahem.
  • pokud jde o chyby při rozpoznávání, je výsledek tak 50:50

Komerční produkty

Komerční produkty oproti opensource nístrojům DjVuLibre produkovaly lepší výsledky z hlediska kompresního poměru. Bylo to dáno především tím, že obsahovaly další algoritmy, které podle charakteru dokumentu volily optimální parametry pro vlastní kompresi. Pochopitelně vždy záleží především na kvalitě vstupního souboru – čím kvalitnější předloha, tím lepší výsledek.


Bohužel vývoj i podpora všech komerčních aplikací pro práci se soubory DjVu formátu po r. 2010 skončila a v mnoha směrech již zastaraly protože neumějí…

  • …pracovat s meta tagy (podpora pro EXIF a XMP),
  • …editovat skrytou textovou vrstvu.
  • A byly prakticky všechny MS Windows only.

Nicméně jejich plnohodnotná opensource alternativa zatím stále neexistuje. Je to dáno do značné míry tím, že jsou dnes již většinou nedostupné. Naštěstí se mi je podařilo uchovat a tak je lze poskytnout v souladu s rozhodnutím Soudního dvora EU ze dne 3.7.2012 v souladu se Směrnicí 2009/24/ES ze dne 23. dubna 2009[6] O právní ochraně počítačových programů, poskytnout ke studijním účelům. S trouchou štěstí se dají v linuxovém prostředí rozběhat pod wine:

  • DjVu Solo 3.1
  • DjVu Editor
  • DjVu Express Pro 6.0
  • JRAPublish v2.0
  • DjVu Encode

Podrobnější informace o těchto aplikacích se lze dočíst na stránce věnované komerčnímu software.

Nástroje pro dávkové zpracování

Document Express 7.5 Enterprise

Document Express 7.5 Enterprise.png

ocrodjvu

Použití

Volby

Příklady použití

Instalace

Tato velice užitečná utilita mezi instalačními balíky Debianu od verze xx bohužel chybí.

gamera-4

Pro podporu paralelních výpočtů vyžaduje OpenMP. Při kompilaci by tedy měl být nainstalován balík libomp-dev

https://medium.com/swlh/openmp-on-ubuntu-1145355eeb2

Pokud je s tím nějaký problém, je potřeba podporu vypnout:

git clone https://github.com/hsnr-gamera/gamera-4
cd gamera-4
sed -i 's/has_openmp = None/has_openmp = False/' setup.py
pip3 install .

Instalace přes pip (pokud má být aplikace dostupná všem, je třeba vše spouštět pod rootem)

# git clone https://github.com/hsnr-gamera/gamera-4
# cd gamera-4
# pip3 install .

nebo rovnou..

# pip3 install git+https://github.com/hsnr-gamera/gamera-4#egg=gamera

Pod uživatelem lze na to jít přes vytvoření binárního balíčku:

$ python3 setup.py bdist_wheel

Zdrojákový balíček se udělá takto:

$ python3 setup.py sdist

Z toho vyleze soubor gamera-version-architecture.whl v podadresáři dist/ který se nainstaluje takto:

# pip3 install ./dist/gamera-*-*.whl

Po instalaci se spouští gamera_gui

https://github.com/hsnr-gamera/gamera-4

didjvu

Následně lze přes pip nainstalovat didjvu

# pip install didjvu

https://github.com/FriedrichFroebel/ocrodjvu.git

https://github.com/FriedrichFroebel/python-djvulibre.git

ocrodjvu

https://pypi.org/project/ocrodjvu/

# pip install ocrodjvu

Odkazy


djvusmooth

GUI pro úpravu metadatové a textové vrstvy DjVu souborů.

Použití

Volby

Příklady použití

WebDjVuTextEd

Použití

Volby

Příklady použití

djvutool

Shellový nástroj, určený pro práci s DjVu soubory, který využívá nástroje z DjVuLibre, didjvu, ocrodjvu a jiné pro vytvoření DjVu souborů a zpracování jejich textové a metadatové vrstvy. https://github.com/velwant/djvutool

Použití

Volby

Příklady použití

jb2unify

Tuto utilitu naprogramoval na konci dubna 2005 Yan Vernier[7].

Léon Bottou, správce DjVuLibre, ji však do kódu nezařadil, protože chtěl, aby byla podpora pro sdílení tvarů implementována přímo do cjb2 enkodéru. Tj. aby se slovníkem pracovalo rovnou při tvorbě Sjbz masky. Kromě toho měl obavu, aby někdo právně nenapadl kód DjVuLibre kvůli postupu, kterým jb2unify dělá primární selekci tvarů[8].

Byla to sice pěkná myšlenka, ovšem z praktického hlediska to nedává smysl, protože sdílení tvarů se vyplatí pouze tam, kde DjVu svazek obsahuje velké množství identických tvarů. To je ale v případě naskenovaných dokumentů spíš výjimečná situace.

I kdybychom aplikovali sofistikovanější srovnávací mechanismus, bylo zlepšení kompresního poměru mizivé ve srovnání s režijními náklady na vyhledání podobných tvarů.

Tato utilita pracuje s porovnáním tvarů 1:1. U DjVu dokumentů vytvořených z počítačově generovaných stránek svůj účel i tak splní, ale skenovaných dokumentů záleží na kvalitě předlohy. Sofistikovanějším nahrazováním tvarů na základě podobnosti písmen bychom sice uspořili nějaký datový prostor, ale vygenerovaná stránka by působila přinejmenším divně.

To byl pravděpodobně také důvod, proč Yan Vernier v implementaci podpory Djbz do nástrojů DjVuLibre dál nepokračoval.

Poznámka Utilita jb2unify není součástí žádné distribuce, protože původní repozitář se zdrojovým kódem přestal být dostupný. Podařilo se mi však z internetu původní kód vydolovat a upravit tak, aby jej bylo možné zkompilovat proti aktuální verzi DjVuLibre. V současné době je ke stažení na adrese https://github.com/velwant/jb2unify

Použití

jb2unify [-v] orig.djvu djbz.djvu [jméno_Djbz_slovníku]

Abyste porozuměli, jak tahle utilita funguje, je třeba znát postup, jak se z objektů Sjbz vrstvy sestavuje maska.

Sestavení masky z tvarů (shapes)
Při sestavení masky se nejprve na základě rozměrů a DPI vytvoří prázdný objekt, do kterého se pak umísťují na bitmapové tvary – shapes, které se vybalují ze slovníku tvarů (pokud ho stránka požívá) a vrstvy Sjbz. Kromě tvarů, je součástí vrstvy Sjbz sada blitů, které popisují kam se má v rámci vytvořeného objektu tvar písmene umístit. blit je tedy kombinace identifikátoru tvaru (který odpovídá jeho pořadovému číslu) a souřadnic.
Pokud bychom měli na stránce všude pouze jeden a ten samý tvar, obsahovala by Sjbz vrstva pouze jeden tvar, a všechny blity by obsahovaly pouze jeden identifikátor – měnily by se pouze jejich souřadnice.
Tajemství ratia DjVu souborů
je založeno na tom, že se tvary písmen opakují. Čím víc identických tvarů, tím méně se jich musí být uloženo.
Sdílení tvarů
By default je každá DjVu stránka samostatný objekt. Tvary se tak sdílejí pouze v rámci stránky. Ovšem DjVu formát má podporu pro sdílené vrstvy, které se ke stránce připojují přes indentifikátor INCL (obsahuje jméno sdílené metadatové vrstvy či slovníku tvarů). Žádná sdílená vrstva však nevzniká automaticky – ani slovník tvarů, protože při proudovém zpracování bitmapových obrazů nelze předem určit, který tvar se bude opakovat na dalších stránkách a který ne. I jb2unify na to potřebuje dva průchody:
  1. Nejprve sestaví setříděné pole z tvarů vytažených z Djbz a Sjbz vrstev[9]
  2. …a pak postupně projede blity jednotlivých stránek.
Je-li tvar na který blit odkazuje shodný s jiným, zamění identifikátor tvaru za identifikátor tvaru, který umístí do sdíleného slovníku a pokračuje zpracováním dalšího tvaru. Do vrstvy Sjbz se ukládají pouze tvary, které se na žádné jiné stránce neopakují.
Sdílený slovník tvarů (vrstva Djbz) se pak ke stránce přilinkuje přes INCL – podobně jako když má DjVu svazek sdílenou metadatovou vrstva (která se obvykle jmenuje shared_anno.iff[10]).

Kdy vyplácí sdílení tvarů

Upozornění Utilita jb2unify je skutečně velice primitivní a nemá žádnou sofistikovanou logiku pro porovnání tvarů. Sdílený slovník sestavuje pouze z tvarů zcela identických.

Bohužel součástí blitu není ani informace o velikosti tvaru, takže pro jedno a totéž písmeno, je-li v různé velikosti, existuje i samostatný tvar.

Takové podobnosti jen stěží dosáhneme při skenování textových dokumentů. Ovšem pokud tvoříme DjVu dokumenty zpracováním souborů, co mají písmena uložená jako sady bitmapových obrazů, nebo se u nich generují v průběhu zpracování přes gsdjvu, tak zde se sdílení tvarů vyplatí, protože jich většina bude stejných.

DjVu soubory s Djbz

Sdílení tvarů však má i svá úskalí. Pokud přesouváme stránky v rámci jednoho DjVu svazku, tak se vcelku nic neděje. Stejně tak, jako když z něj nějakou stránku odstraníme – "osiřelý" tvar tak zůstane maximálně nevyužitý.

Ovšem pokud stránku, která využívá sdílený slovník tvarů kopírujeme z jednoho DjVu svazku do jiného, musí být export proveden tak, aby sebou vzala i přilinkovaný Djbz. Při generování slovníku u nově vytvořeného DjVu svazku však může nastat situace, kdy výsledný DjVu svazek nepůjde zobrazit, protože většina prohlížeček nepočítá se situací kdy se v rámci jednoho DjVu svazku používají dva slovníky tvarů.

Při generování slovníku pomocí jb2unify u pro DjVu svazek, který již obsahuje nějaký slovník tvarů, je třeba použít jméno stávajícího slovníku.


DjVuLibre

http://djvulibre.djvuzone.org/

Chybí stránky pro utility:
  • csepdjvu - podobně jako přes djvumake lze přes něj tvořit djvu dokumenty. Umožňuje však sofistikovanější generování popředí a pozadí (které lze pak sloučit přes djvumake)


DjVuLibre (neboli svobodné DjVu) je rozšířená opensource verze DjVu enkodéru, která vychází z původního kódu verze 3.5, který uvolnila v říjnu 2000 pod GPL2 licencí firma LizardTech Inc.[11], kterou začal v říjnu 2001 vyvíjet jeden ze spoluautorů tohoto formátu - Léon Bottou.

Součástí DjVuLibre je - kromě základní zobrazovací knihovny a enkoderů - také sada utilit pro práci s DjVu soubory a plugin pro internetové prohlížeče. Dříve byl součástí tohoto balíků také prohlížeč DjVu souborů Djview 3.0, ale jeho nástupce Djview 4.0 je vyvíjen již jako samostatná aplikace. DjVuLibre obsahuje následující utility:

Nástroje pro práci s DjVu

Kromě nástrojů z DjVuLibre dnes existují také další opensource nástroje využitelné pro konverzi dokumentu do DjVu, které vyvíjí polský vývojář Jakub Wilk[12]. Využívají rovněž knihovnu DjVuLibre, proto je také uvádím v následující tabulce.

Kromě těchto nástrojů existuje také javascriptový editor textové vrstvy WebDjVuTextEd[13], jehož autorem je maďarský vývojář Ferenc Veres. I když tento nástroj DjVuLibre bezprostředně nevyužívá, protože pracuje s XML souborem, využívají se jeho utility pro export a import xml souboru s obsahem textové vrstvy, i pro generování podkladového obrazu stránky.

Konverzní nástroje
any2djvu skript pro on-line konverzi dokumentů do DjVu skrze veřejný server
didjvu ovladač pro ghostscript pro přímý tisk z postscriptu do DjVu (není součástí DjVuLibre)
djvudigital utilita pro konverzi postsciptových souborů do DjVu (vyžaduje speciální ovladač pro ghostscript gsdjvu!)
djvups nástroj pro konverzi DjVu do postscriptu (pro tisk)
djvuserve nástroj pro práci se svázanými DjVu dokumenty (distribuován v samostatném instalačním balíku)
bindery GUI (PyQT4) pro sestavení DjVu svazku z výstupu aplikace Scan Tailor. Není součástí DjVuLibre a využívá při tom nástroj djvubind
gsdjvu (DjVuLibre) původní ovladač fy. AT&T pro ghostscript, který umožňuje přímý tisk z postscriptu do DjVu. Původně nebyl součástí projektu DjVuLibre – stal se jí až v r. 2005.
pdf2djvu nástroj pro konverzi dokumentů z PDF do DjVu (není součástí DjVuLibre)
Kompresní utility
bzz kompresní utilita pro DjVu soubory
cjb2 enkodér pro černobílé soubory (text)
cpaldjvu enkodér pro obrázky s omezenou barevnou paletou (kresby)
c44 enkodér pro barevné soubory (fotky)
Nástroje pro práci s DjVu soubory
csepdjvu nástroj pro tvorbu DjVu souboru ze surových dat
ddjvu dekodér DjVu souborů
djvm nástroj pro manipulaci s obsahem DjVu souborů
djvmcvt nástroj pro práci s DjVu svazky
djvudump nástroj pro výpis struktury DjVu souboru
djvuextract nástroj pro extrakci jednotlivých vrstev z DjVu souboru
djvumake nástroj pro tvorbu DjVu souboru slučováním jednotlivých vrstev
djvused nástroj pro práci s textovou vrstvou DjVu souboru
djvusmooth GUI pro editaci metadat a úpravu textové vrstvy DjVu souborů. Neumí přidávat a slučovat elementy, proto je vhodný především pro finalizaci DjVu dokumentu. Pro úpravu obsahu textové vrstvy je lepší nejprve použít javascriptový editor WebDjVuTextEd
djvutoxml pro export textové vrstvy do DjVuXML
djvutxt zjednodušená nadstavba pro djvused, pro export holého textu
djvuxmlparser nástroj pro import DjVuXML (pozor nezvládá všechny elementy!)
ocrodjvu utilita pro aplikování OCR na černobílou vrstvu DjVu dokumentů (umí využít OCR engine Cuneiform i Tesseract)
WebDjVuTextEd javascriptový editor textové vrstvy (nepracuje s metadaty!)

Licence

Formát DjVu byl uvolněn pod licencí GPL2 v březnu 2001. Nejprve verze 2.0 a posléze i verze 3.5. Na jejím základě začal Léon Bottou vyvíjet, jakožto odvozené dílo, opensource knihovnu DjVulibre.

Dvě důležité části DjVu enkodéru - ZP-kodér a technika maskování pozadí která se používá u iw44 enkodéru, však chrání několik patentů z nichž většinu vlastní AT&T. Firma Lizardtech proto získala na tyto patenty rozsáhlá práva a veřejným prohlášením poskytla pro tento formát a s ním spojené patenty pro použití v rámci GPL software trvalou volnou licenci.

Text několika odstavců tohoto prohlášení však nebyl zcela jednoznačný a mohl bránit dalšímu vývoji opensource DjVu knihovny, proto dopisem z 19. června 2002 Lizardech změnil text omezujících odstavců tak, aby bylo zřejmé že se omezení vztahuje pouze na jeho originální kód. Tím, že Lizardtech výslovně zmínil, že se omezení vztahuje pouze na původní část kódu, umožnil další vývoj knihovny DjVulibre pod GPL2, který je zárukou, že kromě těchto původních patentově chráněných technologií knihovna již žádný jiný patentově chráněný kód nebsahuje.

any2djvu

Upozornění Tento skript je specifickou utilitou linuxové verze DjVuLibre!

Skript any2djvu - je shellový skript, který odesílá ke konverzi postscriptové a pdf dokumenty na veřejný DjVu server http://any2djvu.djvuzone.org Aby bylo možné použít skript any2djvu, je tedy nutné mít funkční připojení do internetu!

Skriptu se v případě souboru umístěného někde na webu předá jako první parametr URL k postscriptovému či pdf souboru a teprve jako druhý parametr! název souboru. V případě že se ke konverzi odesílá lokální soubor se URL vynechá.

Skript pak - v případě souboru z internetu - předá parametry serveru. Při konverzi lokálního souboru provede upload na server. Pro odesílání a stahování souborů využívá skript curl.

DjVu server provede konverzi a nabídne hotový DjVu dokument ke stažení.

Použití any2djvu

any2djvu [volby] [URL_k_souboru] { konvertovaný_soubor_A konvertovaný_soubor_B}
Volby ovlivňující kvalitu komprese

bzz

Je univerzální kompresní a dekompresní utilita, která se u DjVu využívá pro kompresi a dekompresi textových vrstev ANTz ( metainformace, hyperlinky a záložky), TXTz ( skrytá textová vrstva ) a barevných složek v JB2. Podobně jako bzip2, využívá pro přípravu dat ke kompresi transformace Burrows-Wheelerovu transformaci ovšem pro samotnou kompresi používá vlastní kódování aritmetický ZP adaptive kodér navržený speciálně pro potřeby DjVu.

Poznámka U bzip2 se používá pro vlastní kompresi kódování Huffmanovo kódování, které sice nemá tak dobrý kompresní poměr jako kódování aritmetické kódování, není však zatíženo patenty.

Použití bzz

Při kompresi

bzz -e[ velikost bloku ] vstupní_soubor výstupní_soubor

Při dekompresi

bzz -d vstupní_soubor výstupní_soubor
Poznámka Místo vstupního a výstupního souboru lze použít standardní vstup či výstup a propojit bzz s dalšími utilitami pomocí roury
Volby které ovlivňují kvalitu komprese
V komprimačním režimu lze předat parametru -e jako volitelný argument velikost bloku v kilobajtech, s jakou má pracovat Burrows-Wheelerova transformace (výchozí velikost je 2048 KB). Je-li velikost bloku menší, je komprimace (a dekomprimace) méně náročná na paměť. Na druhou stranu nastavení velikosti bloku je výhodné tehdy, pokud je velikost vstupního souboru menší než jeho velikost. Maximální použitelná velikost bloku je 4096 KB.

cjb2

Utilita cjb2 je jednoduchý DjVuBitonal enkodér s jehož pomocí se komprimuje tzv. maska ( která se do výsledného dokumentu vloží jako Sjbz vrstva ), co byla použita pro vrstvu s popředím ( FGbz vrstva ) budoucího DjVu dokumentu.

U tištěných ( nebo psaných ) materiálů či pérovek zabírá většinu plochy pozadí - plocha. To samo o sobě většinou nenese podstatnou informaci. Je-li tedy z plochy pozadí odfiltrováno popředí (písmo či kresba), může wavelet kompresor pracovat s velkými spojitými barevnými plochami a tím i dosáhnout mnohonásobně lepšího kompresního poměru.

Pro toto odfiltrování se používá tzv. bitonální maska. Tj. rastrový soubor, který tvořený kombinací prázdných bodů a bodů jednobarevné kresby. Před vložením do DjVu dokumentu je nutno tuto masku komprimovat. Komprese jb2 ( se kterou pracuje cjb2 ) funguje podobně jako komprese JBig2, kterou používá PDF ke kódování černobílých obrázků.

  1. Vstupní obrázek je rozdělen na jednotlivé znaky (shluky barevných pixelů), které jsou hierarchicky setříděny na základě podobnosti.
  2. Část z těchto znaků se komprimuje přímo na základě aplikace statistického modelu a aritmetického kódování.
  3. Další část se komprimuje nepřímo, na základě podobnosti s jinými již rozpoznanými znaky
  4. Zbytek, kterým obvykle bývá grafika se pak komprimuje klasickým souřadnicovým způsobem

V DjVu prohlížečce se tato maska (v kombinaci s vrstvou popředí) interpretuje jako černobílá verze stránky, kdy prázdné body jsou prezentovány jako bílé a barevné jako černé.

Použití cjb2

cjb2 [ volby ] vstupní_soubor [ výstupní_djvu_soubor ]
Volby ovlivňující kvalitu komprese
Komprese pomocí cjb2 může být bezztrátová, ale i ztrátová. Ve výchozím nastavení cjb2 komprimuje bezztrátově (tj. stejně jako by byla použita volba -losslevel 100 ). Vstupní soubor musí být černobílý obrázek ve formátu PBM (portable bitonal-map) nebo jednostránkový černobílý TIFF soubor. Výstupem je pak DjVuBitonální soubor.

cpaldjvu

Toto je enkodér, vhodný ke kompresi obrázků s nízkým počtem barev, jako jsou například grafy, plány, kresby, mapy, atp. Je zcela nevhodný ke kompresi fotografií - pro ty je určen DjVuPhoto enkodér c44.

Použití cpaldjvu

cpaldjvu [ volby ] vstupní_soubor výstupní_soubor
Upozornění
  • Vstupní soubor může být pouze ve formátu PGM (portable gray-map) nebo PPM (portable pixmap) formátu. Pokud chceme předat vstupní data rourou, je třeba místo jména vstupního souboru uvést pomlčku.
  • Jméno pro výstupní soubor musí být vždy uvedeno!
Volby které ovlivňují výsledek komprese

Každý DjVu soubor je kromě skryté textové a metadatové vrstvy složen také z obrazových vrstev: černobílé masky, barevné vrstvy popředí a několika barevných vrstev pozadí — pro podrobnější informace viz Anatomie DjVu dokumentu. Barevné vrstvy pozadí (chunks) jsou logicky složené ze sekvencí "řezů" (slices). A prohlížeč je schopen zobrazit přinejmenším částečně obrázek již po zpracování první obrazové vrstvy.

Běžný DjVuPhoto soubor, zpracovaný enkóderem c44 obsahuje pouze 80 až 120 řezů rozdělených do 1 až 4 vrstev pozadí. DjVu soubor zpracovaný přes cpaldjvu má naopak pouze jednu barevnou vrstvu pozadí, která popisuje pouze jednobarevnou plochu pozadí, zatím co ostatní barevné body se při kvantizaci obrazu barevně upravují dle nejbližší indexované barvy, a umísťují do barevné vrstvy popředí, na kterou se aplikuje jiný typ komprese (bzz).

-bgwhite
Bez uvedení této volby se do pozadí umístí barva, která v rámci obrázku zabírá největší plochu. To však nemusí být vždy výhodné, protože u komplikovanějšího obrázku to může vést k větší velikosti černobílé masky. Proto existuje tato volba, která zajistí, že se pro barvu pozadí obrázku použije nejsvětlejší ze zastoupených barev – obvykle to bývá barva bílá.
-colors
je dalším parametrem, který poměrně výrazně ovlivňuje výslednou velikost DjVu souboru, protože se jím nastavuje maximální počet barev, se kterými se má pracovat při kvantizaci obrazu. Není-li uvedeno jinak, automaticky se předpokládá, že to má být 256 základních barev, ale může jich být od 2 do 4096.

Omezením počtu barev, lze zmenšit velikost výsledného DjVu souboru, protože se barevně blízké body seskupí do kompaktních barevných skvrn, které se dají lépe vlnkovou kompresí lépe zpracovat. Příliš vysoký počet barev vede ke zbytečné marginalizaci.

Na druhou stranu, mohou existovat případy, kdy je nutné při barevné kvantizaci zachovat širší barevné spektrum.

Následující obrázek demonstruje rozdíl ve výsledku při použití c44, cpaldjvu s parametry a cpaldjvu bez parametrů.

Ukázka rozdílu v použití cpaldjvu a c44
c44 cpaldjvu cpaldjvu
Parametry -colors 20 -bgwhite
Sjbz 414003 915191
FGbz 8299 (20 barev) 43940 (256 barev)
BG44 394083 (74),
390957 (13),
572539 (10),
546583 (5) 7447x4959
298 (97) 612x414 692 (97) 612x414
3,6 MB formát PNG o 12 barvách 1,9MB 413kB 938kB
Z uvedeného je zcela zřejmé, že se c44 na tento typ dokumentu absolutně nehodí Nastavení bílého pozadí vedlo k optimalizaci velikosti černobílé masky a omezením barev byla redukovaná i vrstva popředí I když je výsledek defaultního zpracování lepší než u c44, je vidět, že vhodným nastavením parametrů se dal zredukovat na polovinu
Volba, která zobrazí výsledky kvantizace barev
-verbose
je volba, která zobrazí v průběhu zpracování informace o aktuální kvantizaci barev obrázku. Na jejich základě je možné najít optimální hodnoty pro omezení počtu barev a volbu pozadí. Či rozhodnout o jiném způsobu zpracování obrazu. Jak takový výstup vypadá viz níže
cpaldjvu: image 900x506 quantized to 256 colors.
cpaldjvu: background color is #3b312b.
cpaldjvu: 346665 color runs.
cpaldjvu: 207759 ccs.
cpaldjvu: 33379 ccs after merging/splitting.
cpaldjvu: 12657 shapes after matching (7066 are cross-coded).
Volba které ovlivní defaultní zobrazení stránky
-dpi
Rozlišení v dpi. Může se pohybovat v hodnotách od 25 do 6000 (výchozí hodnota je 100) Určuje v jaké výchozí velikosti bude soubor zobrazovat dekodér

csepdjvu

Utilita csepdjvu je nástroj pro sestavení DjVu svazku z proudu dat.

Na rozdíl od podobného nástroje djvumake očekává na vstupu předpřipravené obrazové soubory enkódované pomocí pamtodjvurle, resp. pbmtodjvurle (nezaměňovat s pnmtorle!) do formátu, který umožňuje rovnou nastavit také datovou strukturu dokumentu. Pojmenovat stránky, vytvořit hyperlinky, atp.

c44

Tento DjVuPhoto enkodér do formátu IW44 slouží ke kompresi obrazové informace. Mezi hlavní cíle sledované při návrhu DjVu, patřilo nejenom dosažení vysokého kompresního poměru, ale také plynulé zobrazování velkých obrázků i na strojích s omezeným množstvím paměti. Formát IW44 proto používá wavelet koeficienty, které se průběžně aktualizují během dekódování obrazu. Díky nim může prohlížeč rychle poskytnutout libovolnou část obrazu, bez zdlouhavého přepočítávání.

Dekódování obrazu a přepočet těchto koeficientů probíhá při zobrazování souběžně, proto hodně záleží na tom, jak byla komprese do IW44 provedena. Při nevhodně zvolených parametrech sice můžeme dosáhnout menší velikosti výstupního souboru, ovšem zaplatíme za to zvýšenými nároky při zpětné interpretaci obrazové informace.

Použití c44

c44 [ volby ] vstupní_soubor [ výstupní_soubor ]
Upozornění
  • Vstup nelze předávat ke zpracování rourou.
  • Pokud není uveden výstupní soubor pak je název výstupního souboru vygenerován automaticky za použití názvu vstupního souboru, s přidáním přípony .djvu

Vstupní soubor může být buď ve formátu PGM (portable gray-map) nebo PPM (portable pixmap). Enkodér akceptuje také obrázky komprimované ve formátu JPEG. V takovém případě je však doporučeno používat pouze vysoce kvalitní JPEG soubory (tj. s nízkým kompresním poměrem a v maximální velikosti).

Volby které ovlivňují výslednou kvalitu komprese
Upozornění Tyto volby lze kombinovat jen v omezené míře. Prioritu má vždy ta, je uvedena naposled
-slice
nastavení počtu řezů na vrstvu. Mezní hodnoty jsou od 1 do 140. DjVuPhoto soubor je logicky složen ze sekvence "řezů" (slices). Ty jsou složeny do vrstev (chunks) a z těchto vrstev se pak postupně renderuje obrázek. Prohlížeč DjVu souborů je díky tomu schopen zobrazit přinejmenším částečně obrázek již po zpracování prvního řezu. Běžná vrstva pozadí u DjVuPhoto souboru obvykle obsahuje celkem 80 až 120 řezů rozdělených do 1 až 4 vrstev.
Při zpracování přidává c44 jednotlivé řezy do aktuální vrstvy tak dlouho, dokud nedosáhne předem definovaného kritéria. Tímto kritériem může být:
  • počet řezů
  • velikost souboru nebo
  • nastavení celkové kvality.
Při předávání argumentů pro počet řezů jednotlivých vrstev, se hodnoty od sebe oddělují buď čárkou, nebo znaménkem plus. Při použití plus se použije stejný počet řezů na vrstvu, jako je definován číslem. Je-li použitá čárka, pak musí číslu odpovídat celkový počet řezů na aktuální úrovni
Poznámka
-slice 74+13+10

bude mít stejný efekt jako

-slice 74,87,97
  1. vrstva bude mít 74 řezů
  2. vrstva 13 řezů
  3. vrstva 10 řezů
Je-li počet řezů (a vrstev) příliš vysoký, narůstá velikost DjVu souboru
Je-li počet řezů příliš nízký, zůstávají na výsledném obraze viditelné artefakty (rozostření hran, šmouhy v obraze, atp.)
Je-li většina řezů soustředěna do první vrstvy, pak to má vliv na plynulost prohlížení, protože se obrázky renderují "skokem". Je-li naopak většina řezů soustředěna do následujících vrstev, je při prohlížení pozorovatelné postupné doostření obrazu. Ve většině případů je tedy asi nejjednodušší ponechat rozdělení řezů na automatice. Pouze v případě složitějších obrazů, jako jsou např. velké historické mapy. je asi lepší použít řezů více.
-size
nastavení velikosti vrstvy v bajtech ( Barevné řezy jsou do vrstvy přidávány tak dlouho, dokud není dosaženo určené velikosti. )
-bpp
nastavení velikosti vrstvy v bitech na pixel ( Dobrý výsledek dává -bpp 0.25,0.5,1 )
-percent
specifikace velikosti vrstvy procentuálně vůči celkové velikosti vstupního souboru (Pozor, výsledek se může výrazně lišit v závislosti na použitém formátu vstupního souboru. Nezapomeňte že formáty jako např. JPEG budou před konverzí dekomprimovány )
-decibel
Pozor, předcházející hodnota musí být vždy nižší než následující. (Tato volba může výrazně ovlivnit čas komprese)
-dbfrac
indikuje že hodnoty, předané parametrem -decibel mohou být vzorek.. ( Tato volba se používá souběžně s volbou -decibel. Je vhodná zvláště při kompresi souborů, které obsahují velké souvislé barevné plochy, např. obrázky s velkým bílým okrajem)
Aplikace masky
-mask
předávaným parametrem je cesta k černobílému PBM souboru stejných rozměrů jako je Vstupní soubor.

Maska se používá, pokud chceme komprimovat obrázek jako pozadí a odfiltrovat z něj text či kresbu, která bude ve vrstvě popředí. Každý černý pixel masky říká enkodéru, že hodnota stejného pixelu ve vstupním souboru je nepodstatná. Ten pak nahrazuje tyto odmaskované pixely barvou, která má nejmenšími nároky na enkódování.

Volby, které ovlivní výsledné barevné podání

Barevné podání lze ovlivnit nastavením sytosti barev ( chrominance ) a jasu ( luminance ). Volby které ovlivňují nastavení barev jsou:

-crcbnone
při kompresi dojde k zahození barevných složek (zůstane pouze jasová ) výsledný obrázek tak bude ve stupních šedi
-crcbnormal
barevné složky obrázku jsou kódované ve stejném poměru jako jasová
-crcbhalf
hodnota všech barevných složek je snížena o polovinu jasu
-crcbfull
nejvyšší možné nastavení kvality kódování barev ( alternativa k -crcbnormal )
-crcbdelay
Volba, jejímž parametrem je číslo, které udává počet řezů u kterých má být zredukována barevná informace (výchozí hodnota je 10), takže hodnota 0 odpovídá volbě -crcbnormal (resp. -crcbfull).
-gamma
upravuje nastavení gammy výchozího souboru. Ta by měla odpovídat hodnotě zařízení na kterém bude obrázek zobrazován. Výchozí hodnota, která by měla odpovídat standardnímu monitoru je 2.2
Volby které ovlivní defaultní zobrazení stránky
-dpi
Rozlišení v dpi. Může se pohybovat v hodnotách od 25 do 1200 (výchozí hodnota je 100) Určuje v jaké výchozí velikosti bude soubor zobrazovat dekodér

ddjvu Dekodér DjVu souborů, jehož výstupem je bitmapový soubor dekódované obrazové vrstvy.

Umožňuje na základě předaných voleb dekódovat nejenom celý DjVu dokument, ale i vybranou parametricky definovanou část obrazové vrstvy, takže se dá využít i k vytvoření jednoduché čtečky DjVu souborů.

Použití ddjvu

ddjvu [ -format=formát_výstupu ] [ volby ] [ vstupní_djvu_soubor ] [ výstupní_soubor ]

Pokud není jméno výstupního souboru uvedeno, nebo je-li místo něj uvedená pomlčka (-) je výstup automaticky přesměrován na standardní výstup, který lze pomocí roury předat k dalšímu zpracování.

Upozornění To však neplatí pro všechny výstupní formáty. Při exportu do PDF nebo TIFFu musí být uvedeno jméno výstupního souboru vždy.

Výhodou ddjvu je, že může přijímat vstupní data přes rouru (|). V takovém případě je třeba místo cesty ke vstupnímu DjVu souboru uvést pomlčku (-).

Podporované výstupní formáty
-format
Pokud není tato volba uvedena vůbec, dekóduje ddjvu pouze první stránku předaného dokumentu, s výchozím nastavením volby -scale=100. Jinak jsou podporovány následující formáty:
pbm výstupem bude černobílý obraz ve formátu PBM
pgm výstup bude ve stupních šedi, ve formátu PGM
ppm výstup bude v indexovaných barvách, ve formátu PPM
pnm výstup bude v RGB barvách, ve formátu PNM
rle proudový výstup v RLE formátu (viz csepdjvu)
tiff výstup lze uložit pouze do multipage souboru, která bude ve formátu TIFF
pdf výstup lze uložit pouze do vícestránkového souboru, který bude ve formátu PDF
Rozsah exportovaných stránek
-page
Pokud není specifikován rozsah stránek, jsou postupně dekódovány všechny stránky dokumentu, a jako proud dat zapsány do výstupního souboru. Rozsah stránek lze specifikovat buď konkrétními pořadovými čísly požadovaných stránek, oddělených čárkami, či případně rozsahem, kdy je pořadové číslo stránky kterou má rozsah začínat následováno pomlčkou a pořadovým číslem stránky, kterou má příslušný rozsah končit.
Poznámka Je-li rozsah uveden obráceně (tj. vyšší číslo následuje nižší), budou stránky exportovány v obráceném pořadí
-eachpage
Je-li uvedena tato volba, nebudou všechny stránky uoženy do jednoho souboru, ale rozděleny do samostatných souborů. Ty budou pojmenovány a očíslovány dle specifikace %d v názvu cílového souboru. Specifikace pro %d je podobná jako při použití příkazu printf Viz příklad:
Poznámka
 ddjvu -format=rle -page=4-12 -eachpage soubor%04d.rle

Výstupem budou vyexportované stránky 4 až 12, kdy jména osmi cílových souborů budou:

soubor0004.rle, … až … , soubor0012.rle
-skip
Tato volba potlačí výchozí chování dekodéru v případě, kdy narazí na poškozenou DjVu stránku. Za normálních okolností se proces zpracování přeruší. Při této volbě se poškozená stránka přeskočí, a zpracování pokračuje další stránkou DjVu dokumentu.
Volba exportované vrstvy
-mode
Určuje s jakou obrazovou vrstvou DjVu souboru se má při dekódování pracovat:
color (default) na výstupu bude plnobarevný obraz
black bude exportovat pouze černobílou kresbu
mask bude pracovat pouze s bitonální maskou
foreground použije pouze vrstvu popředí
background použije pouze vrstvu pozadí
Volba která ovlivňuje kvalitu exportovaného obrazu
-quality
Volba pro nastavení výstupní kvality exportovaného obrazu dává smysl pouze v případě výstupu do souborů ve formátu TIFF a PDF. Parametrem může být:
  • číselná hodnota faktoru pro kvantizaci obrazu pro JPG, což je celé číslo v rozmezí od 25 do 150 (optimální je hodnota je asi 80)
  • klíčové slovo uncompressed, které zcela zamezí použití komprese
  • klíčové slovo deflate zajistí, že se u formátu TIFF u obrázků, které nelze komprimovat pžes TIFF/G4 použije kompresní algoritmus DEFLATE[14], bude-li ovšem k dispozici. Jinak se použije PACKBITS (jednoduchý bezztrátový kompresní RLE algoritmus)
Volby které ovlivňují parametry exportovaného obrázku
-n
Na místě n může být uvedena celočíselná hodnota, v rozmezí od 1 do 12, kterou lze ovlivnit přepočet rozměru výstupního obrázku, vůči rozměru původního DjVu dokumentu. Hodnota -1 tedy znamená, že velikost obrázku na výstupu bude stejná jako byla velikost DjVu dokumentu. Alternativně lze místo tohoto zápisu použít volbu -subsample=n.
-scale
Nastavuje relativní zvětšení (či zmenšení) obrazu velikosti obrazu vůči rozměrům a hodnotě dpi nastavené v rámci stránky DjVu dokumentu. Tzn. že pokud je má DjVu dokument hodnotu dpi 300, a jako hodnotu tohoto parametru nastavíme rovněž 300, bude výsledek stejný, jako kdybychom tuto volbu vůbec neuvedli (100%). Vyšší hodnota tedy znamená zvětšení obrazu a nižší jeho zmenšení.
-size
Určuje rozměry WxH výstupního obrazu. Pokud nemá být striktně dodržen poměr stran, je třeba uvést také volbu -aspect=no.
-aspect
Hodnotou této volby může být buď yes (výchozí hodnota), nebo no. V podstatě se tak dá jednoznačně najevo, jestli se má při přepočtu velikosti exportovaného obrazu zachovat poměr stran, nebo ne.
Specifikace vybraného segmentu
-segment
Vypreparování výřezu z celé vyrenderované stránky je zbytečně zdlouhavá operace, kterou lze obejít určením konkrétního segmentu, určeného souřadnicemi levého dolního rohu (bod nula je u DjVu dokumentů v levém dolním rohu stránky) X a Y a šířkou a výškou vybrané oblasti (WxH). Tyto parametry se volbě předají ve formátu: WxH+X+Y
ddjvu -format=pbm -page=4 -segment=400x600+100+100 -mode=black -size=800x800 -aspect=no vyrez.pbm

Výstupem tohoto příkazu bude bude vyseparovaná černobílá oblast o velikosti 400x600 pixelů, ze strany 4, která se nachází 100 pixelů od levého a spodního okraje. Deformovaná do černobílého čtverce o straně 800 pixelů.

Upozornění Pokud chceme měnit rozměry vybraného segmentu musí být za volbou -size vždy následovat volba -aspect=no. Bez toho by na výstupu byla vždy jen prázdná plocha.

djvm

Toto je nástroj, který umožňuje skládat DjVu stránky do vícestránkových DjVu svazků, vkládat do nich stránky nové a případně je i mazat.

Použití djvm

Za celou řadu let co pracuji s DjVu dokumenty jsem použil tuto utilitu prakticky pouze ke dvěma účelům:

  • K sestavování DjVu dokumentů do DjVu svazků
  • A k odstraňování stránek s DjVu svazků

K výpisu obsahu DjVu dokumentů totiž mnohem lépe poslouží djvused.

Sestavení DjVu svazku
djvm -c[reate] nový_djvu_svazek první_strana_v_djvu  x_tá_strana_v_djvu

Toto je nejjednodušší způsob sestavení několika DjVu souborů do jednoho svazku.

Přidání nové stránky do DjVu svazku
djvm -i[nsert] existující_djvu_svazek další_strana_v_djvu [ pozice_stránky ]

Toto je jediný způsob, jakým lze do již existujícího DjVu svazku korektně přidat na vybranou pozici novou stránku.

Není-li uvedeno číslo pozice, nebo pokud je uvedené číslo vyšší než aktuální počet stran v DjVu svazku, je stránka automaticky přiřazena na konec. V ostatních případech dojde k přečíslování pořadí stran následujících za příslušnou pozicí.

Poznámka Tímto způsobem lze do DjVu svazku vložit nejenom single-page ale také celý DjVu svazek najednou. V takovém případě však dojde k vytvoření samostatné metadatové vrstvy. Sloučení metadatových vrstev lze provést pouze manuálně
Vyjmutí stránky z DjVu svazku
djvm -d[elete] aktualizovaný_djvu_svazek pozice_stránky

Toto je jediný způsob, jakým lze z DjVu svazku korektně odstranit vybranou stránku.

Upozornění Při odstraňování stránek z DjVu svazku se pracuje pouze s pořadovým číslem stránky!!!
Vylistování stránek z DjVu svazku
djvm -l[ist] djvu_svazek

Výpis pak vypadá asi takto:

user@stroj:~$ djvm -l svazek.djvu
Size     Type        Name
--------------------------
 22076   PAGE #1     p0000.djvu
   126   SHARED_ANNO     shared_anno.iff
  9480   PAGE #2     p0001.djvu
     …

I když je vylistování stránek vícestránkového DjVu dokumentu tímto způsobem velice rychlé, má dvě docela dost podstatné vady.

Problém single-page DjVu dokumentů
V případě, že DjVu dokument neobsahuje vrstvu typu DJVM (což je případ většiny single-page DjVu dokumentů) skončí pokus o vylistování obsahu přes djvm chybou.
Problém s alternativními názvy stránek
U DjVu dokumentu může mít každá vložená stránka kromě svého názvu, který vždy končí příponou .djvu zároveň přiřazené i alternativní jméno, se kterým lze pracovat i v odkazech v rámci vícestránkových DjVu dokumentů. Bohužel djvm tyto alternativní jména vypsat neumí.

Proto je dobré vědět, že existují i jiné způsoby, jak získat seznam stránek obsažených v DjVu dokumentu.

Nejspolehlivější a zároveň dostatečně svižný je příkaz ls, který má integrován djvused.

user@stroj:~$ djvused svazek.djvu -e ls
   1 P    22076  p0000.djvu T=Alternativní název strany číslo jedna
     A      126  shared_anno.iff
   2 P     9480  p0001.djvu
     …

Pak se dá k podobnému účelu použít příkaz dump, ovšem v tomto případě již musí být výstup zpracovaný utilitou grep, aby odfiltroval pouze řádky s řetězcem FORM:DJVU což je ale obzvláště u dokumentů s vekým množstvím stránek neefektivní a zdlouhavá operace, jelikož grep musí se v průběhu zpracování postupně analyzovat všechny řádky výpisu.

user@stroj:~$ djvused svazek.djvu -e dump | grep FORM\:DJVU
    FORM:DJVU [22076] {p0000.djvu} [P1] (Alternativní název strany číslo jedna)
     …

Podobným způsobem by se dal zpracovat i výstup utility djvudump

djvmcvt

Je konzolový nástroj, kterým lze vícestránkový djvu dokument převádět z pevného svazku na svazek volný.

indirect
Je typ svazku, který má všechny soubory umístěny v rámci jednoho adresáře. Výhodou volného svazku je, že:
  • lze jednotlivé stránky dále zpracovávat (např. doplnit o textovou vrstvu, atp.) samostatně.
  • stránku, která se při dávkové konverzi příliš nevyvedla, nahradit novou, lépe zpracovanou.
  • lze přejmenováním stránek upravit pořadí stránek v dokumentu
bundle
Je vícestránkový DjVu dokument, který má všechny soubory ssebou. Výhodou pevného svazku je, že:
  • všechny stránky jsou uložené v rámci jednoho dokumentu, takže s ním lze lépe pracovat.

Použití djvmcvt

Vytvoření pevného svazku (bundled):

djvmcvt -b index.djvu djvusvazek.djvu

Vytvoření volného svazku (indirect):

djvmcvt -i djvusvazek.djvu adresář index.djvu

djvudigital

Upozornění Tento skript je specifickou utilitou linuxové verze DjVuLibre, která vyžaduje speciální ovladač pro ghostscript gsdjvu, který však není obvykle součástí distribuce DjVuLibre!

Jde o shellový skript, který provádí konverzi postscriptových a pdf dokumentů do DjVu na lokálním stroji. V současné době ho plně nahradil pdf2djvu

Použití djvudigital

djvudigital [volby] vstupní_soubor [výstupní_djvu_soubor]

djvudump

Aplikace djvudump je konzolový nástroj, s jehož pomocí můžeme získat rychlá přehled o tom, jaká je struktura u většího množství archivovaných dokumentů. Jaké mají vrstvy, jak jsou veliké, atp. Má stejný efekt, jako kdybychom použili djvused (DjVuLibre), který však má mnohem jemnější možnosti použití. Viz následující ukázkový příklad:

Poznámka

user@stroj:~$ djvused soubor.djvu -e 'select 3; dump'

Použití djvudump

djvudump [-o výstup ] djvusoubor ...

Pomocí kombinace dalších unixových nástrojů a utility djvudump lze rychle zjistit, kupř. jaké verze DjVu dokumentů a v jakém rozlišení se v adresáři vyskytují:

user@stroj:~$ djvudump *.djvu | grep INFO | awk '{print $6, $5}' | sort -u
v17
100 v24,
200 v24,
216 v21,
300 v18,
300 v21,
300 v22,
300 v24,
300 v25,
400 v21,
72 v21
Poznámka Uvedený výpis je z mého dokumentačního archivu, kde se vyskytují různé verze DjVu formátů.

djvuextract

Je konzolový nástroj, kterým lze z djvu dokumentu extrahovat jednotlivé chunky v binární podobě do souboru, se kterým lze dále pracovat.

Poznámka Při extrakci globálních chunků se parametr -page=… neuvádí.

Použití djvuextract

Extrakce chunku INFO stránky č. 1 ze souboru index.djvu:

djvuextract index.djvu -page=1 INFO=./binary_chunk

djvumake

Utilita djvumake sestavuje (podobně jako csepdjvu), z jednotlivých vrstev DjVu soubor.

V tomto případě se však DjVu soubor sestavuje z již hotových komponent, které lze získat kompresí obrazových souborů pomocí cjb2, cjb2 případně cpaldjvu, případně jejich extrakcí z různých DjVu souborů pomocí utility djvuextract a jejich následným sestavením do nového DjVu souboru, ve kterém lze kupř. kombinovat různé masky, obrázky, atp.

Použití djvumake

djvumake výstupní_djvu_soubor [ identifikátor vrstvy=cesta_k_souboru]
Poznámka Vytvoření DjVu souboru ze souboru v PAM formátu, s aplikací připravené černobílé masky (v PBM formátu) enkódované do djvu přes cjb2
djvumake vystupni.djvu Sjbz=maska.djvu PPM=obraz.pnm

V tomto případě se černobílá maska aplikuje při generování obrazových vrstev pozadí na vstupní plnobarevný soubor obraz.pnm podobným způsobem, jako kdybychom použili masku u c44. Rozdíl je především v tom, že se se při sestavování DjVu souboru přes djvumake zřejmě aplikují mechanismy, které nastavují optimální počty řezů (slices) při generování obrazových vrstev pozadí a popředí.

Z hlediska zpracování se mi uvedený způsob vytvoření DjVu souboru osvědčil jako nejefektivnější. Pokud bychom chtěli sestavit DjVu dokument z jednotlivých vrstev, tak bychom je nejprve museli vytáhnout přes djvuextract z již enkódovaných souborů a teprve pak bychom je mohli opět sestavit do jednoho celku.

Přehled identifikátorů a jejich možnosti při importu

Jak je z uvedeného zřejmé, identifikátory odpovídají kódům vrstev o kterých se podrobně píše v kapitole Anatomie DjVu dokumentu. V rámci této kapitoly jsou uvedeny především z toho důvodu, aby bylo jasné, jaké typy dat se v případě jejich použití akceptují.

Typ vrstvy Parametry při použití Poznámka
INFO=w,h,dpi Validní minimalistický DjVu soubor musí obsahovat minimálně vrstvu INFO, která udává rozměry dokumentu a jeho DPI. Na základě těchto údajů se totiž vypočítávají souřadnice objektů u skryté textové vrstvy a metadatových elementů (hyperlinky, zvýrazněné oblasti, atp.) S výhodou lze využít vytvoření "slepého" dokumentu pokud potřebujeme překonvertovat obsah textové vrstvy z .xml formátu do formátu .dsed. DjVuXML má totiž ve své specifikaci natvrdo nastavené jméno stránky ke které obsah patří a při importu přes djvuxmlparser nahrazuje nejenom obsah skryté textové vrstvy, ale také aktuální metadata, za metadata co existovala v okamžiku exportu do .xml souboru. Takže se při importu DjVuXML souboru nenávratně zruší veškerá metadata, co se v dokumentu objevila v mezidobí od exportu po okamžik importu.
Sjbz=soubor.jb2 Jako masku lze použít bitonální soubor DjVu enkódovaný přes cjb2. Použití předpřipravené masky a výchozího obrázku v PPM formátu je nejefektivnější způsob vytvoření DjVu dokumentu, neboť bitonální (černobílou) masku lze předem připravit s využitím nejrůznějších algoritmů, přičemž lze podle potřeby zpracovávat vybrané oblasti výchozího skenu různými metodami, tak abychom pak dostali při aplikaci této masky na PPM soubor optimální výsledek.
Smmr=soubor.mmr Alternativním formátem pro masku je bitonální soubor enkódovaný algoritmem G4, který používá TIFF
BG44=soubor.iw44[:n] Jako pozadí lze použít DjVu soubor vytvořený přes c44. Parametrem n lze omezit počet importovaných řezů, pokud nevadí vyšší míra artefaktů na obraze pozadí. Jejich absenci by totiž měla do určité míry být schopna nahradit aplikace masky.
BGjp=soubor.jpg Pozadí dokumentu může tvořit i soubor ve formátu JPG
BG2k=soubor.jp2 Teoreticky může pozadí dokumentu tvořit i soubor ve formátu JPEG-2000 (.jp2) Bohužel, v praktickém nasazení to nedává smysl, protože zobrazování pozadí ve formátu JPEG-2000 nepodporuje žádný DjVu prohlížeč. Je to z toho důvodu, že u formátu JPEG-2000 je velmi náročný proces dekomrese, a generování náhledů takových stránek by brzdilo načítání stránek Na druhou stranu použití této vrstvy otevírá možnost vkládat do DjVu dokumentu také originál dokumentu v archivní kvalitě, neboť formát JPEG-2000 je bezztrátový. Tím pádem lze vytvořit dokument, kterým je možné rychle listovat, po aplikaci OCR v něm rychle vyhledávat a zároveň, v případě potřeby, z něj i vytáhnout vybranou oblast původního skenu v maximálním detailu. Bohužel však většina DjVu prohlížeček s existencí této vrstvy nepočítá, takže dokument nezobrazí vůbec, a djview v případě takového dokumentu řve, že má dokument duplicitní pozadí.
FGbz=( soubor.jb2 | #barva[:x,y,w,h] ) Jako vrstvu popředí lze použít buď soubor s obrazem v indexovaných barvách, vytvořený přes cpaldjvu, nebo ji lze – v případě že to má být pravoúhlá jednobarevná plocha – nastavit parametricky. Pořadí parametrů je následující:
  1. RGB barva
  2. souřadnice levého dolního roku pravoúhlé plochy (x, y), přičemž bod nula je v levém dolním rohu celého dokumentu.
  3. a její šířka a výška (w, h)

Pozor! Na výsledek má nezanedbatelný vliv DPI dokumentu. Základní rozměr plochy totiž vychází právě z něj. Kupř. jsou-li součty x+w a y+h menší než hodnota DPI, je vygenerován pravoúhlý objekt, jehož strana odpovídá hodnotě DPI, umístěný do levého dolního rohu. V případě dokumentu co má 300dpi, tedy nelze vytvořit menší barevnou plochu popředí než 300x300dpi, kterou bude možné v rámci dokumentu umístit pouze na pozice x,y dané násobky 300.

Nastavení jednobarevného popředí má reálné využití pouze v případě, že je obsahem dokumentu pouze bitonální maska s textem, či kresbou. Díky nastavení barevného pozadí pro určitou oblast lze dosáhnout změnu obarvení. Pokud by těchto oblastí mělo být více, nebo by měla být kresba obarvena více barvami, je lepší nejprve vrstvu popředí připravit jako PNM soubor, pak ji enkódovat pomocí cpaldjvu a následně ji použít. Buď přímo, nebo nejdříve vytáhnout přes djvuextract a použít samostatně.
FG44=soubor.iw44 U dokumentů, které obsahují fotografie je lepší na vrstvu popředí použít podobný způsob komprese, jako se používá obvykle na pozadí. Taková vrstva se automaticky vytvoří kupř. pokud aplikujeme bitonální masku na PPM soubor. Černý text (a vybrané černé plochy v místech kde budou fotografie) je pak součástí masky, ilustrace jsou v popředí a pozadí může být tím pádem velice efektivně redukováno na minimum. V případě popředí se nepoužívají řezy, protože jde obvykle o menší objem dat, který se mnohem rychleji zpracovává, než barevně komplikovaná oblast pozadí.
FGjp=soubor.jpg Pokud popředí dokumentu tvoří celostránková fotografie, může být rovnou vložena do vrstvy popředí. Bohužel formát JPG nepodporuje průhlednost, takže v takovém případě bude pozadí zobrazeno pouze tam, kde bude popředí odfiltrováno pomocí masky. V reálném nasazení však použití JPEG souborů nedává smysl, protože tím razantně narůstá objem výsledného dokumentu. Místo 1MB, tak může mít kvůli jednomu obrázku takový dokument třeba 12MB, atp.
FG2k=soubor.jp2
INCL=identifikátor Jde o speciální vrstvu, která se používá v případě, že dokument používá vrstvu Djbz se sdílenými tvary masky.
Djbz=soubor.jb2 Vytvoří sdílený slovník černobílých tvarů v jb2 formátu. Bohužel zatím nevím jak má vypadat příslušný jb2 soubor
PPM=soubor.ppm V případě sestavování DjVu souboru ze souboru ve formátu PPM musí být zároveň použita černobílá maska (vrstva Sjbz). Obrazové vrstvy popředí a pozadí se pak vygenerují s jejím použitím automaticky.

djvups

Utilita určená k vygenerování postscriptového souboru, optimálního pro vytištění dokumentu v takové podobě, aby se dal svázat.

djvused

Aplikace djvused je silný konzolový nástroj pro práci s obsahem vícestránkových djvu dokumentů. Lze jej použít pro psaní či úpravu poznámek, skryté textové vrstvy, přípravu náhledů stránek, atd. Funguje tak, že nejprve načte djvu soubor a pak postupně vykonává předávané příkazy.

Tyto příkazy lze předat načtením ze souboru s odpovídající syntaxí (je-li takový soubor pomocí parametru -f určen), přímo z příkazové řádky (skrze parametr -e) nebo je zadávat interaktivně.

Použití

djvused [volby] djvusoubor

Volby

-v

Volba způsobí že djvused vypisuje při zpracování podrobnou zprávu o tom co který příkaz dělá. Tato volba je zvláště užitečná pro debugování skriptů pro djvused, ale také při interaktivním zadávání příkazů pro djvused přímo na standardním vstupu.

-f /cesta/k/souboru_se_skriptem

Příkazy jsou načteny ze souboru s odpovídající syntaxí příkazů

-e 'sada příkazů'

Tato volba zajistí předání odpovídající sady příkazů přímo z příkazové řádky, není tedy nutné je mít uvedeny přímo v souboru se skriptem. Aby bylo zabráněno nežádoucí expanzi na příkazovém řádku, je třeba sadu příkazů uzavřít do jednoduchých uvozovek.

-s

Tato volba zajistí uložení změn po vykonání příslušných příkazů. Co do funkčnosti odpovídá volbě save při přímé editaci.

-n

Způsobí, že jsou editační příkazy prováděny "nasucho", bez toho aniž by došlo k jejich uložení. Tato volba je zvláště užitečná pro debugování skriptů pro djvused, bez toho aniž by docházelo k přepsání djvu souboru na disku.

Syntaxe pro djvused

Poznámka Pomocí utility djvused lze naimportovat do textové vrstvy DjVu souboru prakticky libovolný obsah, pokud vyhovuje LISP syntaxi. Ovšem takový soubor pak nelze dodatečně zpracovat pomocí aplikace djvusmooth, která provádí nejenom kontrolu syntaxe, ale také zjišťuje validitu kódu textové vrstvy.
set remove output print
meta x x - x
page-title x - - -
outline x x - -
thumbnails x x - -
ant x x x x
txt x x x x
ls vypíše seznam všech stránek
n vypíše celkový počet stránek v dokumentu
dump vypíše dekomprimovaný obsah IFF souboru (stejný efekt jako má utilita djvudump)
size vypíše jaké jsou rozměry vybrané stránky v pixlech. Není-li vybraná žádná stránka vypíš postupně tento údaj pro všechny
select <id> vybere stránku podle jejího id (číslo v prvním sloupci výpisu příkazu ls). Není-li uvedeno žádné id vybere kořen dokumentu
select-shared-ant vybere stránku pro skryté poznámky
showsel vypíše informaci o aktuálně vybrané stránce

Příklady použití djvused

Aplikaci djvused lze využívat mnoha způsoby, zde je několik příkladů jakým způsobem ji lze použít při zpracování djvu souborů.

Zjištění velikosti stránky

Výstup z příkazu size vrací šířku a výšku zvolené stránky v pixelech a také stav rotace, je-li nastavena. Příklad demonstruje vytažení informace o rozměrech a rotaci třetí stránky z dokumentu soubor.djvu.

Poznámka

user@stroj:~$ djvused soubor.djvu -e 'select 3; size'

width=4960 height=7016 rotation=1

Pokud není uvedena konkrétní stránka, budou vypsány rozměry a informace ke všem stránkám dokumentu soubor.djvu.

Poznámka Ostatní informace o struktuře dokumentu lze získat příkazem djvudump.
Vytažení neviditelné textové vrstvy

Výstup příkazu print-pure-txt vrací čistě textový obsah skryté textové vrstvy DjVu dokumentu. Řádky a stránky jsou odděleny obvyklými kontrolními znaky.

Poznámka

user@stroj:~$ djvused soubor.djvu -e 'print-pure-txt'

Příkaz print-txt poskytuje podrobnější výstup, jehož syntaxe odpovídá syntaxi popsané v kapitole Textová vrstva DjVu dokumentu. Pro každý element jsou mimo textového obsahu uvedeny také jeho souřadnice vůči stránce. V příkladu lze vidět jak vytáhnout podrobnou strukturu textové vrstvy pro stránku 3.

Poznámka

user@stroj:~$ djvused soubor.djvu -e 'select 3; print-txt'

Vytažení anotací
Poznámka

user@stroj:~$ djvused soubor.djvu -e 'select 1; print-ant'

Záloha/obnova textové vrstvy
Poznámka

user@stroj:~$ djvused soubor.djvu -e 'output-all' > soubor.dsed


Poznámka

user@stroj:~$ djvused soubor.djvu -f soubor.dsed -s

Vytažení djvu stránky
Poznámka

user@stroj:~$ djvused soubor.djvu -e 'select 5; save-page' p05.djvu

Vytvoření náhledů

Náhledy, které se později mohou zobrazit ve čtečce DjVu souborů se vytváří pomocí příkazu set-thumbnails. Následující příklad vygeneruje náhledy o velikosti 64x64 pixelů pro všechny stránky souboru soubor.djvu

Poznámka

user@stroj:~$ djvused soubor.djvu -e 'set-thumbnails 64' -s

Příkazy pro djvused

Při spouštění djvused se může (ale nemusí) předat jeden i více příkazů případně komentář. Jednotlivé příkazy musí být odděleny středníkem ;. Za komentář je považováno vše co začíná mřížkou # až do konce aktuálního řádku.

Obsah DjVu dokumentu

Nástroj djvused je nejspolehlivějším a zároveň i velice svižným nástrojem pro získání informací o aktuálním obsahu DjVu dokumentu

ls

Vypisuje nejenom přehled všech stránek, které DjVu dokument obsahuje – včetně jejich velikosti, ale i jejich alternativní názvy, jsou-li nastaveny.

Poznámka

user@stroj:~$ djvused soubor.djvu -e ls

   1 P    22076  p0000.djvu T=Alternativní název strany číslo jedna
     A      126  shared_anno.iff
   2 P     9480  p0001.djvu
     …
dump

Vypisuje celou strukturu DjVu dokumentu, což dává přehled o použitých vrstvách jednotlivých stránek, jejich rozměrech, množství řezů, atp. Podobný výpis u vícestránkových dokumentů vrací také djvudump

Poznámka

user@stroj:~$ djvused soubor.djvu -e dump

 FORM:DJVM [128] 
   DIRM [27]         Document directory (bundled, 1 files 1 pages)
   FORM:DJVU [80] {black.djvu} [P1] (Alternativní název strany)
     INFO [10]         DjVu 1000x1000, v24, 300 dpi, gamma=2.2
     Sjbz [50]         JB2 bilevel data
Příkazy pro výběry

select [ identifikátor_souboru ]

select-shared-ant

Sdílená metadatová vrstva

V nově vytvořeném DjVU svazku sdílená metadatová vrstva neexistuje. Má-li tedy DjVu svazek nějaká sdílená metadata mít, je nutné tuto vrstvu nejprve vytvořit:

create-shared-ant - vytvoří sdílenou metadatovou vrstvu s názvem shared_ant.iff a do všech stránek přidá vrstvu INCL, která na ni bude odkazovat.

Upozornění Jakmile má DjVu svazek nějakou sdílenou metadatovou vrstvu, nelze ji žádným jednoduchým způsobem odstranit! Existuje pouze jediný způsob jak se to dá udělat. A to:
  1. Nejprve svazek převést z pevného svazku (bundle) na volný (indirect),
  2. a pak postupně všechny stránky prostřednictvím utility djvuextract rozebrat na jednotlivé vrstvy
  3. a z těch pomocí djvumake znovu sestavit DjVu stránky, ovšem již bez nastavení INCL na soubor sdílených metadat.
Různé příkazy

help

n

size

Příkazy pro práci s textem a poznámkami

print-pure-txt

print-txt

remove-txt

set-txt [ soubor_s_dsed_skriptem ]

output-txt

print-ant

print-merged-ant

remove-ant

set-ant

output-ant

print-meta

set-meta [ soubor_s_dsed_skriptem_pro_metainformace ]

output-all

Příkazy pro práci se záložkami

print-outline

set-outline

Příkazy pro práci s náhledy

set-thumbnails velikost_v_pixlech

remove-thumbnails

Příkazy pro uložení

save

save-bundled jméno_souboru

save-indirect jméno_souboru

save-page jméno_souboru

save-page-with jméno_souboru

Syntaxe pro DjVu soubory

Použitelná u dsed skriptů.

Omezení

Současná verze djvused umožňuje práci buď s jedinou vybranou stránkou v DjVu dokumentu, nebo s celým dokumentem. Nelze provádět výběry několika stran.

djvutoxml

Utilita djvutoxml je určená pro export textového obsahu DjVu dokumentu do XML souboru, který lze pak dále zpracovávat pomocí XSLT transformací, atp.

Použití

djvutoxml [volby] djvusoubor [volby] vystup.xml


Volby

--page pořadové_číslo_stránky

Do výstupu je zahrnuta pouze vybraná stránka.

--with-text

Do XML výstupu je vložena textová vrstva

--without-text

Do XML výstupu není vložena textová vrstva.

--with-anno

Do XML výstupu jsou zahrnuty poznámky, linky a metainformace

--without-anno

Výstup neobsahuje metainformace, linky a poznámky
Příklady použití


Omezení

Současná verze nástrojů, která je součástí distribučního balíku, je jemně řečeno na prd. djvutoxml vůbec nepracuje se záložkami a alternativními tituly stránek. A djvuxmlparser navíc neumí uspokojivě importovat hyperlinky.

djvutxt

Je konzolový nástroj pro rychlou extrakci elementů textové vrstvy u vícestránkových djvu dokumentů. Ten lze buď ukládat do souboru, nebo rourou předávat k dalšímu zpracování. Volbami lze pak ovlivnit kódování textu ve výstupu a to, zda bude vypsán čistý text, nebo vybrané oblasti včetně souřadnic.

Použití

djvutxt [volby] djvusoubor [výstup]

Volby

--page=<rozsah>

Nastavením rozsahu lze vymezit stránky se kterými se má pracovat. Stránky jsou určeny pořadovým číslem a odděleny čárkou ('1,3,5). Pokud má být zpracován souvislejší rozsah stránek, pak je mezi pořadovými čísly místo čárky pomlčka (6-10). Pořadí zpracování stránek lze obrátit tím, že se rozsah uvede v obráceném pořadí, tedy 10-1, bude zpracovávat stránky od desáté k první.

--detail=[page|column|region|para|line|word|char]

Není-li uveden žádný jiný --detail, automaticky se předpokládá že se mají vypsat znaky, bez specifikace oblasti. Tudíž výsledek je stejný jako by bylo pro detail uvedeno klíčové slovo char. V ostatních případech se kromě textu vypíše v S-syntaxi i vymezení příslušné oblasti

--escape

Tímto parametrem lze ovlivnit výstup, jak mají být zobrazovány netisknutelné znaky, které jsou ve výchozím stavu uloženy jako UTF-8

Příklady použití djvutxt

Nástroj lze využít při rychlém vyhledávání v uložených dokumentech. V následujícím příkladu mne zajímá, kde a v jakém kontextu se vyskytuje slovo Otehipwe v rosettaproject_ciw_book-3.djvu. Nejprve zkusím zjistit, jestli se zde vůbec toto slovo vyskytuje...

user@stroj:~$ djvutxt --detail=word rosettaproject_ciw_book-3.djvu | grep Otehipwe
         (word 148 960 429 1026 "Otehipwe") 
         (word 1450 128 1728 198 "Otehipwe") 

Výsledků není mnoho, takže si ho nechám vypsat celý řádek

user@stroj:~$ djvutxt --detail=line rosettaproject_ciw_book-3.djvu | grep Otehipwe
         "the Otehipwe language ever published. The compilation of it " ) 
         "the same as explained in the First Part of the Otehipwe &ram* " )


djvuxmlparser

Konzolový nástroj djvuxmlparser je určen pro import obsahu textové a metadatové vrstvy v DjVuXML formátu do DjVu dokumentu.

DTD (Definice typu dokumentu) DjVuXML, která obsahuje popis struktury XML tohoto typu dokumentu a vymezuje množinu přípustných elementů, je součástí distribuce DjVuLibre[15]. Jde o zjednodušenou definici HTML DTD, rozšířenou o několik specifických elementů:

OBJECT
V rámci jednoho DjVuXML dokumentu se může vyskytovat obsah celého DjVu svazku. Každá ze stránek pak má svůj vlastní element typu OBJECT, za kterým následuje element MAP s obsahem metadatové vrstvy příslušné stránky. Element OBJECT obsahuje základní atributy stránky:
  • její rozměry (atributy width a height)
  • cestu k dokumentu ze kterého byl obsah vyexportován (atribut data)
  • a jméno příslušné stránky (atribut usemap)
PARAM
Je element vyhrazeny pro hodnotu gammy a dpi. Obsahuje vždy dva atributy. Atribut name se jménem příslušného parametru a value s její hodnotou.
HIDDENTEXT
Obsahuje vlastní obsah skryté textové vrstvy v hierarchicky identické podobě, jako když s ním pracuje djvused. Zásadní rozdíl oproti .dsed formátu je v tom, že souřadnice obsahuje vždy hierarchicky nejnižší element, kterým je obvykle WORD.
PAGECOLUMNS
Se uplatní především v situaci, kdy je obsah stránky rozdělen do více sloupců
REGION
Je textová oblast, která může sdružovat několik souvisejících odstavců do logického celku
PARAGRAPH
Odstavec obvykle sdružuje několi řádků
LINE
Řádka, která obvykle sdružuje několik slov
WORD
Slovo
MAP
Element vyhrazený pro metadata. Bohužel jediným podporovaným typem je AREA.
AREA
Element, který je v rámci .dsed formátu součástí elementu maparea. Bohužel podporován je pouze typ rect
Upozornění Klíčovým nedostatkem utility djvuxmlparser je, že při importu obsahu XML souboru ve formátu DjVuXML je kompletně nahrazen nejenom stávající obsah textové vrstvy, ale i veškerých metadat stránky. Formát DjVuXML navíc nemá implementovanou podporu pro všechny typy metadatových elementů.

Použití

djvuxmlparser [ -o djvusoubor ] soubor_v_DjVuXML
Poznámka Pokud není uveden DjVu soubor do kterého se mají data naimportovat, pokusí se djvuxmlparser použít cestu uvedenou v atributu data, v rámci elementu OBJECT.

Problém při importu DjVuXML

Upozornění Ačkoliv utilita djvutoxml umožňuje vyexportovat samostatně text i metadata, při pokusu o import DjVuXML souboru bez elementu MAP nejspíš narazíte. Navíc, jak už bylo uvedeno, prázdný element MAP bude mít za následek ztrátu veškerých existujících metadat.

Jediným rozumným způsobem, jak ošálit tento nedostatek, je naimportování obsahu DjVuXML dokumentu do prázdného DjVu souboru

user@stroj:~$ cat soubor.xml
…
<OBJECT data="file://localhost/home/user/soubor.djvu" type="image/x.djvu" height="1000" width="1000" usemap="page05.djvu" >
<PARAM name="DPI" value="300" />
…
user@stroj:~$ djvumake temp.djvu INFO=1000,1000,300 soubor.xml
djvumake: djvu file contains neither Sxxx nor BGxx chunks
user@stroj:~$ djvuxmlparser -o temp.djvu soubor.xml
user@stroj:~$ djvudump temp.djvu 
 FORM:DJVU [82] 
   INFO [10]         DjVu 1000x1000, v24, 300 dpi, gamma=2.2
   TXTz [52]         Hidden text (text, etc.)
user@stroj:~$ djvused temp.djvu -e 'select 1 ; print-txt' > text.dsed
user@stroj:~$ djvused soubor.djvu -e 'select page05.djvu ; set-txt text.dsed' -s
Poznámka Podobným způsobem provádí import DjVuXML nástroj djvutool

gsdjvu

Aplikace gsdjvu je shellový wrapper k binární instanci ghostscriptu[16], rozšířené o dva speciální ovladače, které umožňují přímý tisk do DjVu formátu. Původní zdrojový kód, jehož vlastníkem byla firma AT&T, byly patentově chráněn, proto byl součástí projektu DjVuLibre pouze skript djvudigital, který bylo možné použít pouze když měl nainstalovaný ghostscript tyto ovladače k dispozici.

R. 2005 však AT&T zdrojový kód uvolnila pod [CPL licencí], což umožnilo vznik jeho opensource mutace, která se mohla stát součástí DjVuLibre. Protože ale jde o kód který je stále závislý na zdrojácích ghostcriptu, je udržován v samostatném git repozitáři GSDjVu. Proto také není standardní součástí distribučních balíků DjVuLibre.

Chcete-li gsdjvu používat, nezbývá než se pustit do kompilace ze zdrojových kódů.

Kompilace gsdjvu

Upozornění Především je nutno upozornit, že kód není systematicky udržovaný. V README se sice dočtete, že podporovaná verze ghostscriptu je 8.64[17], ovšem nejnižší verze ghostscriptu, kterou lze stáhnout na odkazované stránce je 9.18.

Naštěstí aktuální kód z repozitáře GSDjVu lze s touto verzí sestavit a používat aniž by byla v konfliktu s distribuční verzí ghostscriptu (aktuálně verze 9.22)

user@stroj:~$ git clone https://git.code.sf.net/p/djvu/gsdjvu-git djvu-gsdjvu-git
user@stroj:~$ cd djvu-gsdjvu-git
user@stroj:~/djvu-gsdjvu-git$ mkdir BUILD
user@stroj:~/djvu-gsdjvu-git$ cd BUILD
user@stroj:~/djvu-gsdjvu-git/BUILD$ wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs918/ghostscript-9.18.tar.gz
user@stroj:~/djvu-gsdjvu-git/BUILD$ cd ..
user@stroj:~/djvu-gsdjvu-git$ ./build-gsdjvu
…

Skript build-gsdjvu si po spuštění nejprve vyžádá potvrzení, že jste seznámeni s licenčním ujednáním. Součástí licenčního ujednání je také informace o tom, k čemu se tato utilita vlastně hodí, takže rozhodně stojí za to si ho přečíst.

Pak se zeptá na adresář, do kterého máte stažen zdrojový kód ghostscriptu (./BUILD) a případně i zdrojáky pro další knihovny – ty ovšem není nutné stahovat, pokud máte nainatalovány hlavičkové soubory příslušných balíků z vaší distribuce. U Debianu stačí přes APT doinstalovat před kompilací tyto balíky:

root@stroj:~# apt-get zlib1g-dev libjpeg-dev libjpeg62-turbo-dev libpng-dev

Po odklepnutí skript rozbalí stažený tarball, opatchuje a nakopíruje vše co je potřeba, zkompiluje, a nakonec nainstaluje do podadresáře ./BUILD/INST/gsdjvu se vším co je potřeba. Tento adresář si pak můžete přesunout dle potřeby, případně si z něj můžete (v Debianu) vyrobit instalační DEB balíček.

Použití

Volby

bindery

Použití

Volby

Příklady použití

didjvu

DjVu enkodér s podporou separace vrstvy popředí od pozadí.

Použití

djvutxt [volby] djvusoubor [výstup]

Volby

Příklady použití didjvu

djvubind

Utilita pro tvorbu DjVu svazků z naskenovaných knih, která využívá nástroje z DjVuLibre, minidjvu a ocr nástroje pro rychlé vytvoření DjVu svazku.

http://www.djvu.hu/keszites/djvubind

Použití

Volby

Příklady použití

minidjvu

Použití

Volby

Příklady použití

pdf2djvu

Použití

Volby

Příklady použití

Zdroje

  1. Kromě této prohlížečky vytvořil její autor také nástroj pro tvorbu rejstříku (outline) - BookmarkTool. Jeho poslední verze 2.0 je z r. 2007 a oproti starší verzi 1.0 existuje i pro Mac Os X (první verze byla pouze pro MS Windows)
  2. https://windjview.sourceforge.io/version-history
  3. Komeční alternativa k csepdjvu
  4. Můžete se s ní setkat pouze u DjVu souborů verze 24. Má konstatní velikost 35 bajtů a její obsah nebyl nijak standardizovaný. Zřejmě byl závislý na použité aplikaci. Některá (jako kupř. msepdjvu) sem uložila své jméno a číslo verze, za kterým následovaly nějaká binární data. Jiná ho nechala zcela prázdný. V případě vícestránkových DjVu souborů poslední 4 bajty udávají pořadové číslo stránky (v hexa).
  5. Jakub Wilk naprogramoval rovněž djvusmooth, pdf2djvu a konverzní nástroj didjvu
  6. Directive 2009/24/EC of The European parliament and of The Council of 23 April 2009 on the legal protection of computer programs
  7. Jak o tom informoval v diskuzi
  8. Obával se US patentu č. 5303313, který obsahuje následující větu:

    Na základě aplikace vynálezu jsou všechny symboly, o velikosti menší než je určitá prahová hodnota (například čtyři), při procesu identifikace symbolu eliminovány.

    Z textu je zřejmé, že jde o zcela obecný princip, který popisuje obecný způsob vykonávání činnosti (viz Co nelze patentovat?) – když třídíme kamení, také nás nezajímá písek.

    Kromě toho, podle informací na google.com, platnost US patentu č. 5303313 vypršela v uplynulém r. 2017.

  9. Vrstva 'Djbz se může stát součástí stránky je-li stránka využívající sdílení tvarů v rámci DjVu svazku vyexportována a vložena do jiného DjVu svazku.
  10. V tomto případě jde o pouhý úzus, protože se tato vrstva může jmenovat naprosto libovolně.
  11. V době, kdy začal vznikat tento manuál (2010) komerční software vyvíjela a nejspíš i vlastnila práva k původnímu kódu fa. Camino
  12. http://jwilk.net
  13. http://sourceforge.net/projects/webdjvutexted
  14. DEFLATE [di'fleit], je kompresní algoritmus založený na kombinací LZ77 a Huffmanova kódování, ze kterého vychází např. gzip, nebo LZMA.
  15. Jako soubor /usr/share/djvu/pubtext/DjVuXML-s.dtd
  16. [ https://cs.wikipedia.org/wiki/Ghostscript Ghostscript] je interpreter souborů ve formátu PostScript (.ps) a PDF, který lze použít jako filtr k jejich převodu do rastrové grafiky.
  17. GPL ghostscript 8.64 na SourceForge