<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的, 所以利用Java的JNI来操作COM从而可以间接的操作word, 这里就要用一种叫做Java COM Bridge的包来实现Java到COM的链接, 我了解到的有两种桥: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.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不简单,记得老师曾经问一个同学项目做的怎么样了, 该同学说:"我只是经历了一些失败!";