博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java生成固定格式word并打印word文档解决方案【windows环境】
阅读量:5960 次
发布时间:2019-06-19

本文共 1697 字,大约阅读时间需要 5 分钟。

hot3.png

 

 

    用户要求用程序生成标准的word文档,要能打印(有多个打印机时可以指定打印机进行打印,支持横向打印),而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。

    POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。

    iText操作Excel还行,对于复杂的大量的word也是噩梦。

    Word从2003开始支持XML格式,用XML还做就很简单了。 大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。

    具体代码请参见: ,此处不再赘述。

    另外还有一个比较好的生成各种美观的word的组件,分享一下: 。

    本文的重点是如何使用Java来打印word文档。

一、背景

    ·查找了Java打印的相关资料,总结如下:

  • Java自带的PrintJob,提供的打印机制并不完整,只能打印pdf、txt、图片之类,无法打印html、word、excel等复杂文档。
  • 使用jacob组件打印word,详见: ,证实可用。但是不能指定打印机打印和不支持设定横向打印(可能是我没找到具体方法)。

 

    由于上述两种方法均无法满足客户需求,我只好亲自上阵,完美实现了客户需求,并在实施过程中运行良好。

 

二、我的解决方案

    使用printword.exe ,下载链接:

    调用printword.exe 时,有3个参数:

  • path:word文档的路径(如果路径中有空格时,整个路径需要用双引号包起来),必填
  • ip:打印机的IP(实际上该参数应为打印机的名字,但是我这边打印机的命名都是用ip来命名的,故用ip),实现指定打印机来打印,必填
  • orientation:0 纵向打印,1 横向打印。可不填,默认纵向打印。

    使用方法:

    在命令行中输入:

   c:/printer/printword.exe path="d:/app data/test.doc" ip=192.168.0.101 orientation=1

    该命令行就是使用c:/printer/printword.exe调用ip为192.168.0.101的打印机(前提是要把这个ip的打印机添加到设备中,并且重命名为192.168.0.101,如下图所示),横向打印d:/app data/test.doc这个文档。

3912437de83eb64a6a2471265397925d579.jpg

 

    既然通过命令行可以打印word了,那现在就可以通过java来执行命令行打印word了。

   

/* 获取cmd命令 */try {	String cmd="cmd /c c:/printer/printword.exe ip=192.168.0.101 orientation=1 path=" + filePath;	System.out.println(cmd);	Process pro = Runtime.getRuntime().exec(cmd); 	BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream())); 	String msg = null;	while ((msg = br.readLine()) != null) {		System.out.println(msg);	}} catch (IOException exception) {}LOG.warn("打印完成");

 

    综上,算是使用了一个较为简便的方法实现了通过java调用指定打印机横向打印word,特分享至此,欢迎共同讨论。

 

转载于:https://my.oschina.net/dong706/blog/1808020

你可能感兴趣的文章
android反编译之获得java源代码
查看>>
优盘驱动制作
查看>>
(分享)笔记C#基础知识
查看>>
resin
查看>>
PHP开发工具ZendStudio10
查看>>
wsl搭建php环境请求超时的问题解决方案
查看>>
spring基础
查看>>
微信用户名乱码问题
查看>>
dubbo spi(续)
查看>>
dubbo remoting(2)
查看>>
maya pyside 多个窗口实例 报错 解决
查看>>
关于文件上传请求第一次为post,后面为get的问题
查看>>
【Qt笔记】QDialog--模态和非模态
查看>>
nginx 0.8.54/1.0.0 在cygwin环境下的编译(包括 nginx_mod_h264
查看>>
PowerDesigner生成Excel版本的数据库文件
查看>>
Oracle 查找常见耗性能的语句
查看>>
java 通过反射获取调用类方法及属性
查看>>
thinkphp 开启页面的Trace信息
查看>>
mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections
查看>>
android textview字体加下划线
查看>>