如何在吐温中扫描多个文件

时间:2016-01-21 12:36:18

标签: python twain image-scanner

我在Python中开发了一个应用程序。我把丢失的文件丢给了扫描仪。因此,当按下按钮时,我想扫描所有这些文件并保存到程序中。

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。那我怎么解决这个问题呢?

1 个答案:

答案 0 :(得分:2)

发送请求后,您必须等到映像准备就绪。因此,您需要根据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