java word转pdf,可以解决转pdf后word横版变窄问题(pdf显示不全)

您所在的位置:网站首页 word的图片转pdf显示不全 java word转pdf,可以解决转pdf后word横版变窄问题(pdf显示不全)

java word转pdf,可以解决转pdf后word横版变窄问题(pdf显示不全)

2024-06-01 10:28| 来源: 网络整理| 查看: 265

友情提醒,这个是目前不支持Linux,只支持wind.

最近公司业务需要在pdf中显示表格,但是表格内容列数有点长,导致 word 转pdf的时候 显示不全;

如上图这种显示不全的情况(截图中没有放表格,表格同理一样)。

 具体做法:第一、word的模板文件中需要 进行设置 word 横向布局;打开word => 选择【页面布局】=> 选择右下角的那个 箭头符号; 在页面设置 中,设置 纸张方向为横向,应用到本节,本节就是当前页面;全部就是所有页面了;设置完成后就行了;

第二、代码这一块,建立Word2PdfUtil .java类;这里要引用jacob相关的jar包: jacob.jar、aspectjweaver.jar; 其他的 poi、dom4j;

注意:这里需要引用jacob-1.17-x64.dll这个东西;把jacob.dll(不同版本的jacob的dll文件名有所不同)复制到jdk环境中,例如:【C:\Program Files\Java\jdk1.6.0_17\jre\bin】目录下即可。

相关jar 和 这个java我放到 我的资源页面上了;

https://download.csdn.net/download/qq_30515213/11022381

import java.io.File; import org.apache.poi.POIXMLDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class Word2PdfUtil { static final int wdFormatPDF = 17;// PDF 格式 public int wordToPDF(String sfileName,String toFileName) throws Exception{ System.out.println("启动Word..."); long start = System.currentTimeMillis(); ActiveXComponent app = null; Dispatch doc = null; try { app = new ActiveXComponent("Word.Application"); // 设置word不可见 app.setProperty("Visible", new Variant(false)); // 打开word文件 Dispatch docs = app.getProperty("Documents").toDispatch(); // doc = Dispatch.call(docs, "Open" , sourceFile).toDispatch(); doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { sfileName, new Variant(false),new Variant(true) }, new int[1]).toDispatch(); System.out.println("打开文档..." + sfileName); System.out.println("转换文档到PDF..." + toFileName); File tofile = new File(toFileName); // System.err.println(getDocPageSize(new File(sfileName))); if (tofile.exists()) { tofile.delete(); } // Dispatch.call(doc, "SaveAs", destFile, 17); // 作为html格式保存到临时文件::参数 new Variant(8)其中8表示word转html;7表示word转txt;44表示Excel转html;17表示word转成pdf。。 Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { toFileName, new Variant(17) }, new int[1]); long end = System.currentTimeMillis(); System.out.println("转换完成..用时:" + (end - start) + "ms."); } catch (Exception e) { e.printStackTrace(); System.out.println("========Error:文档转换失败:" + e.getMessage()); }catch(Throwable t){ t.printStackTrace(); } finally { // 关闭word Dispatch.call(doc,"Close",false); System.out.println("关闭文档"); if (app != null) app.invoke("Quit", new Variant[] {}); } //如果没有这句话,winword.exe进程将不会关闭 ComThread.Release(); return 1; } private static Document read(File xmlFile) throws DocumentException { SAXReader saxReader = new SAXReader(); return saxReader.read(xmlFile); } // public String getDocPageSize(File file){ // String pages = null; // try{ // Document doc = read(file); // List nodes = doc.selectNodes("//o:Pages"); // if(nodes != null && nodes.size() > 0){ // pages = nodes.get(0).getText(); // System.out.println("/"); // System.out.println("该word文档的页数为:"+Integer.parseInt(pages)); // System.out.println("/"); // }else{ // System.out.println("*********"); // System.out.println("页面转换错误"); // System.out.println("*********"); // } // }catch(Exception ex){ // ex.printStackTrace(); // } // return pages; // } public int getDocPageSize(String filePath) throws Exception { XWPFDocument docx = new XWPFDocument(POIXMLDocument.openPackage(filePath)); int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//总页数 int wordCount = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters();// 忽略空格的总字符数 另外还有getCharactersWithSpaces()方法获取带空格的总字数。 System.out.println ("pages=" + pages + " wordCount=" + wordCount); return pages; } public static void main(String[] args) throws Exception { Word2PdfUtil d = new Word2PdfUtil(); //System.err.println(d.getDocPageSize("E:\\test.doc")); d.wordToPDF("E:\\test.doc", "E:\\test\\mm.pdf"); } }

main方法直接运行,效果如下:

 

到此已经结束,关于word 模板 数据填充,这里不讲,新人可以自行百度,就是在最终生成好word后,在调用这个类即可。

出错总结:

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

2.出现这个错误是因为缺少了jacob-1.17-x64.dll这个东西,报错

3.需要安装Microsoft Save as PDF 或 XPS

com.jacob.com.ComFailException: Invoke of: SaveAs  Source: Microsoft Word  Description: 命令失败

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

Office版本使用2007,因为2007提供了一个加载项:Microsoft Save as PDF 或 XPS,可将文档另存为PDF格式。下载地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=4D951911-3E7E-4AE6-B059-A2E79ED87041,安装即可使用。 

 

本文参考:https://blog.csdn.net/u013238430/article/details/52943075



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3