- 浏览: 173431 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
1055229269mao:
一起学习,一起进步
servlet登陆过滤器 -
1055229269mao:
亲测好用。非常感谢了
servlet登陆过滤器 -
wx_hello:
此行:Builder builder = new BookDo ...
xml 解析例子 -
wx_hello:
我想说楼主,你那个SAX解析的不对吧。。貌似使用的dom解析出 ...
xml 解析例子 -
hxp520520:
下了源码,正研究
java ip 查询定位 QQwry.dat
因为项目有个需求,要求能够在某个预定时间对特定报表进行自动打印。报表的形式主要是excel。如果是c++或者c#什么的,简直是小菜一碟。可
惜,偏偏是java实现。并且,这又不同于常见的页面手工打印,可以通过javascript调用打印机来实现。于是乎,开始摸索如何实现该功能。
首先想到的是java自带的打印类。在javax.print包下。根据jdk说明,照着搬来了个程序,小试牛刀。
- /**
- * @author xjj
- * 说明:打印类
- * email: exceljava@163.com
- * @date Oct 29, 2008
- */
- public class AutoPrint {
- public static void main(String[] args) {
- FileInputStream psStream;
- try {
- psStream = new FileInputStream( "file.ps" );
- } catch (FileNotFoundException ffne) {
- }
- if (psStream == null ) {
- return ;
- }
- DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT;
- Doc myDoc = new SimpleDoc(psStream, psInFormat, null );
- PrintRequestAttributeSet aset =
- new HashPrintRequestAttributeSet();
- aset.add(new Copies( 5 ));
- aset.add(MediaSize.A4);
- aset.add(Sides.DUPLEX);
- PrintService[] services =
- PrintServiceLookup.lookupPrintServices(psInFormat, aset);
- if (services.length< 1 ){
- throw new RuntimeException( "找不到打印机" );
- }
- if (services.length > 0 ) {
- DocPrintJob job = services[0 ].createPrintJob();
- try {
- job.print(myDoc, aset);
- } catch (PrintException pe) {}
- }
- }
通过测试,始终无法找到打印机,运行时报定义的:找不到打印机。听说,局域网内的打印机无法链接,打印机只能连在本机上。而测试的打印机刚好在局域 网内而不在本机上。然后,查看了下文档,忽然发现,java自带的打印只对plain文本,gif,jpeg,pdf等支持,而对excle,word等 是不支持的。看来要学会放弃,goodbye java print。
有道是:车道山前必有路。这不,关键时刻,jacob出现了。根据官方网站的介绍 jacob即Java COM Bridge
充当java和windows平台的桥梁作用,通过com组件的方式。如果大家不了解com组件。可以google一下。(顺便鄙视下百度)。通过它,是我们在java中可以很方便的操作office,包括word,excel等。
闲话少说,马上开始jacob之旅。首先,当然是从官网上下载我们必要的资源。http://danadler.com/jacob/
进
入官网,大家会看到这样一段话:The JACOB project is moving to Sourceforge.net. Verion
1.8 is now available at Sourceforge. If you are a sourceforge developer
and are interested in contributing to the project, please contact the
project administrators.
也就是jacob已经在大名鼎鼎的Sourceforge.net上安营扎寨了。不过不解的是,最新版本1.14
已经出来了,这里介绍的最新版本为什么还是1.8.鄙视一下。下载的时候,除了jacob-1
.14
.3.zip,我建议最好把jacob-1
.14
.3_src.zip也下载下来。src下有源码,demo等等,非常有用。
解压:jacob-1
.14
.3.zip,将jacob.jar加入classpath,如果是intel平台,将jacob-1
.14
.3-x86
.dll加入系统盘的system32下。比如我的路径是:C:\WINDOWS\system32 如果是AMD平台,则加入:jacob-1
.14
.3-x64.dll,
ok, 准备就绪。开始写代码了,本人参照自带的demo实现了简单的打开excel并打印的功能。代码如下:
- /**
- * 功能:实现打印工作
- * @param path
- * @date Oct 29, 2008
- * @time 11:40:03 AM
- */
- public static void print(String path){
- ComThread.InitSTA();
- ActiveXComponent xl = new ActiveXComponent( "Excel.Application" );
- try {
- // System.out.println("version=" + xl.getProperty("Version"));
- //不打开文档
- Dispatch.put(xl, "Visible" , new Variant( true ));
- Dispatch workbooks = xl.getProperty("Workbooks" ).toDispatch();
- //打开文档
- Dispatch excel=Dispatch.call(workbooks,"Open" ,path).toDispatch();
- //开始打印
- Dispatch.get(excel,"PrintOut" );
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //始终释放资源
- ComThread.Release();
- }
- }
然后,运行,就会打开路径下的文件,然后链接打印机,打印。而这,正是我想要的。然后就开始其他操作的摸索了。在此基础上,通过定时任务,生成excel,利用jacob进行打印。就功成名就了。
说个题外话,参照demo,打开的命令调用是Open,关闭的命令调用是Close,我想当然认为,打印当然是Print莫属了。然而,jacob真是不按常理出牌啊,既然搞个PrintOut
,真nnd。最后还是暴力破解出来的。相关文档也没有(不知道是不是本人没有找到).
根据我所掌握的情况,有两点需要说明(通过验证):
1.jacob只适合windows平台,如果是linux平台,你最终会南辕北辙。
2.在xp下,只需要在系统中加入jacob-1
.14
.3-x86
.dll即可。但是如果在2000(估计已经绝技了)或者2003 server下,需要额外的msvcr80.dll支持,可以从通过下载vcredist_x86.exe进行安装获得。下载地址:http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en
最后说一下,我说碰到的几个异常情况:
001 原因:没有dll文件:
- Exception in thread "main" java.lang.UnsatisfiedLinkError: no jacob in java.library.path
- at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682 )
- at java.lang.Runtime.loadLibrary0(Runtime.java:823 )
- at java.lang.System.loadLibrary(System.java:1030 )
- at com.jacob.com.ComThread.<clinit>(ComThread.java:153 )
- at com.bester.hw.util.PrintExcel.print(PrintExcel.java:25 )
- at com.bester.hw.util.PrintExcel.main(PrintExcel.java:16 )
002 原因:C++库不正确:
- Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\apps\...\jacob.dll: This application has fa
- iled to start because the application configuration is incorrect. Reinstalling the application may fix this pr
- oblem
003 原因:文件路径不正确(因为调用的第一个命令是Open,所以这里Invoke of:Open ,以此类推):
- com.jacob.com.ComFailException: Invoke of: Open
- Source: Microsoft Office Excel
004 原因:机子上没有装office
- cant get Object cldid from progid
好了,搞了一个上午,也算高点名堂出来了。至少找到了一条解决问题的明路。一点体会,共勉!
评论
在win2003下出现cant get Object cldid from progid
发表评论
-
Port 80 or 443 (SSL) already in use ! Installing Apache2.2 service failed!的解决方案
2011-02-15 10:16 2960Port 80 or 443 (SSL) already in ... -
java断言 assert
2010-04-14 02:37 1482java 断言 assert 初步使用:断言开启、断言使用主要 ... -
java抽取word,pdf的四种武器
2010-03-12 16:37 1485很多人用java进行文档操作时经常会遇到一个问题,就是如何获得 ... -
Java调用com组件操作word使用总结
2010-03-12 16:35 2175一、准备工作 先了解一下概念,JACOB 就是 J ... -
Java操作office 2007文档
2010-03-12 16:23 1789我们希望将Office 20 ... -
An internal error occurred during: "JSP Semantics Validator (JSF)". org/eclipse/
2009-11-17 11:58 2208An internal error occurred duri ... -
Comparator和Comparable比较
2009-09-22 23:40 833当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comp ... -
struts验证框架开发
2009-09-10 17:38 807一、启用Validator插件 虽然Validator框 ... -
在jsp环境中配置使用FCKEditor
2009-09-09 21:32 749FCKeditor是sourcefor ... -
配置FCKeditor(FCKeditor for java)
2009-09-09 21:28 12371.下载FCKeditor.java ... -
Java排序算法
2009-07-20 15:52 1062public class Sort { public ... -
log4j配置详
2009-07-17 14:59 702log4j详解 ... -
关于java打印功能的最简单实现的学习笔记
2009-07-16 17:03 2368<scr ... -
Java高级编程:打印--学习如何使用打印服务API
2009-07-16 16:36 1725作者:Brett Spell 翻 ... -
Tomcat 配置
2009-07-15 11:00 860Tomcat启动分析 1 - To ... -
键盘快捷键大全
2009-07-01 09:48 1026、常见用法: F1 ... -
Linux必学60个命令文件处理
2009-07-01 09:47 975linux系统信息存放在文 ... -
pager-taglib使用指南【转】
2009-06-30 16:38 7392009-05-13 09:49 一简介, ... -
pager-taglib使用指南【转】
2009-06-30 16:37 7322009-05-13 09:49 一简介, ... -
Javascript实现打印网页中定义的部分内容
2009-06-26 12:12 986正常情况下的打印是使用 window.print(); 直接整 ...
相关推荐
Jacob是Java平台上一个重要的库,专门用于与Microsoft Office应用程序(如Excel和Word)进行交互,实现数据的读取、写入、打印等操作。它的全名JAVA-COM Bridge,正如其名,它充当了Java与COM(Component Object ...
1. **Jacob库**:Jacob全称为Java COM Bridge,是一个开源的Java库,通过JNI(Java Native Interface)技术实现,使得Java程序能够直接调用COM组件,如Microsoft Office的各种应用,如Word、Excel等。Jacob提供了对...
通过Jacob,开发者可以在Java程序中调用任何支持COM接口的应用程序,例如Microsoft Office套件,进行文档操作。它通过JNI(Java Native Interface)来实现这一目标,使得Java代码可以调用C++编写的COM组件。 在Word...
Jacob(Java and COM Bridge)是一个 Java 库,它允许 Java 应用程序通过 COM(Component Object Model)接口与 Microsoft Office 进行交互。下面,我们将详细探讨如何使用 Jacob 实现 Word、Excel 和 PowerPoint ...
要使用Jacob进行打印操作,你需要先在项目中添加Jacob的jar文件,并确保你的系统中已经安装了相应的Office组件,因为Jacob是通过它们来实现功能的。安装Jacob库通常包括以下步骤: 1. 下载Jacob的jar文件。 2. 将...
这意味着开发者可以通过Java来控制诸如Microsoft Word、Excel等应用程序,从而实现文档的自动化处理。 #### Jacob官方网站 Jacob的官方网站为[http://danadler.com/jacob](http://danadler.com/jacob),用户可以从...
本文将深入探讨如何使用Jacob库来操作Word和Excel,通过提供的示例文档,我们将理解如何进行文件转换和其他操作。 首先,Jacob全称为Java COM Bridge,是一个Java到COM(Component Object Model)桥接器,它使得...
Jacob(Java COM Automation Bridge)是一个开源库,它允许Java应用程序利用COM接口与Windows操作系统中的Office应用程序进行交互,包括Word、Excel等。下面将详细阐述如何使用Jacob库在Java中操作Word,并结合描述...
JACOB同样能在这个场景中发挥作用,允许Java后台生成报表,并通过Word或Excel模板将数据填充到相应位置,再进行打印。 JACOB的使用指南通常包括如何创建COM对象,如何操作这些对象,以及如何处理异常和资源清理。...
jacob操作WPS、Office对应Word、Excel、PPT生成PDF,采用版本为jaco1.7X。
这意味着你可以使用Jacob来操作Word、Excel、PowerPoint等Microsoft Office应用,而无需通过中间的脚本语言如VBS或JScript。 在本项目中,"WordTest"可能是包含主程序逻辑的类或者测试文件。这个类通常会包含一个或...
本文将对Java操作Word、Excel、PDF等文档的知识点进行总结和分析。 一、Java操作Word文档 Java可以使用 Jacob 库来操作 Word 文档。Jacob 库是一个 Java 库,允许 Java 应用程序与 COM 组件交互,从而实现对 Word ...
Jacob(Java COM Bridge)是一个Java库,用于在Java应用程序中与Microsoft Office进行交互,包括Word、Excel和PDF文档的处理。它通过JNI(Java Native Interface)技术,实现了Java与COM(Component Object Model)...
Jacob是一个Java库,它提供了对Microsoft Office应用程序如Word和Excel的COM自动化接口,使得Java开发者可以利用这些Office工具的功能,例如创建、修改文档、处理表格和图表等。在这个主题下,我们将深入探讨如何...
同样,你可以对Excel的转换进行类似的处理,只是需要替换相应的对象和方法,如使用`Excel.Application`代替`Word.Application`,以及使用`Workbook`和`Worksheet`对象。 需要注意的是,这种转换方法依赖于安装的...
资源中包括工具类、jacob.jar和jacob-1.18-x64.dll(64位)、jacob-1.18-x86.dll(32位) 在使用jacob时,我们需要将jacob-1.18-x64.dll或jacob-1.18-x86.dll放到jdk的bin目录下或者jdk/jre的bin目录下才可以使用。
Java-JACOB库提供了一种方式让Java程序与Microsoft的COM接口进行交互,使得开发者能够直接在Java应用中操作如MS Word和Excel等Office应用程序。本文主要探讨如何使用Java-JACOB来创建和操作Word文档。 首先,使用...
jacob.jar: a JAR file for the java classes which you must add to your CLASSPATH. The package names replace com.ms with com.jacob (for example com.ms.com.Variant maps to com.jacob.com.Variant. jacob...
Jacob非常适合那些需要在Java环境中操作Office文档(如Word、Excel)的应用场景。 #### 二、Jacob操作Excel基本流程 使用Jacob操作Excel主要包括以下几个步骤: 1. **初始化Excel对象**:创建Excel应用程序实例。...
### Java Jacob 操作 Word 文档知识点详解 #### 一、Java Jacob 库介绍与...通过以上介绍,我们了解到使用 Java Jacob 库操作 Word 文档的具体方法和注意事项,这对于自动化办公任务、文档生成等应用场景非常有用。