Ho scaricato Tesseract, ovvero Tess4J e provato a modificare il codice dell'esempio:
codice:
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import net.sourceforge.tess4j.*;

public class TesseractExample {

    public static void main(String[] args) throws Exception {
        //File imageFile = new File("eurotext.gif");
        BufferedImage bimg = ImageIO.read(new File("C:/Users/Andrea/Desktop/per_assicurazione_Pagina_1.tiff"));
        Tesseract instance = Tesseract.getInstance();  // JNA Interface Mapping
        // Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping

        try {            
            //String result = instance.doOCR(imageFile);
            String result = instance.doOCR(bimg);
            System.out.println(result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }
}
Ottenendo un discreto risultato (qualche pasticcio per via di linee di moduli e altri elementi grafici interpretabili, però tutto sommato un risultato facilmente editabile a mano e ben rispondente al testo contenuto nell'immagine).

Mi viene da dirti: controlla che cosa ottieni nel BufferedImage proveniente dallo scanner (magari sparala dentro una JLabel e visualizzala)