djvm (DjVuLibre)

Z thewoodcraft.org
Stránka byla naposledy editována 17.8.2023

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ámkaTí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