Aide:Créer un fichier DjVu/Linux
Aide
Créer un fichier DjVu
Linux
Vous aurez besoin de DjVuLibre qui comprend un visualiseur, et plusieurs utilitaires pour créer et manipuler des fichier Djvu. Vous aurez probablement aussi besoin du logiciel Imagemagick pour convertir d’un format dans un autre et retoucher les scans. L’utilitaire cjb2 permet de créer un fichier DJVU à partir d’un fichier PBM ou TIFF. Il faut donc d’abord convertir vos scans s’ils ne sont dans l’un de ces formats.
Sommaire |
[modifier] En ligne de commande
Pdf2djvu et DjVuDigital sont deux utilitaires de conversion en ligne de commande. pdf2djvu est disponible dans les dépôts d’Ubuntu et d’autres distributions. DjVuDigital fait partie des utilitaires de DjVuLibre et se trouve également dans les dépôts d’Ubuntu, mais il exige en outre la compilation de GSDjVu pour fonctionner.
[modifier] Deux programmes tout-en-un
[modifier] pdf2djvu
Dans le cas où votre pdf est déjà de qualité suffisante (complet, détouré, etc.), et que vous n’avez pas de couche texte à ajouter, vous pouvez utiliser directement le paquet pdf2djvu avec la commande :
pdf2djvu -d 300 -o nouveau-fichier.djvu fichier-d-origine.PDF
où « d » (dpi) est la résolution du document d’origine, 300 en général pour un pdf de Gallica. Si la résolution finale est trop faible augmentez ce paramètre à 600 ppp :
pdf2djvu -d 600 -o nouveau-fichier.djvu fichier-d-origine.pdfPar défaut, pdf2djvu insère dans le fichier DjVu le texte (OCR) du fichier d’origine.
[modifier] DjVuDigital
DjVuDigital nécessite une installation longue et complexe pour les non initiés, car la bibliothèque GSDjVu (un pilote Ghostscript dont il dépend) est sous une licence incompatible avec la GPL et n’est pas redistribuable. De plus, son maniement demande de l’expérience alors que la documentation est restreinte. La compilation et l’installation de la bibliothèque en question sont toutefois expliquées pas à pas dans son readme.
Un tutoriel complet, en anglais, pour installer GSDjVu : http://ubuntuforums.org.
djvudigital --dpi=300 fichier_d’origine.pdf [ficher.djvu]Défaut : utilitaire non fonctionnel et inutilisable, malgré une meilleure qualité de rendu et une meilleure compression par défaut que pdf2djvu. DjVuDigital ne conserve pas l’OCR d’un fichier et ajoute parfois des carrés blancs sur les images.
[modifier] Avec des scripts
Pour les débutants, vous pouvez voir cette Introduction aux scripts shell et, pour plus bas, une Brève introduction et vue d’ensemble de Perl.
[modifier] script de conversion pour fichiers issus de Google Books
[modifier] Supprimer les marges et créer le DJVU avec un seul script
[modifier] Première solution
- 1. Récupérez un fichier pdf. Renommez-le clairement si nécessaire. (Par exemple : Plaute.pdf)
- 2. Créez sur votre ordinateur un nouveau répertoire pour y placer les fac-similés des pages quand ils seront créés. Nommez-le comme le fichier pdf (sans extension).
- 3. Déposez le fichier.pdf dans ce nouveau répertoire.
- 4. Ouvrez une console, placez-vous dans le nouveau répertoire contenant le PDF.
- 5. Tapez la commande pdfimages nom-de-fichier-pdf-avec-son-extension nom-à-donner-aux-fac-similés-qui-vont-se-créer,
ici : pdfimages Plaute.pdf Plaute - 6. Attendez que tous les fac-similés soient créés : ils portent le nom donné ci-dessus suivi d’un numéro à trois chiffres (celui des pages du livre) et ont pour extension pbm.
- 7. Recopiez-y le script ci-dessous dans un fichier texte simple appelé "monscript" (par exemple avec Kedit), en remplaçant Plaute par le nom de votre fichier. Dans certains cas, vous obtiendrez un fichier inversé : texte blanc sur fond noir. Dans ce cas il faudra enlever -negate et recommencer.
#!/bin/bash convert -negate Plaute-000.png Plaute-000.pbm cjb2 -clean Plaute-000.pbm Plaute.djvu for n in `seq 1 9` do i="Plaute-00$n.pbm" j=`basename $i .pbm` convert -trim -bordercolor white -border 10x10 $j.pbm $j.pbm cjb2 -clean $j.pbm $j.djvu djvm -i Plaute.djvu $j.djvu echo $j done for n in `seq 10 99` do i="Plaute-0$n.pbm" j=`basename $i .pbm` convert -trim -bordercolor white -border 10x10 $j.pbm $j.pbm cjb2 -clean $j.pbm $j.djvu djvm -i Plaute.djvu $j.djvu echo $j done for n in `seq 100 421` do i="Plaute-$n.pbm" j=`basename $i .pbm` convert -trim -bordercolor white -border 10x10 $j.pbm $j.pbm cjb2 -clean $j.pbm $j.djvu djvm -i Plaute.djvu $j.djvu echo $j done
Ce script traite d’abord les numéros à un chiffre (1 à 9) puis ceux à deux chiffres (10 à 99) puis ceux à 3 chiffres (100 à 421 parce que Plaute.djvu avait 421 pages, donc 421 fac-similés. Vous remplacez bien sûr 421 par le nombre de pages de votre fichier à vous).
- 8. Dans la console, lancez le script
bash monscript
- 9. Si vous désirez suivre en direct la création page par page du djvu (le tout peut prendre quelques heures), vous pouvez laisser votre console ouverte et la placer dans un coin de votre écran de façon que la ligne où défilent peu à peu les numéros des images soit placée à ras du bas de l’écran ; vous dimensionnerez ensuite les fenêtres de vos autres activités pour laisser cette ligne visible.
- 10. Vous pouvez vous occuper à autre chose, le script travaille pour vous.
[modifier] Deuxième solution
[à déplacer à droite]
|
Source : Wikisource:Scriptorium/Novembre 2008 [modifier] Script Bash de conversion PDF→DjvuLe script proposé dans la page d’aide à la création d’un fichier Djvu n’est pas assez automatisé (à mon goût). Je vous propose un nouveau script qui détermine le nom du fichier Djvu à partir du nom de fichier PDF, mais également le nombre de pages. Il est donc utilisable tel quel pour tous les fichiers PDF. Il dépend d’ImageMagick, de dejavulibre et de poppler-utils. #!/bin/sh #pdf2djvu # vérification du type de fichier if [ "$(file -bi "$1")" != 'application/pdf' ]; then echo "$1" "n’est pas un fichier PDF." exit 1; fi BOOKNAME=$(basename "$1" .pdf) MAXPAGES=$(pdfinfo "$1"|grep 'Pages'|awk '{print $2}') echo "Livre :" "$BOOKNAME" echo "Nombre de pages :" "$MAXPAGES" # conversion du PDF en images pdftoppm -r 300 -mono "$1" "$BOOKNAME" # création de la première page convert -trim -bordercolor white -border 10x10 "$BOOKNAME"-001.pbm "$BOOKNAME"-001.pbm cjb2 -clean "$BOOKNAME"-001.pbm "$BOOKNAME".djvu rm "$BOOKNAME"-001.pbm for n in `seq 2 $MAXPAGES` do # obtention du nom de fichier pbm case `expr length $n` in 1) pbmname=`basename "$BOOKNAME"-00$n.pbm .pbm` ;; 2) pbmname=`basename "$BOOKNAME"-0$n.pbm .pbm` ;; 3) pbmname=`basename "$BOOKNAME"-$n.pbm .pbm` ;; *) exit 1; ;; esac # détourage convert -trim -bordercolor white -border 10x10 "$pbmname".pbm "$pbmname".pbm # conversion au format Djvu cjb2 -clean "$pbmname".pbm "$pbmname".djvu djvm -i "$BOOKNAME".djvu "$pbmname".djvu echo "$pbmname" # nettoyage des fichiers intermédiaires rm "$pbmname".djvu "$pbmname".pbm done exit 0; Copiez ce script dans un fichier pdf2djvu.sh, rendez-le exécutable, puis utilisez-le ainsi : |
[modifier] Ajout d’une couche texte
Si vous avez déjà un fichier DJVU, vous pouvez utiliser le script suivant : Utilisateur:Kipmaster/djvu-ocr.
Le script Perl qui suit permet de faire la même chose que le script Bash précédent, mais permet également d’ajouter la couche texte au fichier DjVu.
Comme pour le script Bash, placez ce script dans votre répertoire de travail (contenant le PDF), par exemple sous le nom pdf2djvu, et rendez le exécutable:
chmod +x pdf2djvu
La transformation se fait en deux étapes : extraction de la couche OCR de la source, puis conversion. La couche OCR peut provenir de Gallica (lors de l’enregistrement, choisissez txt comme format et enregistrez la page résultante dans le répertoire contenant le script et le fichier PDF. L’extraction de la couche texte se fait à l’aide de cette commande :
./pdf2djvu gallica2txt LeLivre.html LeLivre.txt
Vous pouvez alternativement réutiliser la couche texte du PDF. Sur Gallica, la couche texte du PDF a parfois certains problèmes de retour à la ligne, préférez donc la version texte téléchargeable si vous le pouvez.
./pdf2djvu pdf2txt LeLivre.pdf LeLivre.txt
La transformation du PDF en DejaVu se fait à l’aide de la commande suivante :
./pdf2djvu mkdjvu LeLivre.pdf LeLivre.djvu LeLivre.txt [dpi]
dpi est optionnel, il permet de jouer sur la taille de l’image. Plus dpi est grand, plus l’image l’est, mais plus le DjVu résultant est volumineux. La valeur par défaut est 300. Le DejaVu résultant ne devrait jamais être plus volumineux que le PDF d’entrée – si c’est le cas, réduisez ce paramètre.
Si le script vous répond « WARNING: Created file seems invalid » à la fin, ne l’envoyez pas sur Commons, et demandez de l’aide à son auteur ou sur le scriptorium.
[modifier] Le script
#!/usr/bin/perl -w use strict; use feature ’say’; use Encode; sub escape { return sprintf "\\%03o", ord(shift); } # gallica2txt(html file, text file): # Transform the Gallica OCR (in HTML version) text into a suitable .txt sub gallica2txt { my $html = shift; my $txt = shift; open HTML, $html; open TXT, ">", $txt; my $page; while(<HTML>) { next unless m|^<div id="contentPageModeText">$|..m|^</div>$|; $page = $1 if m|^<div id="numPageModeText">\D+(\d+)|; next if m|^</?div|; s|</?span[^>]*>||g; s|<br[^>]*>|\n$page: |gi; chomp; say TXT "$page: $_"; } close HTML; close TXT; } # pdf2txt(pdf file, text file) # Extract the hidden text layer of the PDF file sub pdf2txt { my $pdf = shift; my $txt = shift; my $pages = $1 if `pdfinfo "$pdf"` =~ /Pages:\s*(.+)/; open TXT, ">", $txt; for(1..$pages) { say STDERR; open PDF, "pdftotext -layout -f $_ -l $_ \"$pdf\" - |"; while(my $line = <PDF>) { chomp $line; say TXT "$_: $line"; } close PDF; } close TXT; } # create_text_layer(djvu file, text): # Add text to the hidden text layer of the first page of the djvu file. # Create and destroy a temporary file called (djvu file).dsed sub create_text_layer { my $djvu = shift; my $text = shift; my ($max_x, $max_y) = ($1-1, $2-1) if `djvudump "$djvu"` =~ /DjVu (\d+)x(\d+)/; my $dsed = "$djvu.dsed"; # Workaround for MediaWiki bug #21526 # see https://bugzilla.wikimedia.org/show_bug.cgi?id=21526 $text =~ s/"(?=\s*\))//g; $text =~ s/\\/\\134/g; $text = encode("ascii", $text, sub { sprintf "\\%03o", shift; }); $text =~ s/([\001-\037\177"])/escape($1)/ge; open DSED, ">", $dsed; print DSED "(page 0 0 $max_x $max_y \"$text\")"; close DSED; system "djvused", $djvu, "-e", "select 1; set-txt ’$dsed’", "-s"; unlink $dsed; } my $op = shift; if($op eq "gallica2txt") { gallica2txt(shift, shift); } elsif($op eq "pdf2txt") { pdf2txt(shift, shift); } elsif($op eq "mkdjvu") { my $pdf = shift; my $title = $pdf; $title =~ s/\.pdf$//; my $out = shift || "$title.djvu"; my $txt = shift || "$title.txt"; my $dpi = shift || 300; my %text_layer; if(-f $txt) { open TXT, $txt; while(<TXT>) { next if !m|^(\d+): (.*)$|; if(defined($text_layer{$1})) { $text_layer{$1} .= "$2\n"; } else { $text_layer{$1} = "$2\n"; } } close TXT; } my $maxpages = $1 if `pdfinfo "$pdf"` =~ /Pages:\s*(.+)/; for(1..$maxpages) { say STDERR; my $ppm = sprintf "%s-%03d.ppm", $title, $_; my $pbm = sprintf "%s-%03d.pbm", $title, $_; my $djvu = sprintf "%s-%03d.djvu", $title, $_; my $dsed = sprintf "%s-%03d.dsed", $title, $_; system "pdftoppm", "-r", $dpi, "-f", $_, "-l", $_, $pdf, $title; system "convert", "-trim", "-bordercolor", "white", "-border", "10x10", $ppm, $pbm; system "cjb2", $pbm, $djvu; create_text_layer($djvu, $text_layer{$_}) if defined($text_layer{$_}); if($_ == 1) { rename($djvu, $out); } else { system "djvm", "-i", $out, $djvu; unlink $djvu; } unlink $ppm; unlink $pbm; } system "djvutxt \"$out\" | iconv -f UTF8 -t UTF8 > /dev/null"; say STDERR "WARNING: Created file seems invalid" if($?); } else { say "Usage:"; say " Transform the Gallica OCR to a form suitable with mkdjvu"; say " $0 gallica2txt [Gallica HTML file] [Output file]"; say " Extract the hidden text layer of a PDF file to a form suitable with mkdjvu"; say " $0 pdf2txt [Gallica HTML file] [Output file]"; say " Transform a PDF file to a DjVu file"; say " $0 mkdjvu [PDF file] [DjVu file] [Text file] [dpi=300]"; }
[modifier] Les utilitaires DjVuLibre
(...) Voir DjVuLibre
- cjb2
- c44
- cpaldjvu
- csepdjvu
[modifier] djvm
Djvm est un utilitaire en ligne de commande pour manipuler des fichiers djvu (assembler, insérer, supprimer des pages). Il fait partie des utilitaires de DjVuLibre.
[modifier] Supprimer les premières pages publicitaires
- Ouvrez une console dans le répertoire de votre fichier djvu.
- Tapez dans la console :
djvm -d fichier.djvu 1ou plus généralement :
djvm -d fichier.djvu <n° de page>en remplaçant fichier.djvu par le nom de votre fichier, et <n° de page> par le numéro de la page. Appuyez sur la touche Entrée.
C’est tout : la page ou les pages indiquées ont disparu.
[modifier] Avec une interface graphique
[modifier] scantailor et gscan2pdf
(...)