Utilisateur:BernardM/Créer un fichier djvu à partir de Gallica sous Linux
Créer un fichier djvu à partir de Gallica sous Linux
[modifier]Préparer la configuration des différents logiciels pour une utilisation efficace
[modifier]Geeqie
[modifier]- aller dans le menu Éditer puis choisir Préférences->Configurer les éditeurs...
- choisir Nouveau
- utiliser le nom mogrify.desktop, et entrer le contenu suivant :
[Desktop Entry] Version=1.0 Type=Application Name=Image Magick trim Exec=mogrify -trim -border 10x10 %F Categories=X-Geeqie; OnlyShowIn=X-Geeqie;
- enregistrer
Gimp
[modifier]- maximiser la fenêtre
- sélectionner l'outil gomme, et choisir la brosse 2. Hardness 100
- aller dans le menu Édition->Préférences
- dans l'onglet Environnement décocher Confirmer la fermeture des images non-enregistrées pour éviter la boîte de dialogue de sauvegarde au format XCF
- dans l'onglet Périphériques d'entrée choisir Enregistrer l'état des périphériques maintenant pour que la gomme s'ouvre au prochain lancement de Gimp
- aller dans le menu Édition->Raccourcis clavier
- dérouler Fichier et cliquer sur l'entrée de nom file-overwrite puis tapper F2
- dérouler Affichage et cliquer sur l'entrée de nom view-zoom-fill puis tapper F3
- cocher Enregistrer les raccourcis clavier à la fermeture puis fermer la boîte de dialogue
pdf2djvu
[modifier]Copier dans un éditeur de texte le contenu du script Perl pdf2djvu depuis la page Aide:Créer un fichier DjVu/Linux et le modifier de la façon suivante :
#!/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 $title = shift;
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*(.+)/;
my $maxpages = 466;
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;
if (-e $pbm)
{
system "cjb2", $pbm, $djvu;
}
else
{
system "c44", $ppm, $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 ppm and pbm files to a DjVu file";
say " $0 mkdjvu [title] [DjVu file] [Text file] [dpi=300]";
}
Enregistrer sous le nom pdf2djvu et rendre exécutable.
Télécharger les fichiers
[modifier]- chercher le livre sur le site web de Gallica
- aller sur Télécharger / Imprimer, choisir le format et enregistrer sous le nom chronique_d_une_ancienne_ville_royale_Dourdan.pdf
- télécharger au format txt et enregistrer la page web sous le nom chronique_d_une_ancienne_ville_royale_Dourdan.html
Convertir le texte
[modifier]./pdf2djvu gallica2txt chronique_d_une_ancienne_ville_royale_Dourdan.html chronique_d_une_ancienne_ville_royale_Dourdan.txt
Extraire les images du PDF
[modifier]pdfimages chronique_d_une_ancienne_ville_royale_Dourdan.pdf chronique_d_une_ancienne_ville_royale_Dourdan
Effacer les images qui ne sont pas du livre (logos Gallica).
Renuméroter :
titre=chronique_d_une_ancienne_ville_royale_Dourdan ; for i in $(seq -w 6 471); do ext=$(echo ${titre}-${i}.* | grep -o '[^.]*$'); mv ${titre}-${i}.$ext ${titre}-$(printf "%03d" $(expr $i - 5)).$ext ; done
Nettoyer les images
[modifier]Retailler manuellement les .ppm avec Gimp.
Dans geeqie, sélectionner toutes les images (ctrl+A), puis, depuis la galerie de vignettes, faire un clic droit puis éditer « Image Magick trim ». Cela fait un premier nettoyage.
Pour chaque chapitre, sélectionner les images correspondantes, puis éditer « Gimp ». Toutes les images s'ouvrent dans des onglets dans Gimp. Pour chaque image, appuyer sur <F3> pour avoir un niveau de zoom propice au travail, enlever les tâches avec la gomme, appuyer sur <F2> pour enregistrer les modifications, et enfin fermer l'onglet. Une fois toutes les images traitées, réappliquer le trim dans geeqie. Vérifier que toutes les marges ont disparu. Si ce n'est pas le cas, recommencer le processus pour les images à corriger jusqu'à ce que tout le chapitre soit correct.
Réitérer pour chaque chapitre (ou autre entité logique).
Créer le fichier djvu
[modifier]./pdf2djvu mkdjvu chronique_d_une_ancienne_ville_royale_Dourdan