TWAIN/WIA implementation for JAVA

Mo3z picture Mo3z · Apr 9, 2013 · Viewed 12.7k times · Source

I am working on an application(Java Applet) that interacts with scanner. I understand I need a Twain library or WIA library to make it work in windows. But I am not sure what are the differences of two? I am trying to use this library:

http://thorntonzone.com/manuals/Compression/Fax,%20IBM%20MMR/MMSC/mmsc/uk/co/mmscomputing/device/twain/index.html

JAR file link is broken so I got it from here. http://rsbweb.nih.gov/ij/plugins/twain-scan.html

And DLLs from here: http://sourceforge.net/projects/twain-dsm/?source=dlp

But, it does not detect the source. Here is the error log:

http://pastebin.com/cB9gL0ip

I am on 64bit machine. Anybody had any success?

TWAIN specification is too long to follow and I haven't found any resources on WIA implementation.

Any help/pointers/resources is greatly appreciated.

Answer

Jonathan Spiller picture Jonathan Spiller · Apr 13, 2013

Use the same bit mode

For twain device control in java, all components need to be in the same mode. i.e. the JRE, Twain DSM (Source Manager), and the Twain driver (Scanner driver) all need to be 32-bit or all 64-bit. No mixing.

The default installation of 64-bit Windows contains the 32-bit mode of Twain DSM. And you say you've downloaded the 64-bit DSM. It's likely that the scanner's driver is 32-bit and that is why it cannot be found.

You have 2 options:

Keep it all 64-bit.

  • Use the 64-bit TWAINDSM.DLL.
  • Make sure your JRE/JDK is 64-bit.
  • Make sure your scanner has a 64-bit driver.

My scanner doesn't have a 64-bit driver available, but I tested a 64-bit configuration using a 64-bit "virtual scanner" and it worked.

Keep it all 32-bit (recommended)

  • Use the 32-bit TWAINDSM.DLL.
  • Make sure your JRE/JDK is 32-bit.
  • Use the scanner's 32-bit driver (probably default).

You can download 32 and 64 bit twain virtual scanners here.

Note: I mention the JDK because if you're running the code from an IDE it may be pointing to a different JRE to to the system default. True story, happened to me.