twain 扫描仪未从扫描仪获取图像

Posted

技术标签:

【中文标题】twain 扫描仪未从扫描仪获取图像【英文标题】:twain scanner not acquiring the image from scanner 【发布时间】:2015-05-02 13:43:48 【问题描述】:

我实现了一个小程序来从扫描仪获取图像,因为我使用了 twain 实现。当我将应用程序作为 java 小程序运行时它工作正常,但问题是它无法从扫描设备获取图像,而我从一个 html 文件运行。它没有给出任何错误,我无法调试应用程序。 任何人都可以告诉我如何解决这个问题。

这是我的html

<html>
<head><title>Scann</title></head>
<body>
<center>
    <applet id="TwainApplet"
            code = "com.nic.applet.TwainExample.class"
            archive="TwainApplet.jar"
            
            >
    </applet>
</center>
</body>
</html>

下面是我的吐温课..

public class TwainExample extends Applet implements ScannerListener

  static TwainExample app; 

  Scanner scanner;

  public TwainExample(String[] argv)throws ScannerIOException
    scanner=Scanner.getDevice();
    scanner.addListener(this);   
    scanner.acquire();
  

  public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata)
    if(type.equals(ScannerIOMetadata.ACQUIRED))
      BufferedImage image=metadata.getImage();
      System.out.println("Have an image now!");
      try
        ImageIO.write(image, "png", new File("mmsc_image.png"));
      catch(Exception e)
        e.printStackTrace();
      
    else if(type.equals(ScannerIOMetadata.NEGOTIATE))
      ScannerDevice device=metadata.getDevice();
      try
//        device.setShowUserInterface(true);
//        device.setShowProgressBar(true);
//        device.setResolution(100);
      catch(Exception e)
        e.printStackTrace();
      
    else if(type.equals(ScannerIOMetadata.STATECHANGE))
      System.err.println(metadata.getStateStr());
      if(metadata.isFinished())
        System.exit(0);
      
    else if(type.equals(ScannerIOMetadata.EXCEPTION))
      metadata.getException().printStackTrace();
    
  

  public static void main(String[] argv)
    try
      app=new TwainExample(argv);
    catch(Exception e)
      e.printStackTrace();
    
 

【问题讨论】:

小程序使用init() 作为入口点。你实现了吗? 是的,当我使用 init 时,我也尝试过使用 init 和 main 方法,但控件本身并没有进入 init 方法。我只在 init() 方法中编写 image.auquire() 方法。 这是我的初始化方法 public void init() try Scanner 扫描仪 = Scanner.getDevice(); System.out.println("扫描仪:"+扫描仪);扫描仪.addListener(this);扫描仪.acquire(); 捕捉(异常 e) e.printStackTrace(); 小程序中init()方法的用法请参考本教程:docs.oracle.com/javase/tutorial/deployment/applet/subclass.html 【参考方案1】:

试试这个

public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata)
if(type.equals(ScannerIOMetadata.ACQUIRED))
  BufferedImage image=metadata.getImage();
  System.out.println("Have an image now!");
  System.out.println("Have"+identy);
  try

      File home = new File("C:\\Directory1");//المجلد الاساسي حق الموظفين
      File dir  = new File(home,identy);//مجلد الموظف عشان نحفظ فيه ملفات الموظف لوحده 
      if(!dir.exists()) dir = home;//اذا مجلد الموظف غير موجود احفظ في المجلد الاساسي
      File file = new File(dir,"we.jpg");//file.delete();
      ImageIO.write(image, "JPG", file);
//        ImageIO.write(image, "png", new File("C:\\Directory1//we.png"));
         System.out.println(file.getCanonicalPath());
         convertTOpdf();
      catch(Exception e)
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, e.getMessage());
      
    else if(type.equals(ScannerIOMetadata.NEGOTIATE))
      ScannerDevice device=metadata.getDevice();
      try
        device.setShowUserInterface(true);
        device.setShowProgressBar(true);
        device.setResolution(100);
      catch(Exception e)
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, e.getMessage());
      
    else if(type.equals(ScannerIOMetadata.STATECHANGE))
      System.err.println(metadata.getStateStr());
      if(metadata.isFinished())
        //System.exit(0);
      
    else if(type.equals(ScannerIOMetadata.EXCEPTION))
      metadata.getException().printStackTrace();
    
  

【讨论】:

纯代码答案可能会被标记为低质量并可能被删除。请对此答案添加一些评论,以描述它如何回答问题。

以上是关于twain 扫描仪未从扫描仪获取图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 Twain.Dll 扫描图像

Twain 检测横向扫描

Node.js+Web TWAIN,实现Web文档扫描和图像上传

需要信息 TWAIN 和 WIA 驱动程序来扫描 C# 中的图像?

Twain 扫描输出将 intptr 转换为图像

使用 TWAIN 扫描的图像的计算精度