word转pdf实现总结

之前项目有需求,要求java代码实现word转pdf功能.调研了很多技术都不是很成熟.特别是中文乱码的问题.大部分框架都是在中文环节出了问题.(我很奢望我能出生在一个英语国度).最终的技术选型是利用jacob实现word转pdf功能.但是服务器部署在linux服务器上.所以又产生了新的问题就是:linux和windows交互文件.这个问题还是比较容易解决的.windows上用的是pscp.exe向linux回传文件.linux使用ftp向window发送文件.

 

1.linux向windows发送文件,使用如下脚本:

Java代码 
  1. #!/bin/bash  
  2. ftp -v -n xxx.xxx.xxx.xxx << EOF  
  3. user 用户名 密码  
  4. binary  
  5. hash  
  6. lcd /user/locale/ (发送文件所在的文件夹)  
  7. prompt  
  8. mput $1(传进来的第一个参数 代表发送的文件名)  
  9. bye  
  10. EOF  

  java调用linux脚本的方式如下:

Java代码 
  1. Process process = Runtime.getRuntime().exec(command)  

  文件成功发送到windows服务器之后,会利用spring的httpinvoker技术远程通知windows服务器有新文件到了.关于httpinvoker的使用可以看这篇文件:http://blog.csdn.net/qq413041153/article/details/7971194

 

2.windows需要装office2007sp1以上版本就可以使用jacob命令调用word接口生成pdf了.windows上java利用jacob word转pdf的代码如下:

Java代码 
  1. private  synchronized void word2PDF(String docfile, String toFile) {  
  2.         logger.info("WTopTools word2PDF begin");  
  3.         ActiveXComponent app = new ActiveXComponent("Word.Application");  
  4.         try {  
  5.             app.setProperty("Visible"new Variant(false));  
  6.             Dispatch docs = app.getProperty("Documents").toDispatch();  
  7.             Dispatch doc = Dispatch.invoke(  
  8.                     docs,  
  9.                     "Open",  
  10.                     Dispatch.Method,  
  11.                     new Object[] { docfile, new Variant(false),  
  12.                             new Variant(true) }, new int[1]).toDispatch();  
  13.             File file1 = new File(toFile);  
  14.             File file2 = new File(toFile + ".pdf");  
  15.             if (file1.exists()) {  
  16.                 file1.delete();  
  17.             }  
  18.             if (file2.exists()) {  
  19.                 file2.delete();  
  20.             }  
  21.   
  22.             Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {  
  23.                     toFile, new Variant(17) }, new int[1]);  
  24.             Variant f = new Variant(false);  
  25.             Dispatch.call(doc, "Close", f);  
  26.             logger.info("转换成功:" + toFile);  
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.             logger.info("转换失败:" + docfile + ",  " + e.getMessage());  
  30.         } finally {  
  31.             app.invoke("Quit"new Variant[] {});  
  32.         }  
  33.         try {  
  34.             Thread.sleep(3000);  
  35.         } catch (InterruptedException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.         logger.info("WTopTools word2PDF end");  
  39.     }  
 

3.window使用pscp.exe向linux发送文件.同时利用httpinvoker通知linux服务器文件转换完成.在第一次使用pscp.exe的使用会有提示操作.如果你直接用java代码调用的话会直接推出.所有第一次使用请用cmd手动执行一次,并且根据选项操作一下就可以了. window发送文件到linux的bat脚本代码如下:

Java代码 
  1. pscp.exe -q -pw 密码 -P 端口 d:\file\%1  wap@xxx.xxx.xxx.xxx:/usr/local/  

  其中-pw参数后面是linux密码. -p后面是端口号, 在后面是window本地要发送的文件.%1表示调用bat脚本时传进来的第一个参数.wap@xxx.xxx.xxx.xxx:/usr/local/表示用wap用户链接xxx.xxx.xxx.xxxlinux服务器,并且文件发送到/user/local文件夹下.

您的回应...

相关话题

查看全部

也许你感兴趣

换一批

热门标签

更多