把word文档转化成pdf文档

<o:p></o:p>

最近想写个Java程序来把word文档转换成pdf文档, 虽然最终结果不是很理想, 但是还是想把经验拿出来和大家分享.<o:p></o:p>

先到网上google了一下,  倒是找到一些小技巧:<o:p></o:p>

1.    wps可以直接把word转化成pdf文档.<o:p></o:p>

2.    Adobe有个pdfmaker也可以把一个word文档转化成pdf, 而且安装了pdfmaker就同时也安装了几个dll, 如果用C++的话,那么利用这几个dll可以直接把word转化成pdf.<o:p></o:p>

3.    java里面有个类库:itext, 可以生成pdf.<o:p></o:p>

4.    因为word的格式是不公开的, 所以无法直接用Java去操作word(如果你把一个word文件读出来, 你将得到一堆乱码), 但是COM是可以操作word, 所以利用JavaJNI来操作COM从而可以间接的操作word, 这里就要用一种叫做Java COM Bridge的包来实现JavaCOM的链接, 我了解到的有两种桥:Jacob, JCOM. 两个我都有试过, Jacob有点恶心, 依赖于JRE的版本, 我试了几个版本才在我的机器上跑对一个例子, 可是拿到别人的机器上一跑, 有崩了, 遂放弃. JCOM倒是一试就对, 可是我一想如果要利用他们把word的内容取出来再用itext把内容写进pdf, 感觉太过复杂..<o:p></o:p>

直接从word转化成pdf代价太大!<o:p></o:p>

直接不行间接呢?itext库可以把html转化成pdf, 那只要想办法把word转成html就可以了, 我找了一下,找到两个东西:<o:p></o:p>

1.     WordHTML是一个开源的C++程序, 可以把word转化成html.<o:p></o:p>

2.     我试Jacob的程序就可以把我word转化成html,但是前面说了,在别人的机器上崩了, , 不过还是把程序贴出来:<o:p></o:p>

  

import  com.jacob.activeX.ActiveXComponent;
import  com.jacob.com.Dispatch;
import  com.jacob.com.Variant;
public   class  WordToHtml {
    
public boolean changeFormat (String FileName){
        
        String FileFormat 
= "";
        FileFormat 
= FileName.substring(FileName.length()-4,FileName.length());
        System.out.println(FileFormat);
        
        
if(FileFormat.equalsIgnoreCase(".doc")){
            String DocFile 
= FileName;
            
            System.out.println(
"word文件路径:"+DocFile);
            
//word文件的完整路径
            
            String HtmlFile 
= DocFile.substring(0, (DocFile.length() - 4)) + ".htm";
            
            System.out.println(
"htm文件路径:"+HtmlFile);
            
//html文件的完整路径
            
            ActiveXComponent app 
= new ActiveXComponent("Word.Application");
            
//启动word
            
            
try
{
                app.setProperty(
"Visible"new Variant(false));
                
//设置word程序非可视化运行
                
                Dispatch docs 
= app.getProperty("Documents").toDispatch();
                
                Dispatch doc 
= Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{DocFile,new Variant(false), new Variant(true)}new int[1]).toDispatch(); 
                
//打开word文件
                
                Dispatch.invoke(doc,
"SaveAs",Dispatch.Method, new Object[]{HtmlFile,new Variant(8)}new int[1]);
                
//作为htm格式保存文件
                
                Dispatch.call(doc, 
"Close",new Variant(false));
                
//关闭文件
                
            }

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

            
finally {
                app.invoke(
"Quit"new Variant[] {});
                
//退出word程序
            }

            
//转化完毕
            return true;
        }

        
return false;
    }

    
public static void main(String[] args ) {
        WordToHtml d 
= new WordToHtml();
        d.changeFormat( args[ 
0 ] );
    }

}


 

3.     htmldoc可以把html转化成pdf.<o:p></o:p>

我试了一下利用WordHTML转化成的html可以用htmldoc转化成pdf,但是word中的表格到了pdf中都没了边框, 总算还是可以转的, wordhtml是有源代码的, 可以把它改一下,利用jni来调用, htmldoc可以从命令行调用, 当然有兴趣的人可以用itext来做, 我是在公司找出这个方法的, 回到寝室一试, htmldoc在我的机器上崩了, ..,虽然不怎么成功,但也没觉得沮丧,总算知道了有这么回事,知道用java把word转成pdf不简单,记得老师曾经问一个同学项目做的怎么样了, 该同学说:"我只是经历了一些失败!";

 



你可能感兴趣的:(html,jni,Google,Adobe)