[[Vorlage(Getestet, bionic, focal)]]
{{{#!vorlage Wissen
[:Pakete installieren: Installation von Programmen]
[:Programme kompilieren: Pakete aus dem Quellcode erstellen]
[:Packprogramme: Archive entpacken]
[:Rechte: Rechte für Dateien und Ordner ändern]
[:Terminal: Ein Terminal öffnen]
[:sudo:Root-Rechte]
[:Editor: Einen Editor verwenden]
}}}
[[Inhaltsverzeichnis()]]
[[Bild(XSane/xsane-logo.png, 64, left)]]
Mit xsane2djvu lassen sich farbige mehrlagige [:DjVu:]-Dateien direkt aus [:XSane:] heraus über die Texterkennungsfunktion realisieren. Über dieses Verfahren können ein- oder mehrseitige DjVu-Dateien erstellt werden, als Encoder können die Programme [:didjvu:] (Standard), [http://djvu.sourceforge.net/doc/man/cjb2.html cjb2] {en} (sinnvoll für "lineart"-Vorlagen), [:minidjvu:] (nur für Schwarz-Weiß-Vorlagen), [http://djvu.sourceforge.net/doc/man/cpaldjvu.html cpaldjvu] {en} (für Vorlagen mit wenigen Farben) oder [http://djvu.sourceforge.net/doc/man/c44.html c44] {en} (für reine Grafik-DjVu-Dateien, keine automatische Texterkennung möglich!) eingesetzt werden. Zusammen mit der [:DjVu#Aufbau-des-Formats:Segmentierung] und dem Programm [:ocrodjvu:] ist es auch für "Privat"-Anwender relativ einfach möglich, die bitonale Ebene einer Bildvorlage zu extrahieren, und eine mehrlagige DjVu-Datei mit Textebene zu erstellen. Über XSane lassen sich dabei die Scan-Optionen gezielt setzen, um so eine spätere Nachbearbeitung weitestgehend zu umgehen.
= Vorbereitung =
Voraussetzung ist eine Installation von [:didjvu:] (nicht mehr in den Quellen vorhanden!), außerdem der grundlegenden DjVu-Programme, [:ocrodjvu:] zur Texterkennung (mit den gewünschten OCR-Programmen, unterstützt werden [:Cuneiform-Linux:], [:GOCR:], [:Ocrad:], [:tesseract-ocr:]), sowie natürlich des Scanprogramms [:XSane:]:
{{{#!vorlage Paketinstallation
djvulibre-bin, universe
ocrodjvu, universe (nur bis 18.04 in den Quellen!)
xsane, universe
gocr, universe, optional
ocrad, universe, optional
tesseract-ocr, sowie die gewünschten Sprachpakete, optional
cuneiform, optional
unpaper, optional
exactimage, optional
imagemagick, optional
}}}
= Skript =
Das eigentliche Skript wird in einen Editor[7] kopiert, unter einem aussagekräftigen Namen, z.B. '''xsane2djvu.sh''' abgespeichert und ausführbar[4] gemacht. Alternativ kann man es auch [[Anhang(xsane2djvu/xsane2djvu.sh herunterladen)]] {dl}.
{{{#!code bash
#!/bin/bash
# xsane2djvu - djvu directly from xsane
# Copyright (C) 2010-20 Heinrich Schwietering
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
##############################################################################
#
# xsane2djvu 0.7.1
#
# *** djvu made simple (well, kind of ...) ***
#
#
##############################################################################
#
# xsane2djvu is a wrapper script to produce djvu files with xsane.
# It "mimics" the segmentation process used by commercial djvu products.
# The scan is converted into a multilayered djvu file using didjvu
# which depends on the gamera-framework to produce a foreground mask.
# Other encoders like cjb2, c44, cpaldjvu or minidjvu are possible as well.
# Finally a text layer is added, using ocrdjvu (OCR engines cuneiform,
# tesseract-ocr, gocr and ocrad) and addup the pages to a bundled djvu file.
#
TEMP_DIR=/tmp/ # folder for temporary files (all files)
ERRORLOG="xsane2djvu.log" # file where STDERR goes
if [[ -z "$1" ]]
then
echo "Usage: $0 [OPTIONS]
run the script as OCR-application for xsane!
xsane2djvu uses a ppm files, and produces a 'split' djvu file using
didjvu as standard application, the result is ocred using ocrodjvu
OPTIONS:
-i - temporary XSANE file
-o - name for the single page output
-l - define the language used for recognition
-e - tesseract or cuneiform (with libmagick++-support!), noocr
disables the ocr function
-a <-ocrodjvu-option> - additional ocrodjvu options, optional
-f - complete path to save location for
multipage-djvu, optional, without it a single page djvu is created
-c - usable c44 (no ocr possible), cjb2, cpaldjvu, or minidjvu;
parameter is optional, without didjvu is used as standard
-q <-option for encoder> additional options for encoder used, optional
Progress- & error-messages will be stored in this logfile:
$TEMP_DIR$ERRORLOG
xsane2djvu depends on
- XSane http://www.xsane.org/
- DjVuLibre http://djvu.sourgeforge.net
- minidjvu http://minidjvu.sourceforge.net/
- cuneiform-linux https://launchpad.net/cuneiform-linux Cuneiform-Linux
- indirectly on libmagick-++dev http://www.imagemagick.org/
- tesseract https://github.com/tesseract-ocr
- didjvu and ocrodjvu http://jwilk.net/software/
- indirectly on gamera http://gamera.informatik.hsnr.de/
Some coding was stolen from 'ocube'
http://www.geocities.com/thierryguy/ocube.html
This djvu adaption is based on xsane2tess
http://doc.ubuntu-fr.org/xsane2tess,
Hints always welcome! heinrich (dot) schwietering (at) gmx (dot) de
"
exit
fi
# get options...
while getopts ":i:o:l:e:a:f:c:q:" OPTION
do
case $OPTION in
i) # input filename (with path)
FILE_PATH="$OPTARG"
;;
o ) # output filename
FILE_OUT="$OPTARG"
;;
l ) # recognition language
REGLANG="$OPTARG"
;;
e ) # engine option
ENGINE="$OPTARG"
;;
a ) # additional ocrodjvu option
OCROPT="$OPTARG"
;;
f ) # final name for bundled djvu file option
FINAL="$OPTARG"
;;
c ) # encoder to use (standard is didjvu)
ENCODER="$OPTARG"
;;
q ) # option for encoder
ENCOPT="$OPTARG"
;;
esac
done
# redirect STDOUT to FILE_OUT
exec 1>>$FILE_OUT
# redirect STDERR to ERRORLOG
exec 2>>$TEMP_DIR$ERRORLOG
# strip path from FILE_PATH, use filename only
IN_FILE="${FILE_PATH##*/.*}"
echo "~~~+++~~~~+++~~~" 1>&2
# check if an encoder is requested
if [[ $ENCODER != '' ]]
then
{
# check if minidjvu is requested
if [[ $ENCODER == "minidjvu" ]]
then
# prepare file for minidjvu
convert "$IN_FILE" "minidjvu.pbm"
echo "file converted" 1>&2
# use minidjvu and rename file
minidjvu $ENCOPT "minidjvu.pbm" "minidjvu.djvu"
echo "$ENCODER $ENCOPT used" 1>&2
cp "minidjvu.djvu" "$FILE_OUT"
else
# use other requested encoder and options
$ENCODER $ENCOPT "$IN_FILE" "$FILE_OUT"
echo "$ENCODER $ENCOPT used" 1>&2
fi
}
else
# produce segmented djvu file with didjvu
didjvu encode $ENCOPT -o "$FILE_OUT" "$IN_FILE"
echo "didjvu $ENCOPT used" 1>&2
fi
# check if ocr is requested
if [[ $ENGINE == 'noocr' ]]
then
cp "$FILE_OUT" "$FILE_OUT.djvu"
echo "no ocr used" 1>&2
else
# check if language is set, if not use english; language is set according to used system language setting
if [[ $REGLANG == "" ]]
then
ocrodjvu --engine=$ENGINE -o "$FILE_OUT.djvu" --language eng $OCROPT "$FILE_OUT" 1>&2
echo "$ENGINE used with language eng $OCROPT" 1>&2
# use requested engine and language for ocr
else
ocrodjvu --engine=$ENGINE -o "$FILE_OUT.djvu" --language "$REGLANG" $OCROPT "$FILE_OUT" 1>&2
echo "$ENGINE used with language $REGLANG $OCROPT" 1>&2
fi
fi
# check if multipage document is requested
if [[ $FINAL != '' ]]
then
{
# check if final file is already existing
if [[ ! -a "$FINAL".djvu ]]
then
# start final djvu file
cp "$FILE_OUT.djvu" "$FINAL".djvu 1>&2
echo "$FINAL started" 1>&2
# insert new djvu file at the end of final file
else
djvm -insert "$FINAL".djvu "$FILE_OUT.djvu" 1>&2
echo "$FILE_OUT added to $FINAL" 1>&2
fi
# remove temporary single page djvu
rm "$FILE_OUT".djvu
}
fi
# Remove djvu without text
rm "$FILE_OUT"
echo "~~~+++~~~~+++~~~" 1>&2
}}}
Das Skript ist eine Weiterentwicklung des [:tesseract-ocr#xsane2tess:xsane2tess]-Skriptes, das auf [ubuntu_fr:xsane2tess:ubuntu-fr.org] veröffentlicht worden ist.
Das Temporärverzeichnis (Zeile 36) kann entsprechend der eigenen Wünsche abgepasst werden, dort wird auch die '''xsane2djvu.log'''-Datei abgelegt. Das Log wird in der Standardeinstellung nach Abschalten des Rechners gelöscht; wer es später verwenden möchte, sollte ein anderes Verzeichnis wählen, das aber bereits existieren muss!
= Benutzung =
In ''"XSane -> Einstellung -> Konfiguration -> Texterkennung"'' wird als OCR-Befehl ''"/PFAD/ZU/xsane2djvu.sh"'' sowie weitere Optionen zur Steuerung angegeben. Verwendbare Optionen sind:
{{{#!vorlage Tabelle
<-2 rowclass="titel"> Optionen für xsane2djvu
+++
Argument
Funktion
+++
`-e [OCR-PROGRAMM]`
`cuneiform`, `gocr`, `ocrad` oder `tesseract`; `noocr` schaltet die Texterkennung ab
+++
`-l [Sprachkürzel]`
Legt die verwendete Sprache für den OCR-Engine fest; optional, ohne Angabe wird Englisch verwendet
+++
`-a ["OCRODJVU-OPTION(EN)"]`
ocrodjvu-Option(en), müssen in Anführungszeichen stehen; optional
+++
`-f [/PFAD/ZUR/MULTIPAGE-DATEI/SAMMELNAME]`
Option zur Erstellung eines mehrseitigen Dokumentes, Angabe des kompletten Pfads ist nötig ('''~''' oder '''$HOME''' funktionieren nicht!); ohne Pfadangabe wird das Dokument im Homeverzeichnis des Benutzers abgelegt. Optional, ohne diese Option wird jeweils ein einseitiges DjVu-Dokument erstellt.
+++
`-c [ENCODER]`
Verwendeter Encoder, nutzbar sind `c44` (keine Texterkennung über ocrodjvu möglich!), `cjb2`, `cpaldjvu` oder `minidjvu`. Die Verwendung ist optional, ohne sie wird didjvu eingesetzt.
+++
`-q ["-ENCODER-OPTION(EN)"]`
Encoder-Option(en), müssen in Anführungszeichen stehen; optional
}}}
Als Option für die Eingabedatei in ''"XSane -> Einstellungen -> Konfiguration -> Texterkennung"'' werden ''"-i"'', für die Ausgabedatei ''"-o"'' angeben, die weiteren Felder bleiben leer. Die möglichen Sprachkürzel für ocrodjvu lassen sich über den Befehl[5]
{{{#!vorlage Befehl
ocrodjvu --engine OCR-PROGRAMM --list-languages
}}}
ausgeben (und sind abhängig von den installierten [:tesseract-ocr#Installation:Tesseract-Sprachpaketen]), für Cuneiform lassen sich alle [:Cuneiform-Linux#Sprachen: unterstützten Sprachen] angeben, ohne Angabe ist die Standardeinstellung Englisch (`eng`). Als ocrodjvu-Optionen lassen sich natürlich nur für Einzelbilder sinnvolle Parameter eintragen, also z.B. ''-a "-t words|lines|chars"'' oder ''"--word-segmentation simple|uax29"'' (siehe [:ocrodjvu#Optionen:ocrodjvu-Optionen]), die Verwendung ist optional. Ähnliches gilt für die Optionen des verwendeten Encoders, Einzelheiten in den jeweiligen [:man:Manpages]. Die Optionen müssen wie in der Tabelle angegeben in Anführungszeichen gesetzt werden.
Die Vorlage wird in XSane im [:XSane#Betrachter:Betrachter-Modus] erstellt. Als Auflösung werden 300 dpi empfohlen, die Farbeinstellung je nach Vorlage gewählt. Im Betrachter die Texterkennung ([[Bild(xsane/xsane-ocr.jpg, 18)]]-Taste) wählen, der Ausgabename wird __ohne__ Endung im OCR-Speicher-Dialog festgelegt (für die Erstellung mehrseitige Dateien ist das unerheblich). Alternativ kann auch, wenn keine Kontrolle/zusätzliche Speicherung des Bildes erforderlich sind, im [:XSane#Speichern:Speichermodus] mit der Erweiterung ''"TEXT"'' direkt die Erstellung der Datei erfolgen, ohne im Betrachter-Modus die OCR-Funktion aufrufen zu müssen. Die DjVu-Datei wird dann in angegebenen Verzeichnis (Schreibrechte nötig!), wenn die Option -f verwendet wird, als '''SAMMELNAME.djvu''' abgelegt, und enthält eine durchsuchbare Textebene. Die Qualität der Texterkennung ist dabei vom Aufbau der Vorlage abhängig; je "verschachtelter" Text und Grafikelemente sind, desto schwieriger wird die exakte Zerlegung, und damit die Texterkennung. Tesseract liefert bei Tabellen die besten Ergebnisse, bei Vorlagen mit Bildern schneidet meist Cuneiform besser ab.
{{{#!vorlage Hinweis
Die Verwendung der Option ''"Mehrseitig"'' in XSane ist für die Erstellung von djvu-Dateien nicht möglich; damit können nur '''.tiff''' , Postscript oder '''PDF'''-Dateien erstellt werden! Mehrseitige '''djvu'''-Dateien werden über die entsprechende Angabe des Pfads und Namen in der Option `-f` erzeugt.
}}}
== Beispiele ==
{{{#!vorlage Warnung
Die Angaben müssen sehr exakt erfolgen, es dürfen zwischen den Optionen __nur einfache__ Leerzeichen verwendet werden, sonst kommt es zu Fehlern!
}}}
Die Eingabe in ''"XSane -> Einstellungen -> Konfiguration -> Texterkennung -> OCR Befehl"''
{{{
/PFAD/ZU/xsane2djvu.sh -l ger -e cuneiform
}}}
führt zur Erstellung eines einseitgen DjVu-Dokument mit dem im OCR-Speicher-Dialog angegebenen Dateinamen und Verzeichnis; verwendet wird didjvu zur Encodierung und Cuneiform für die Texterkennung, Sprache ist Deutsch.
{{{
/PFAD/ZU/xsane2djvu.sh -l deu -e tesseract -a "-t lines" -c cjb2 -q "-lossy" -f /home/BENUTZER/Archiv/Zeitschrift/2010
}}}
erstellt die erste Seite eines mehrseitiges Dokument '''2010.djvu''' im Ordner '''~/Archiv/Zeitschrift''' (das Verzeichnis muss bereits existieren!). Verwendet wird der Encoder cjb2 (für schwarz-weiße Vorlagen sinnvoll) mit der ocrodjvu-Option `-lossy` (bessere Komprimierung). Zur Texterkennung wird tesseract-ocr, Sprache Deutsch, verwendet, der Text wird in Zeilen, nicht in einzelnen Wörtern gespeichert (weitere Größenersparnis). Weitere Scans mit dieser Einstellung werden dann jeweils an die Datei '''2010.djvu''' angehängt, die temporären einseitigen Dateien werden gelöscht (sie können mit Auskommentieren der Zeile 179 `rm "$FILE_OUT".djvu` im Skript auch erhalten werden). Das mehrseitige Dokument ḱann jederzeit wieder weiter ergänzt werden, wenn der komplette Pfad zur Datei (ohne Endung!) in der Option `-f` korrekt angeben ist. Es lassen sich auch - z.B. für Seiten ohne Text, oder reine schwarz-weiße Seiten in ansonsten farbigen Vorlagen - andere Optionen im selben "Sammeldokument" verwenden.
== Korrekturen an der Vorlage ==
Um die Vorlagen automatisch gerade zu ziehen, und eine "Unschärfe-Maskierung" noch vor Erstellung der DjVu-Datei zu erzielen (die Erkennung wird ggf. besser, die Optik sowieso) kann im Skript nach Zeile 122 der Block
{{{
## deskew and mask unsharp in-file using imagemagic
cp "$IN_FILE" zwischen.ppm ## Temporärdatei, die convert verarbeiten kann)
convert zwischen.ppm -deskew 40% -unsharp 1x2 "$IN_FILE"
}}}
eingefügt werden. Der `convert`-Befehl stammt aus der [:ImageMagick:]-Suite, die Optionen können bei Bedarf auch abgewandelt werden. Die Datei muss zunächst kopiert werden, weil `convert` die temporäre XSane-Datei aufgrund der angehängten Zufallsbezeichnung nicht als '''.ppm'''-Datei erkennt. Leider kann es bei der Nutzung des cjb2-DjVu-Encoders zu Problemen kommen, da die Erkennung der durch `convert` erzeugten '''.ppm'''-Datei nicht gewährleistet ist; dann sollte man besser die unpaper-Variante nutzen.
== Nutzung von unpaper ==
Es ist auch möglich, die Vorlagen direkt durch [:unpaper:] einer umfassenden automatischen Korrektur unterziehen zu lassen. Dazu kann ein unpaper-Befehl mit den gewünschten Optionen am Anfang der Verarbeitung im Skript eingebaut werden. Wenn allerdings eine Seitenaufteilung (also z.B. ein doppelseitiger Scan eines Buches in zwei Einzelseiten) erfolgen soll, muss eine Schleife erstellt werden, die den gesamten DjVu-Erstellprozess für beide entstandenen Vorlagen-Seiten durchführt. Möglich ist das allerdings nur im "Sammel-Modus" für mehrseitige DjVu-Dateien mit der Option `-f`.
Im nachfolgenden Beispiel wird eine doppelseitige Vorlage mit eine Textverlauf von unten nach oben gedreht, gesäubert und in zwei DjVu-Seiten überführt. Der erste Block wird nach Zeile 122 eingefügt. Zunächst wird die Eingabedatei in eine für unpaper lesbare Form überführt ('''zwischen.ppm'''), dann gedreht, und in zwei "durchnummerierte" Bilder (`doppelzwischen%03d.ppm`, erzeugt '''doppelzwischen001.ppm''' und '''doppelzwischen002.ppm''') aufgeteilt. Diese werden in der nachfolgenden Schleife bearbeitet.
{{{
##unpaper, two pages, bottom-top-text direction
cp "$IN_FILE" zwischen.ppm
unpaper --pre-rotate -90 --layout double --output-pages 2 zwischen.ppm doppelzwischen%03d.ppm
for i in `ls doppelzwischen*`; do
...
}}}
Innerhalb der Schleife müssen die Variablen "`$FILE_IN`" durch "`$i`", dem Schleifenzähler, ersetzt werden. Die Schleife wird direkt vor Ende des Skriptes wieder geschlossen, die nicht mehr benötigten Temporärdateien gelöscht:
{{{
...
rm "$i"
done
rm zwischen.ppm
rm "$FILE_OUT"
echo "~~~+++~~~~+++~~~" 1>&2
}}}
Auch eine kombinierte Nutzung mit der [#Automatisches-Drehen-der-Vorlage Automatischen Drehung] ist machbar sein, dann benötigt man die `--pre-rotate`-Option von unpaper natürlich nicht.
== Nutzung von Bildbearbeitungsprogrammen ==
Die Temporärdatei können auch direkt in externen Bildbearbeitungsprogrammen nachbearbeitet werden (z.B. um ungewünschte Anmerkungen, Unterstreichungen, Kaffeeflecken etc. zu entfernen). Dazu muss allerdings der Betrachter-Modus gewählt sein. Die zu bearbeitende Datei findet man im '''/tmp'''-Verzeichnis, ihr Name wird von XSane aus dem [:SANE#Backend:Backend], der Scanner-Verbindung und angehängten Zufallszeichen, '''xsane-conversion-BACKEND:BUS:USBPORT:NUMMER.ppm-1000-XXXXXX''' gebildet, konkret so etwas wie '''xsane-conversion-gt68xx:libusb:003:002.ppm-1000-4rlFon'''. Falls im XSane-Betrachter schon Änderungen vorgenommen wurden (Drehung etc.), muss stattdessen '''xsane-viewer...''' gewählt werden. Die Datei lässt sich in Bildverarbeitungsprogrammen öffnen (z.B. im [:GIMP:]), und dort bearbeiten. Sie muss dann mit dem exakten Namen wieder abgespeichert werden! Zumindest im GIMP ist das etwas fummelig, weil als gültiger Name nur der erste Teil bis einschließlich der '''.ppm'''-Endung akzeptiert wird. Man muss also die Datei nach dem Abspeichern ensprechend wieder um die `-1000-XXXXXX`-Zufallsbezeichnung erweitern (copy'n'paste bietet sich dafür an). Diese Änderungen zeigt zwar der XSane-Betrachter nicht an, sie werden aber im weiteren Verlauf verwendet.
== Automatisches Drehen der Vorlage ==
{{{#!vorlage Experten
Seit Tesseract 3.03 kann man das Ergebnis der Option `--psm 0`, mit der nur die Schriftrichtung einer Vorlage ausgegeben wird, direkt verwenden, um vor Bearbeitung der Scans eine automatische Drehung durchführen zu lassen. In der Ausgabe gibt `Orientation in degrees: XX` die Ausrichtung der Schrift an. Dieser Wert kann verwendet werden, um das Bild entsprechend zu drehen. Für das '''xsane2djvu.sh'''-Skript ist das über die Ergänzung um folgende Zeilen (nach Zeile 122 einfügen) möglich:
{{{
cp "$IN_FILE" zwischen.ppm
`tesseract zwischen.ppm stdout --dpi 300 --psm 0 quiet > orientation.txt 2>&1`
ORIENTATION=`cat orientation.txt | head -2l | tail -1l | cut -d" " -f4`
if [[ $ORIENTATION != "0" ]]; then
econvert -i zwischen.ppm --rotate $ORIENTATION -o zwischen.ppm
fi
\}}}
Damit wird die temporäre Datei '''orientation.txt''' erstellt, die in der 2. Zeile die benötigte Angabe `Orientation in degrees: XX` enthält, der XX-Wert wird ausgelesen und für die Drehung verwendet. Die Eingabedatei muss temporär umbenannt werden, weil `econvert` und `unpaper` den Dateinamen sonst nicht akzeptieren. Zum Einsatz kommt der `econvert`-Befehl aus [:ExactImage:]; mit dem `convert`-Befehl aus [:ImageMagick:] kann es zu Problemen mit dem cjb2-Encoder kommen.
Wenn das automatische Geradeziehen (s.o.) nicht verwendet wird, muss `zwischen.ppm` schon hier wieder in `"$FILE_IN"` überführt werden (`cp zwischen.ppm "$IN_FILE"`).
}}}
== DjVu-Dateien ohne Textebene ==
Das Skript kann auch zur Erstellung von DjVu-Dateien ohne Texterkennung verwendet werden, dazu muss als `engine`-Option `noocr` gesetzt werden. Das ist ggf. sinnvoll, wenn eine Texterstellung erst für ein gebündeltes mehrseitiges Dokument erstellt werden soll; so lassen sich z.B. einige der [:ocrodjvu#Optionen:ocrodjvu-Optionen] effektiver nutzen.
== Einfügen und Löschen von Seiten ==
Wenn man Teile in einem Dokument z.B. versehentlich vergessen hat, kann man andere DjVu-Dateien (auch mehrseitige) im Terminal mit dem Programm [http://djvu.sourceforge.net/doc/man/djvm.html `djvm`] {en} (Teil von '''djvu-libre''') einfügen. Der Befehl lautet:
{{{#!vorlage Befehl
djvm -i HAUPTDOKUMENT.djvu EINFÜGUNG.djvu SEITENZAHL
}}}
Die Datei wird dann vor der eingegebenen Seitenzahl eingefügt, alle nachfolgenden Seiten verschieben sich entsprechend.
Das Löschen einzelner Seiten funktioniert ähnlich:
{{{#!vorlage Befehl
djvm -d DOKUMENT.djvu SEITENZAHL
}}}
Mehrere Seiten lassen sich allerdings nur über "Umwege" bzw. Loops entfernen; hier ein Beispiel, um die Seiten 41-49 eines Dokumentes zu entfernen:
{{{#!vorlage Befehl
count=41 ; until [ $count -gt 49 ] ; do djvm -d DOKUMENT.djvu 41 ; count=`expr $count + 1` ; done
}}}
Siehe dazu auch diesen [http://tinyapps.org/blog/nix/201002150700_delete_multiple_pages_djvu_djvm.html Blogbeitrag] {en} für weitere Möglichkeiten.
Eine andere Variante, hier um die Seiten 170-174 zu entfernen, wäre
{{{#!vorlage Befehl
for ( $i = 0; $i -lt 5; $i++ ) { djvm -d DOKUMENT.djvu 170 }
}}}
== Zusammenführen einzelner DjVu-Dateien ==
Einzelne durchnummerierte DjVu-Dateien lassen sich auch auf der Kommandozeile mit dem Befehl
{{{#!vorlage Befehl
djvm -c SAMMELNAME.djvu NAME*.djvu
}}}
zu einem gemeinsamen Dokument unter '''SAMMELNAME.djvu''' verbinden, die Reihenfolge der Seiten ist von der kleinsten (alphanumerisch sortiert) aufsteigend. Nutzbar z.B. mit der automatischen Nummerierung, um doppelseitige Vorlagen zu scannen: erste die ungeraden Seiten, beginnend mit `001` und automatischer Erhöhung um +2, dann die geraden, beginnend mit `002` (oder von hinten beginnend, denn die Funktion lässt auch intervallweises Rückwärtszählen zu).
= Probleme und Lösungen =
Falls Probleme auftauchen, liefert das angelegte Protokoll '''xsane2djvu.log''' ggf. Hinweise zur Lösung.
== Cuneiform ==
Wenn Cuneiform-Linux beim Konvertieren mit einer Meldung
{{{
*** buffer overflow detected ***: cuneiform terminated
}}}
und nachfolgendem Backtrace abstürzen sollte (siehe [bug:609482:]), ist ggf. die Auflösung für den Scanvorgang zu hoch gewählt. Teilweise tritt das bei Farbscans auch bei einer Auflösung von 300 dpi auf. Abhilfe kann das Scannen mit niedrigerer Auflösung und nachfolgendem Skalieren der Vorlage im Betrachter von XSane schaffen; allerdings kann die Erkennungsqualität etwas leiden. Ggf. hilft es, als letzte ocrodjvu-Option `