djvm (DjVuLibre)
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í.
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.
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