请教通过程序控制扫描仪可行方案(可非java)

kurama_mail 2010-08-09 08:43:40
先说下需求吧:希望从xp系统上通过软件(B/S或C/S)能够直接调用连接到这台电脑的扫描仪(MDS-1000C),获取扫描产生的文件流(最好是文件流不是文件,因为要求本地电脑不能保存这个文件),然后ftp到指定服务器(java的ftp我会)。

上周我已经对此问题做过一些调查,java存在一个付费方案和一个JNI调.DLL方案,我现在不能使用付费软件所以第1方案不可行,第2方案我已经找到了jtwain.dll,但发现此dll还依赖了其他dll运行失败(我对dll了解不深)。

我本人是从事j2ee的,对j2se和j2me方面比较薄弱,但只要有可行方案无论什么语言我都可以去研究。
大部分我查找到的方案都是2003前的解答,我目前希望能够拿到一个可以运行看的到效果的方案(无论语言),这样我才好决定突击什么方面,对我来说时间只有1星期。希望大家提供帮助。

理想实现步骤:
1)直接找到java可控制方案拿到文件流,剩余部分自己开发。
2)得到其他语言获取文件或文件流的可行方案,马上开始学习该语言并完善功能。
3)得到免费且直接已经实现控制扫描仪将图片ftp上传的软件,修改配置直接使用。

再次先感谢所有提供意见的人,我每1小时会来关注我这个帖子。
...全文
243 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yljf1314 2010-11-02
  • 打赏
  • 举报
回复
直接。。找到方案了是公共的也可以说一下啊。
kurama_mail 2010-08-13
  • 打赏
  • 举报
回复
感谢3楼的回帖,虽然没有实际意义。(对于打印控制方面还有很多套打方案)
这样给分是因为8楼是我同事。其实这属于无满意结贴。
kurama_mail 2010-08-13
  • 打赏
  • 举报
回复
看来这问题对大部分人来说还是很难的。算了,我大概已经找到一套解决方案了。
由于涉及我的代码归属公司保密问题,就不公布具体实现方案了。也请不要找我要代码了。
upgrade_007 2010-08-10
  • 打赏
  • 举报
回复
3楼发的打印程序不错
kurama_mail 2010-08-09
  • 打赏
  • 举报
回复
自己顶一下先,希望对此有了解的各位高手们能出来说下。
xiaochengfu1 2010-08-09
  • 打赏
  • 举报
回复
关注中。。。嘻嘻,接分
kurama_mail 2010-08-09
  • 打赏
  • 举报
回复
以上文字是引用的,但基本与我现在调查到的方案方向上还是没错的。
kurama_mail 2010-08-09
  • 打赏
  • 举报
回复
我暂时获取到的几种调用扫描仪的方案:
(1)TWAIN
TWAIN指TWAIN协议,全称ToolkitWithoutAnInterestingName,无注名工具包协议,
是应用软件从计算机外设获取静态图像的国际标准。
TWAIN是一项重要的接口标准,为软件开发商和硬件设备生产厂商之间提供了一个统一的
规范,以有效地避免系统及设备之间的不兼容问题。TWAIN协议为操作系统提供了软件支
持,使得符合TWAIN协议的软件通过调用TWAIN协议接口就能从兼容TWAIN协议的外设上获
取静态图像,而不必考虑外设的功能差别。
TWAIN共包括4个二进制文件。如果要使用该接口,就必须要保证他们被成功地安装在本
地计算机上。如下:
TWAIN_32.DLL
TWAIN.DLL
TWUNKER_32.EXE
TWUNKER_16.EXE
在Windows操作系统中,Microsoft已经把这些文件作为系统文件随同操作系统一起发布
了。可以在Windows安装目录中查找到这些文件。通过TWAIN提供的头文件(twain.h),
可以实现扫描功能。

(2)Kodakimg
映像KODAKIMG.EXE是Windows95/98/NT和Windows2000中用于图像扫描、浏
览和编辑的附件程序(在WINDOWS安装过程中是可选的),分为自由版和专业版(需另外
购买)。在Windows的安装过程中,4个OCX Kodak控件(Kodak图像编辑控件、Kodak图
像管理控件、Kodak图像扫描控件及Kodak图像缩略图控件)随着自由版映像程序的安装
也被一同安装。这四个控件被允许用于任何的Windows开发工具中来开发与图像有关的软
件产品。当然,自由版的映像程序限制并隐藏了这四个控件的一些属性和方法;比如,
编辑控件的DeSpeckle方法仅限于结合专业版的映像程序使用。另外值得一提的是,专业
版的映像程序通过引入新的图像OCR控件提供了扩展的图像处理能力。还有,Windows映
像程序并没有随着WindowsME及WindowsXP一同分发。在新的系统中,微软想以“图像
与电传浏览程序”和“扫描仪与相机向导”取而代之。要在新系统上使用Windows映像程
序,必须另行购买Windows映像程序专业版本;但如果从Windows2000系统升级到XP,依
然有映像程序及四个控件可用。

(3)DynamicTWAINActiveX
DynamicTWAINActiveX控件可以使得你能从任何TWAIN兼容的设备获取图象。它有着
精心设计的界面,以及内建的向导模式,DynamicTWAIN使用起来很简单。你可以在若
干代码间做典型的TWAIN工作。同时,DynamicTWAIN功能很强大。它和TWAINV1.9
规范兼容,内建了TIFF和JPEG的编解码器。它还支持所有的三种图象格式的转换以
及其他的特性。通过DynamicTWAINActiveX控件,如果有TWAIN驱动器的话,你可
以操作扫描仪、数字相机或捕捉卡。更高端的获取功能使得能更容易使用它,就算条件
再苛刻,低端的功能也能让我们操作更弹性更易用。

(4)WIA
 Windows图像采集(WIA)是最新imaging技术,在MicrosoftWindows
MillenniumEdition中引入,包含在更高版本的MicrosoftWindows操作系统中(例如
WindowsXP,注意Windows2000不支持WIA)。WIA提供广泛的支持以启用imaging设备
,如扫描仪和数码相机,以与图像应用程序(例如,MicrosoftPicture2000和Adobe
Photoshop)对接。
  WIA之前的成像设备行业标准是TWAIN标准。
  使用WIA,制造商只需要写WIAmicrodriver以允许设备使用。这类似于打印制造
商提供minidriver,而其他WIA组件由操作系统实现。
  使用WIA,独立硬件供应商(IHV)可集中编写代码以提高设备功能。
WIA和TWAIN的关系是,WIA是微软操作系统的影像获取体系结构,属于Windows操作系统
驱动程序类;而TWAIN是开放协议,用来解决应用软件对不同影像外设的可移植性调用。
应当说,WIA是驱动层上的东西,它为应用程序提供SDK接口;而TWAIN协议在驱动程序和
应用程序间提供一个公用接口。TWAIN的层次高于WIA。
kurama_mail 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 simaa0106 的回复:]
前段时间这里有人贴了个连接打印机的代码。被我收藏了,贴一下,看对你有没有帮助。

Java code

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
impo……
[/Quote]

这个对打印机调用的方案不错,可惜java的jdk中没有对Twain封装的类。
对扫描仪是不能直调用的。
simaa0106 2010-08-09
  • 打赏
  • 举报
回复
前段时间这里有人贴了个连接打印机的代码。被我收藏了,贴一下,看对你有没有帮助。


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.MediaSizeName;
import javax.swing.JOptionPane;


public class LocatePrint implements Printable {
private int PAGES = 0;

private String printStr;

/*
* Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量单位,
* 1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点);page指明页号
*/
public int print(Graphics gp, PageFormat pf, int page)
throws PrinterException {
Graphics2D g2 = (Graphics2D) gp;
g2.setPaint(Color.black); // 设置打印颜色为黑色
if (page >= PAGES) // 当打印页号大于需要打印的总页数时,打印工作结束
return Printable.NO_SUCH_PAGE;
g2.translate(pf.getImageableX(), pf.getImageableY());// 转换坐标,确定打印边界
Font font = new Font("宋体", Font.PLAIN, 24);// 创建字体
g2.setFont(font);
// 打印当前页文本
int printFontCount = printStr.length();// 打印字数
int printFontSize = font.getSize();// Font 的磅值大小
float printX = 595 / 2; // 给定字符点阵,X页面正中
float printY = 842 / 2; // 给定字符点阵,Y页面正中
float printMX = printX - (printFontCount * printFontSize / 2);// 打印到正中间
float printMY = printY - printFontSize / 2;// 打印到正中间
g2.drawString(printStr, printMX, printMY); // 具体打印每一行文本,同时走纸移位
g2.drawString(printStr, printMX - printFontSize * printFontCount,
printMY + printFontSize); // 具体打印每一行文本,同时走纸移位
g2.drawString(printStr, printMX + printFontSize * printFontCount,
printMY + printFontSize); // 具体打印每一行文本,同时走纸移位
g2.drawString(printStr, printMX, printMY + printFontSize * 2); // 具体打印每一行文本,同时走纸移位
return Printable.PAGE_EXISTS; // 存在打印页时,继续打印工作
}

// 打印内容到指定位置
public void printContent() {
printStr = "打印1测试内容";// 获取需要打印的目标文本
if (printStr != null && printStr.length() > 0) // 当打印内容不为空时
{
PAGES = 1; // 获取打印总页数
// 指定打印输出格式
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
// 定位默认的打印服务
PrintService printService = PrintServiceLookup
.lookupDefaultPrintService();
// 创建打印作业
DocPrintJob job = printService.createPrintJob();
// 设置打印属性
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 设置纸张大小,也可以新建MediaSize类来自定义大小
pras.add(MediaSizeName.ISO_A4);
DocAttributeSet das = new HashDocAttributeSet();
// 指定打印内容
Doc doc = new SimpleDoc(this, flavor, das);
// 不显示打印对话框,直接进行打印工作
try {
job.print(doc, pras); // 进行每一页的具体打印操作
} catch (PrintException pe) {
pe.printStackTrace();
}
} else {
// 如果打印内容为空时,提示用户打印将取消
JOptionPane.showConfirmDialog(null,
"Sorry, Printer Job is Empty, Print Cancelled!",

"Empty", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
}
}

public static void main(String[] args) {
LocatePrint lp = new LocatePrint();
lp.printContent();
}
}
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧