注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

word,ppt,excel转pdf(只需用office自带功能)(转)  

2012-12-05 20:25:45|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

之前也用过其他的一些方式,比如调工具。但那只能转部分格式

还用过Adobe Acrobat 8 Professional,但用java代码转格式的时候,这个软件会打开,造成速率较慢

 

最终的解决方案,放弃一切其他工具和软件,只用office自带的功能实现word,ppt,excel到pdf的转变

PS.你的office必须是07及以上,并且需要在文件另存为选项中有,“另存为pdf或XPS” 的一项

如果没有,你需要下载office相应插件SaveAsPDFandXPS

 

这里有个疑问,想问下大牛,希望大牛们不吝赐教,哞~~

安装完插件后在word的帮助里面,选搜索点脱机开发人员帮助

再点 Word 2007 开发人员参考新增内容新的成员和常量WdSaveFormat wdFormatPDF
同样 在ppt里面,我也找得到对象ppt到pdf的常量
但在excel里面找了很长时间都没找到, 既然excel的文件另存为那里有“另存为pdf”,那就应该有这个常量啊。请大神们赐教啊
工程必备文件

需要jar包

jacob.jar

 

需要dll文件(放在system32下)

jacob-1.15-M4-x86.dll

 

 

好了,准备工作做完,废话不多说,我们代码揍起来

 

Java代码 
  1. import java.io.File;  
  2. import com.jacob.activeX.ActiveXComponent;  
  3. import com.jacob.com.Dispatch;  
  4. import com.jacob.com.Variant;  
  5.   
  6. public class Word2Pdf {  
  7.   
  8.     static final int wdDoNotSaveChanges = 0;// 不保存待定的更改。  
  9.     static final int wdFormatPDF = 17;// word转PDF 格式  
  10.     static final int ppSaveAsPDF = 32;// ppt 转PDF 格式  
  11.   
  12.     public static void main(String[] args) {  
  13.         String source1 = "D:\\test.doc";  
  14.         String source2 = "D:\\a.xls";  
  15.         String source3 = "D:\\aa.ppt";  
  16.         String target1 = "D:\\test1.pdf";  
  17.         String target2 = "D:\\test2.pdf";  
  18.         String target3 = "D:\\test3.pdf";  
  19.           
  20.         Word2Pdf pdf = new Word2Pdf();  
  21.           
  22.           
  23.         pdf.word2pdf(source1, target1);  
  24.         pdf.excel2pdf(source2, target2);  
  25.         pdf.ppt2pdf(source3, target3);  
  26.           
  27.           
  28.     }  
  29.   
  30.     public void word2pdf(String source,String target){  
  31.         System.out.println("启动Word");  
  32.         long start = System.currentTimeMillis();  
  33.         ActiveXComponent app = null;  
  34.         try {  
  35.             app = new ActiveXComponent("Word.Application");  
  36.             app.setProperty("Visible"false);  
  37.   
  38.             Dispatch docs = app.getProperty("Documents").toDispatch();  
  39.             System.out.println("打开文档" + source);  
  40.             Dispatch doc = Dispatch.call(docs,//  
  41.                     "Open"//  
  42.                     source,// FileName  
  43.                     false,// ConfirmConversions  
  44.                     true // ReadOnly  
  45.                     ).toDispatch();  
  46.   
  47.             System.out.println("转换文档到PDF " + target);  
  48.             File tofile = new File(target);  
  49.             if (tofile.exists()) {  
  50.                 tofile.delete();  
  51.             }  
  52.             Dispatch.call(doc,//  
  53.                     "SaveAs"//  
  54.                     target, // FileName  
  55.                     wdFormatPDF);  
  56.   
  57.             Dispatch.call(doc, "Close"false);  
  58.             long end = System.currentTimeMillis();  
  59.             System.out.println("转换完成..用时:" + (end - start) + "ms.");  
  60.         } catch (Exception e) {  
  61.             System.out.println("========Error:文档转换失败:" + e.getMessage());  
  62.         } finally {  
  63.             if (app != null)  
  64.                 app.invoke("Quit", wdDoNotSaveChanges);  
  65.         }  
  66.     }  
  67.   
  68.     public void ppt2pdf(String source,String target){  
  69.         System.out.println("启动PPT");  
  70.         long start = System.currentTimeMillis();  
  71.         ActiveXComponent app = null;  
  72.         try {  
  73.             app = new ActiveXComponent("Powerpoint.Application");  
  74.             Dispatch presentations = app.getProperty("Presentations").toDispatch();  
  75.             System.out.println("打开文档" + source);  
  76.             Dispatch presentation = Dispatch.call(presentations,//  
  77.                     "Open",   
  78.                     source,// FileName  
  79.                     true,// ReadOnly  
  80.                     true,// Untitled 指定文件是否有标题。  
  81.                     false // WithWindow 指定文件是否可见。  
  82.                     ).toDispatch();  
  83.   
  84.             System.out.println("转换文档到PDF " + target);  
  85.             File tofile = new File(target);  
  86.             if (tofile.exists()) {  
  87.                 tofile.delete();  
  88.             }  
  89.             Dispatch.call(presentation,//  
  90.                     "SaveAs"//  
  91.                     target, // FileName  
  92.                     ppSaveAsPDF);  
  93.   
  94.             Dispatch.call(presentation, "Close");  
  95.             long end = System.currentTimeMillis();  
  96.             System.out.println("转换完成..用时:" + (end - start) + "ms.");  
  97.         } catch (Exception e) {  
  98.             System.out.println("========Error:文档转换失败:" + e.getMessage());  
  99.         } finally {  
  100.             if (app != null) app.invoke("Quit");  
  101.         }  
  102.     }  
  103.   
  104.     public void excel2pdf(String source, String target) {  
  105.         System.out.println("启动Excel");  
  106.         long start = System.currentTimeMillis();  
  107.         ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel(Excel.Application)  
  108.         try {  
  109.         app.setProperty("Visible"false);  
  110.         Dispatch workbooks = app.getProperty("Workbooks").toDispatch();  
  111.         System.out.println("打开文档" + source);  
  112.         Dispatch workbook = Dispatch.invoke(workbooks, "Open", Dispatch.Method, new Object[]{source, new Variant(false),new Variant(false)}, new int[3]).toDispatch();  
  113.         Dispatch.invoke(workbook, "SaveAs", Dispatch.Method, new Object[] {  
  114.         target, new Variant(57), new Variant(false),  
  115.         new Variant(57), new Variant(57), new Variant(false),  
  116.         new Variant(true), new Variant(57), new Variant(true),  
  117.         new Variant(true), new Variant(true) }, new int[1]);  
  118.         Variant f = new Variant(false);  
  119.         System.out.println("转换文档到PDF " + target);  
  120.         Dispatch.call(workbook, "Close", f);  
  121.         long end = System.currentTimeMillis();  
  122.         System.out.println("转换完成..用时:" + (end - start) + "ms.");  
  123.         } catch (Exception e) {  
  124.             System.out.println("========Error:文档转换失败:" + e.getMessage());  
  125.         }finally {  
  126.             if (app != null){  
  127.                 app.invoke("Quit"new Variant[] {});  
  128.             }  
  129.         }  
  130.     }  
  131. }  

  代码里面,命名很清楚,word2pdf,ppt2pdf,excel2pdf,不用解释是什么意思吧

  按需求,大家各取所需。

   PS.第一次在eye发帖,好紧张,好羞射

  评论这张
 
阅读(2453)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016