使用jacob将word转成PDF.docx

上传人:b****6 文档编号:7713887 上传时间:2023-01-25 格式:DOCX 页数:20 大小:31.17KB
下载 相关 举报
使用jacob将word转成PDF.docx_第1页
第1页 / 共20页
使用jacob将word转成PDF.docx_第2页
第2页 / 共20页
使用jacob将word转成PDF.docx_第3页
第3页 / 共20页
使用jacob将word转成PDF.docx_第4页
第4页 / 共20页
使用jacob将word转成PDF.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

使用jacob将word转成PDF.docx

《使用jacob将word转成PDF.docx》由会员分享,可在线阅读,更多相关《使用jacob将word转成PDF.docx(20页珍藏版)》请在冰豆网上搜索。

使用jacob将word转成PDF.docx

使用jacob将word转成PDF

项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理如下:

 

一、了解Jacob

先了解一下概念,JACOB就是JAVA-COMBridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。

这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。

下载地址:

二、Jacob安装

1、我们解开下载的jacob_1.9.zip,在文件夹中找到jacob.dll和jacob.jar两个文件

2、将压缩包解压后,Jacob.jar添加到Libraries中;

3、将Jacob.dll放至“WINDOWS\SYSTEM32”下面。

需要注意的是:

 

【使用IDE启动Web服务器时,系统读取不到Jacob.dll,例如用MyEclipse启动Tomcat,就需要将dll文件copy到MyEclipse安装目录的“jre\bin”下面。

 

一般系统没有加载到Jacob.dll文件时,报错信息为:

“java.lang.UnsatisfiedLinkError:

nojacobinjava.library.path”】

三、使用Jacob转换Word,Excel为HTML

JAVA代码:

Java代码  

1.import java.io.BufferedReader;  

2.import java.io.BufferedWriter;  

3.import java.io.File;  

4.import java.io.FileInputStream;  

5.import java.io.FileNotFoundException;  

6.import java.io.FileWriter;  

7.import java.io.IOException;  

8.import java.io.InputStreamReader;  

9.  

10.import com.jacob.activeX.ActiveXComponent;  

11.import .Dispatch;  

12.import .Variant;  

13.  

14.public class TransformFiletoHtml  

15.{  

16.    int WORD_HTML = 8;  

17.    int WORD_TXT = 7;  

18.    int EXCEL_HTML = 44;  

19.          

20.    /** 

21.     * WORD转HTML 

22.     * @param docfile WORD文件全路径 

23.     * @param htmlfile 转换后HTML存放路径 

24.     */  

25.    public void wordToHtml(String docfile, String htmlfile)  

26.    {  

27.        ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word  

28.        try  

29.        {  

30.            app.setProperty("Visible", new Variant(false));  

31.            Dispatch docs = app.getProperty("Documents").toDispatch();  

32.            Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { docfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();  

33.            Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(WORD_HTML) }, new int[1]);  

34.            Variant f = new Variant(false);  

35.            Dispatch.call(doc, "Close", f);  

36.        }  

37.        catch (Exception e)  

38.        {  

39.            e.printStackTrace();  

40.        }  

41.        finally  

42.        {  

43.            app.invoke("Quit", new Variant[] {});  

44.        }  

45.    }  

46.      

47.    /** 

48.     * EXCEL转HTML 

49.     * @param xlsfile EXCEL文件全路径 

50.     * @param htmlfile 转换后HTML存放路径 

51.     */  

52.    public void excelToHtml(String xlsfile, String htmlfile)  

53.    {  

54.        ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel  

55.        try  

56.        {  

57.            app.setProperty("Visible", new Variant(false));  

58.            Dispatch excels = app.getProperty("Workbooks").toDispatch();  

59.            Dispatch excel = Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[] { xlsfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();  

60.            Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(EXCEL_HTML) }, new int[1]);  

61.            Variant f = new Variant(false);  

62.            Dispatch.call(excel, "Close", f);  

63.        }  

64.        catch (Exception e)  

65.        {  

66.            e.printStackTrace();  

67.        }  

68.        finally  

69.        {  

70.            app.invoke("Quit", new Variant[] {});  

71.        }  

72.    }  

73.      

74.    /** 

75.     * /删除指定文件夹 

76.     * @param folderPath 文件夹全路径 

77.     * @param htmlfile 转换后HTML存放路径 

78.     */  

79.     public void delFolder(String folderPath)   

80.                {  

81.         try   

82.         {  

83.            delAllFile(folderPath); //删除完里面所有内容  

84.            String filePath = folderPath;  

85.            filePath = filePath.toString();  

86.            java.io.File myFilePath = new java.io.File(filePath);  

87.            myFilePath.delete(); //删除空文件夹  

88.         } catch (Exception e) {e.printStackTrace();}  

89.    }  

90.      

91.    /** 

92.     * /删除指定文件夹下所有文件 

93.     * @param path 文件全路径 

94.     */  

95.    public boolean delAllFile(String path)   

96.       {  

97.           boolean flag = false;  

98.           File file = new File(path);  

99.           if (!

file.exists())   

100.           {  

101.             return flag;  

102.           }  

103.           if (!

file.isDirectory())   

104.           {  

105.             return flag;  

106.           }  

107.           String[] tempList = file.list();  

108.           File temp = null;  

109.           for (int i = 0; i < tempList.length; i++)   

110.           {  

111.              if (path.endsWith(File.separator))   

112.              {  

113.                 temp = new File(path + tempList[i]);  

114.              }   

115.              else   

116.              {  

117.                  temp = new File(path + File.separator + tempList[i]);  

118.              }  

119.              if (temp.isFile())   

120.              {  

121.                 temp.delete();  

122.              }  

123.              if (temp.isDirectory())   

124.              {  

125.                 delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件  

126.                 delFolder(path + "/" + tempList[i]);//再删除空文件夹  

127.                 flag = true;  

128.              }  

129.           }  

130.           return flag;  

131.             }  

132.}  

调用JAVA代码:

Java代码  

1.public class Test1 {  

2.    public static void main(String[] args) {  

3.        // TODO Auto-generated method stub  

4.        TransformFiletoHtml trans = new TransformFiletoHtml();  

5.        trans.wordToHtml("D:

\\sinye.doc", "D:

\\sinye.html");  

6.    }  

7.  

8.}  

 只写了一个测试word转html的,excel转html的同理,在TransformFiletoHtml类中,写了两个方法,一个是删除文件夹的方法(delFolder()),一个是删除文件夹下所有文件的方法(delAllFile())。

写这个的目的是出于:

在word或者excel转html的过程中,除了生成制定的html页面外,jacob组件会生成一些转换html页面时相关的其它页面,但是这些相关的其它页面不是我们所需要的,因此想把它删除,其实不删除也可以,只是看着不爽,在测试中,发现,word有时不会生成这样的文件,而且即使生成了,也能删除掉,但是excel生成的文件却不能删除,还望高手们给予解答。

另外,在你将excel转换html时,如果你的代码没问题,转换时,老提示什么存在用户区域的安全设置这什么的,会让你选择继续转换,还是取消。

这是因为你转换的那个excel中写了保护,解决办法是在excel的工具->保护->允许用户编辑区域,删除里面的所有保护。

整体思路参考

 

上面的这篇文章使用jacob将word转换成HTML的,利用的是Word的另存为功能,在Office2007SP2之后,Office就可以另存为PDF了,可以使用这个方法将office另存为PDF文档。

 

具体代码可以参考上文里面的,另存为哪种类型是由newvariant()里面的参数决定的。

 

       Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(WORD_HTML) }, new int[1]); 

newVariant(),这里面的根据传入的参数不同,可以另存为不同的类型,但是在网上搜索了一个并没有找到有关这个参数类型的一个说明,自己尝试了一下,结果如下:

 

 

0

Doc

1

Dot

2-5

Txt

6

Rtf

7

Txt

8、10

htm

11

Xml

12、16

Docx

13

Docm

14

Dotx

15

Dotm

17

Pdf

 

我使用的是office2010,不同版本的对应的应该不一样,我是写了这一小段程序来测试另存为的类型的。

 

Java代码  

1.public class JacobTest {  

2.    public static void wordToPDF(String docfile, String toFile,int type) {    

3.        ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word    

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.            //new Variant(type),这里面的type的决定另存为什么类型的文件  

14.            Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {    

15.                    toFile, new Variant(type) }, new int[1]);    

16.            Variant f = new Variant(false);    

17.            Dispatch.call(doc, "Close", f);    

18.        } catch (Exception e) {    

19.            e.printStackTrace();    

20.        } finally {    

21.            app.invoke("Quit", new Variant[] {});    

22.        }    

23.    }    

24.      

25.    public static void main(String[] args) {  

26.        //源文件全路径  

27.        String docfile ="D:

\\服务实施描述报告(企业门户).docx";  

28.        for (int i = 0; i < 18; i++) {     

29.            //些路径test为实际存在的目录,s后面为要另存为的文件名  

30.            String toFile="d:

\\test\\s"+i;  

31.            wordToPDF(docfile, toFile,i);  

32.        }         

33.    }  

34.}

EXCEL转PDF(JAVA自动运行)

基本思想是,通过office2007自带的插件,保存为PDF,然后用ActiveXComponent实现,核心代码如下:

 

1>.转换类ExcelToPdf.java

 

packagecom.olive.util;

importjava.io.*;

importjava.util.Calendar;

importjava.util.Date;

importcom.jacob.activeX.ActiveXComponent;

import.ComThread;

import.Dispatch;

import.Variant;

publicclassExcelToPdf{

   privateStringpath;

   publicstaticbooleanrunFlag=false;

    

 publicExcelToPdf(Stringpath){

  this.path=path;

 }

 publicvoidsaveExcelAsPdf(StringfilePath,StringoutFile){

   ComThread.InitSTA();

   ActiveXComponentactcom=newActiveXComponent("Excel.Application");

   try{

    System.out.println((newDate()).toString()+" startconvertfrom:

"+filePath+"to"+outFile);

    actcom.setProperty("Visible",newVariant(false));

    Dispatchexcels=actcom.getProperty("Workbooks").toDispatch();

          Dispatchexcel=Dispatch.invoke(excels,"Open",Dispatch.Method,

                           newObject[]{filePath,newVariant(false),newVariant(false)},

                           newint[9]).toDispatch();

          Dispatch.invoke(excel,"SaveAs",Dispatch.Method,newObject[]{outFile,newVariant(57),newVariant(false),

     newVariant(57),newVariant(57),newVariant(false),newVariant(true),newVariant(57),newVariant(false),

     ne

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1