java实现Word文档转为pdf

java实现Word文档转为pdf
java实现Word文档转为pdf

1. Word文档转为pdf直接上代码:

[html]view plain copy

1.import java.io.File;

2.

3.import org.apache.poi.POIXMLDocument;

4.import https://www.360docs.net/doc/a511109728.html,ermodel.XWPFDocument;

5.import org.dom4j.Document;

6.import org.dom4j.DocumentException;

7.import org.dom4j.io.SAXReader;

8.

9.import com.jacob.activeX.ActiveXComponent;

10.import https://www.360docs.net/doc/a511109728.html,Thread;

11.import https://www.360docs.net/doc/a511109728.html,.Dispatch;

12.import https://www.360docs.net/doc/a511109728.html,.Variant;

13.public class Word2pdf {

14. static final int wdFormatPDF = 17;// PDF 格式

15. public int wordToPDF(String sfileName,String toFileName) throws Exceptio

n{

16.

17. System.out.println("启动Word...");

18. long start = System.currentTimeMillis();

19. ActiveXComponent app = null;

20. Dispatch doc = null;

21. try {

22.app = new ActiveXComponent("Word.Application");

23. // 设置word不可见

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

25. // 打开word文件

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

27.// doc = Dispatch.call(docs, "Open" , sourceFile).toDispatch();

28.doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] {

29. sfileName, new Variant(false),new Variant(true) }, new int[1]

).toDispatch();

30. System.out.println("打开文档..." + sfileName);

31. System.out.println("转换文档到PDF..." + toFileName);

32. File tofile = new File(toFileName);

33. // System.err.println(getDocPageSize(new File(sfileName)));

34. if (tofile.exists()) {

35. tofile.delete();

36. }

37.// Dispatch.call(doc, "SaveAs", destFile, 17);

38. // 作为html格式保存到临时文件::参数 new Variant(8)其中8表示word转

html;7表示word转txt;44表示Excel转html;17表示word转成pdf。。

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

40. toFileName, new Variant(17) }, new int[1]);

41. long end = System.currentTimeMillis();

42. System.out.println("转换完成..用时:

" + (end - start) + "ms.");

43. } catch (Exception e) {

44. e.printStackTrace();

45. System.out.println("========Error:文档转换失败:

" + e.getMessage());

46. }catch(Throwable t){

47. t.printStackTrace();

48. } finally {

49. // 关闭word

50. Dispatch.call(doc,"Close",false);

51. System.out.println("关闭文档");

52. if (app != null)

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

54. }

55. //如果没有这句话,winword.exe进程将不会关闭

56. ComThread.Release();

57. return 1;

58. }

59. private static Document read(File xmlFile) throws DocumentException {

60. SAXReader saxReader = new SAXReader();

61. return saxReader.read(xmlFile);

62. }

63.// public String getDocPageSize(File file){

64.// String pages = null;

65.// try{

66.// Document doc = read(file);

67.// Listnodes = doc.selectNodes("//o:Pages");

68.// if(nodes != null && nodes.size() > 0){

69.// pages = nodes.get(0).getText();

70.// System.out.println("/////////////////");

71.// System.out.println("该word文档的页数为:

"+Integer.parseInt(pages));

72.// System.out.println("/////////////////");

73.// }else{

74.// System.out.println("*********");

75.// System.out.println("页面转换错误");

76.// System.out.println("*********");

77.// }

78.// }catch(Exception ex){

79.// ex.printStackTrace();

80.// }

81.// return pages;

82.// }

83. public int getDocPageSize(String filePath) throws Exception {

84. XWPFDocument docx = new XWPFDocument(POIXMLDocument.openPackage(file

Path));

85. int pages = docx.getProperties().getExtendedProperties().getUnderlyi

ngProperties().getPages();//总页数

86. int wordCount = docx.getProperties().getExtendedProperties().getUnde

rlyingProperties().getCharacters();// 忽略空格的总字符数另外还有

getCharactersWithSpaces()方法获取带空格的总字数。

87. System.out.println ("pages=" + pages + "wordCount=" + wordCount);

88. return pages;

89. }

90.

91. public static void main(String[] args) throws Exception {

92. Word2pdf d = new Word2pdf();

93. System.err.println(d.getDocPageSize("d:\\exportWord.docx"));

94. d.wordToPDF("d:\\1.docx", "d:\\1.pdf");

95. }

96.

97.}

可是能够完全运行的应该不可能,还要准备工作,

出错总结:

1.没引入jar包,,这个错误我就不说了,jar包你可以去上网搜索下载,基本上所有人都可以避免.jacob.jar

2.

出现这个错误是因为缺少了jacob-1.18-x64.dll(目前的最新版本,可在官网直接下载)这个东西,,把jacob-1.18-x64.dll复制到C:\Program Files\Java\jdk1.6.0_17\jdk\bin(项目中用到的jre和jdk)目录下即可。

注意:名字一定要改成和报错的时候一样的名字,差一点也不行。

3.由于出错没有截图,所以现在错误也不好去演示了,,简单的就是下面的错误

https://www.360docs.net/doc/a511109728.html,FailException: Invoke of: SaveAs

Source: Microsoft Word

Description: 命令失败

出现这种错误网上也有很多解决办法:如下

Office版本使用2007,因为2007提供了一个加载项:Microsoft Save as PDF 或XPS,可将文档另存为PDF格式。下载地址:

https://www.360docs.net/doc/a511109728.html,/downloads/zh-cn/details.aspx?FamilyID=4D951911-3E7E-4AE 6-B059-A2E79ED87041,安装即可使用。,或者你直接安装下office2013即可解决

4.转换的文档会显示修正页面,需加上

Dispatch.put(doc, "ShowRevisions", new Variant(false));

5,提示命令文件是只读,无法运行

Dispatch.put(doc, "ShowRevisions", new Variant(false));

打开文件时设置参数

Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { sfileName, new Variant(false),new Variant(false) },

newint[1]).toDispatch();

相关主题
相关文档
最新文档