如何在Twain中扫描多个文件

问题描述:

我正在Python中开发一个应用程序。我已经丢失了文件给扫描仪。所以当按下按钮时,我想扫描所有这些文件并保存到程序中。如何在Twain中扫描多个文件

import twain 

sm = twain.SourceManager(0) 
ss = sm.OpenSource() 

for i in range(3): //for ex. 3 documents in the scanner device 
    ss.RequestAcquire(0,0) 
    rv = ss.XferImageNatively() 
    if rv: 
     (handle, count) = rv 
     twain.DIBToBMFile(handle, '{i}.bmp'.format(i)) 

当按下按钮扫描所有文件但不能保存到程序中时。我有一个错误twain.excTWCC_SEQERROR。那我该如何解决这个问题?

发送请求后,您必须等待图像准备就绪。因此,你需要根据TWAIN module document设置事件的回调:

SourceManager.SetCallback(pfnCallback) 
This method is used to set the callback handler. The callback handler is invoked when the TWAIN source signals our application. It can signal our application to indicate that there is data ready for us or that it wants to shutdown. 
The expected events are: 
MSG_XFERREADY (0x101) - the data source has data ready 
MSG_CLOSEDSREQ (0x0102) - Request for Application. to close DS 
MSG_CLOSEDSOK (0x0103) - Tell the Application. to save the state. 
MSG_DEVICEEVENT (0X0104) - Event specific to Source 

一个可能的代码更改:

import twain 

sm = twain.SourceManager(0) 
sm.SetCallback(onTwainEvent) 
ss = sm.OpenSource() 
index = 0 

for i in range(3): //for ex. 3 documents in the scanner device 
    ss.RequestAcquire(0,0) 

def onTwainEvent(event): 
    if event == twain.MSG_XFERREADY: 
     saveImage() 

def saveImage(): 
    rv = ss.XferImageNatively() 
    if rv: 
     (handle, count) = rv 
     twain.DIBToBMFile(handle, '{index}.bmp'.format(index)) 
     index += 1 

您也可以参考pytwain code

+0

如何将DIBToBMFile更改为JPEG? – YumYumYum

+0

在我的情况下,“onTwainEvent”永远不会被解雇。 – YumYumYum