知识大全 通过jacob对excel,word进行打印等操作

Posted

篇首语:满堂花醉三千客,一剑霜寒十四洲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 通过jacob对excel,word进行打印等操作相关的知识,希望对你有一定的参考价值。

  因为项目有个需求 要求能够在某个预定时间对特定报表进行自动打印 报表的形式主要是excel 如果是c++或者c#什么的 简直是小菜一碟 可惜 偏偏是java实现 并且 这又不同于常见的页面手工打印 可以通过javascript调用打印机来实现 于是乎 开始摸索如何实现该功能

  首先想到的是java自带的打印类 在javax print包下 根据jdk说明 照着搬来了个程序 小试牛刀

  view plaincopy to clipboardprint?

  /**

  * @author xjj

  * 说明:打印类

  * email:

  * @date Oct

  */

  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( ));

  aset add(MediaSize A );

  aset add(Sides DUPLEX);

  PrintService[] services =

  PrintServiceLookup lookupPrintServices(psInFormat aset);

  if(services length< )

  throw new RuntimeException( 找不到打印机 );

  

  if (services length > )

  DocPrintJob job = services[ ] createPrintJob();

  try

  job print(myDoc aset);

   catch (PrintException pe)

  

  

  /**

  * @author xjj

  * 说明:打印类

  * email:

  * @date Oct

  */

  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( ));

  aset add(MediaSize A );

  aset add(Sides DUPLEX);

  PrintService[] services =

  PrintServiceLookup lookupPrintServices(psInFormat aset);

  if(services length< )

  throw new RuntimeException( 找不到打印机 );

  

  if (services length > )

  DocPrintJob job = services[ ] createPrintJob();

  try

  job print(myDoc aset);

   catch (PrintException pe)

  

  

  通过测试 始终无法找到打印机 运行时报定义的:找不到打印机 听说 局域网内的打印机无法链接 打印机只能连在本机上 而测试的打印机刚好在局域网内而不在本机上 然后 查看了下文档 忽然发现 java自带的打印只对plain文本 gif jpeg pdf等支持 而对excle word等是不支持的 看来要学会放弃 goodbye java print

  有道是 车道山前必有路 这不 关键时刻 jacob出现了 根据官方网站的介绍 jacob即Java Bridge

  充当java和windows平台的桥梁作用 通过组件的方式 如果大家不了解组件 可以google一下 (顺便鄙视下百度) 通过它 是我们在java中可以很方便的操作office 包括word excel等

  闲话少说 马上开始jacob之旅 首先 当然是从官网上下载我们必要的资源

  进入官网 大家会看到这样一段话 The JACOB project is moving to Verion is now available at Sourcefe If you are a sourcefe developer and are interested in contributing to the project please contact the project administrators 也就是jacob已经在大名鼎鼎的上安营扎寨了 不过不解的是 最新版本 已经出来了 这里介绍的最新版本为什么还是 鄙视一下 下载的时候 除了jacob zip 我建议最好把jacob _src zip也下载下来 src下有源码 demo等等 非常有用

  解压:jacob zip 将jacob jar加入classpath 如果是intel平台 将jacob x dll加入系统盘的system 下 比如我的路径是 C:\\WINDOWS\\system 如果是AMD平台 则加入 jacob x dll

  ok 准备就绪 开始写代码了 本人参照自带的demo实现了简单的打开excel并打印的功能 代码如下

  view plaincopy to clipboardprint?

  /**

  * 功能:实现打印工作

  * @param path

  * @date Oct

  * @time : : 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();

  

  

  /**

  * 功能:实现打印工作

  * @param path

  * @date Oct

  * @time : : 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 最后还是暴力破解出来的 相关文档也没有(不知道是不是本人没有找到)

  根据我所掌握的情况 有两点需要说明(通过验证)

   jacob只适合windows平台 如果是linux平台 你最终会南辕北辙

   在xp下 只需要在系统中加入jacob x dll即可 但是如果在 (估计已经绝技了)或者 server下 需要额外的msvcr dll支持 可以从通过下载vcredist_x exe进行安装获得 下载地址

  x?familyid= B FD AE A A D C F &displaylang=en

  最后说一下 我说碰到的几个异常情况

   原因 没有dll文件

  Java代码

  Exception in thread main java lang UnsatisfiedLinkError: no jacob in java library path

  at java lang ClassLoader loadLibrary(ClassLoader java: )

  at java lang Runtime loadLibrary (Runtime java: )

  at java lang System loadLibrary(System java: )

  at ComThread (ComThread java: )

  at bester hw util PrintExcel print(PrintExcel java: )

  at bester hw util PrintExcel main(PrintExcel java: )

   原因 C++库不正确

  Java代码

  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

   原因 文件路径不正确(因为调用的第一个命令是Open 所以这里Invoke of:Open 以此类推)

  Java代码

   ComFailException: Invoke of: Open

  Source: Microsoft Office Excel

   原因 机子上没有装office

  Java代码

  cant get Object cldid from progid

cha138/Article/program/Java/hx/201311/25631

相关参考

知识大全 用ado.net对word,excel进行存取

   blob表   idint   namechar   blobimage&

知识大全 如何在java中操作word

  想用java操作word文件?jacob是个不错的选择也就是java桥你可以在project/下载我下载的版本是注意版本太低的话可能会报错  如果没有特殊需求可以直接使用jacob_*zip中提供

在使用Word2010进行文字编辑时,下列叙述错误的是

在使用Word2010进行文字编辑时,下列叙述错误的是_____。A、允许同时打开多个文档B、可将正在编辑的文档另存为一个纯文本文件C、使用“打开”命令可以打开一个已存在的文档D、打印预览文档时,打印

知识大全 网页上显示word和Excel

网页上显示word和Excel  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以前开发合同管理系

知识大全 最近电脑打开word和excel非常慢是什么原因

最近电脑打开word和excel非常慢是什么原因保证使用最新的excel,可以是电脑性能得到最佳的运行效果。在打开任意大小的Excel时,电脑反映缓慢,需要清理C盘控件。针对仅Excel时候启动速度慢

知识大全 在WORD中,怎样将需要打印的字体调成横向

在WORD中,怎样将需要打印的字体调成横向?  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在WORD

知识大全 ASP在线创建Word与Excel文档

ASP在线创建Word与Excel文档  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASP具备

知识大全 请问如何用word打印出符合自己要求的尺寸的图片,例如要打印出长8厘米宽6厘米的图片要怎么做

请问如何用word打印出符合自己要求的尺寸的图片,例如要打印出长8厘米宽6厘米的图片要怎么做?谢谢如果在word中,在图片上点击右键-设置图片格式,在对话框中的大小栏中输入高度和宽度值(前提是将去掉锁

知识大全 用ASP在线创建Word与Excel文档

用ASP在线创建Word与Excel文档  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASP具

知识大全 在weblogic下解决Word、Excel打开乱码问题

在weblogic下解决Word、Excel打开乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下