Djvu

如何使 djvu 文件可搜尋

  • October 5, 2014

如果我從我可以使用djvu的文件中創建一個新文件,這使得該文件可以使案例如.tiff``djvubind``djvu``tesseract-ocr

但是假設我已經給出了djvu文件。我怎樣才能使它可搜尋?

對於 pdf,我知道pdfsandwichdjvu 有類似的東西嗎?

“簡單”的方法是將 .djvu 文件轉換回多個.tiff文件(而不是多頁 TIFF),然後將它們與.djvu 重新組合djvubind。然而,這會降低.djvu文件的圖像質量,因為這是一種有損轉換(幾乎可以肯定,當您使用.

所以你最好在原始文本中插入 OCR 編輯的文本,.djvu這就是 這個腳本的作用。該腳本依賴於您可以在djvulibre-bin包中找到的一些二進製文件,以防您尚未安裝它們。

這是腳本:

#!/usr/bin/perl

$lang = "eng";

if ( $#ARGV < 0 ) {
 print "give a DJVU file as 1st argument \n" ;
 exit 0 ;
}

$inputdjvu = $ARGV[0] ;
$imagetmp = "/tmp/temp.tif" ;
$djvutmp = "/tmp/outdjvu" ;

print "processing of $inputdjvu\n" ;

# calculate the number of pages
$nbpages = `djvused "$inputdjvu" -e 'n'` ;
print "number of pages: $nbpages" ;

for ($i=1 ; $i <= $nbpages ; $i++) {
 print "OCR de la page $i\n" ;

 # page extraction as an image
 `ddjvu -format=tiff -mode=black -page="$i" "$inputdjvu" $imagetmp` ;

 `tesseract $imagetmp /tmp/outocr -l $lang` ;
 print "OCR done\n" ;

 open(TXT, '/tmp/outocr.txt') ;
 open(TXTDJVU, ">$djvutmp") ;

 print TXTDJVU "(page 0 0 1 1\n" ;
 while ($line=<TXT>) {
   $line =~ s/\"/\\\"/g ;
   print TXTDJVU "(line 0 0 1 1 \"$line\")\n" ;
 }
 print TXTDJVU ")\n" ;

 close (TXT) ;
 close (TXTDJVU) ;

 # writing the text in the DJVU file
 `djvused "$inputdjvu" -e 'select $i; remove-txt' -s` ;
 `djvused "$inputdjvu" -e 'select $i; set-txt $djvutmp' -s` ;
}

# note: structure which works
# print TXTDJVU "(page 0 0 1 1\n" ;
#   print TXTDJVU "     (line 0 0 1 1 \"toto\")\n" ;
#   print TXTDJVU "     (line 0 0 1 1 \"toto la la\")\n";
#   print TXTDJVU ")\n" ;

引用自:https://unix.stackexchange.com/questions/158921