java word转pdf,可以解决转pdf后word横版变窄问题(pdf显示不全)
友情提醒,这个是目前不支持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 { // 关闭wordDispatch.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<Node> 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
java word转pdf,可以解决转pdf后word横版变窄问题(pdf显示不全)相关推荐
- 解决在不同DPR(设备像素比)的大屏幕显示出错或显示不全问题。
项目场景: **** 编写一个适配超大屏幕的大数据看板页面,用的适配方案是 rem+flexible.js,但是遇到不同DPR设备像素比(设备设置中可能叫"密度"一般为240或者3 ...
- IReport 导出PDF中的 平方(m²) 与 立方(m³) 特殊字符再Adobe Acrobat DC显示不全问题
问题: IReport 导出PDF 平方(m²) 与 立方(m³) 特殊字符再Adobe Acrobat DC显示不全,而再WPS.Office.浏览器.等工具打开正常. 相关截图: 在浏览器打开 ...
- 3步!PDF Converter Master for Mac6.2中文激活版满足您一切pdf转换需求!
16输出格式,准确的PDF转换,丰富的输出格式选择,灵活高效-PDF Converter Master for Mac6.2中文激活版有太多太多的功能,让你放弃其他的转换器,而安装这一款,成为您的唯一 ...
- JAVA环境配置及如何解决win10重启后环境配置失效的问题
一.配置JAVA环境 1.JDK的下载与安装 进入官网下载对应版本 注意:安装路径最好不要包含中文或空格等特殊字符,最好使用纯英文目录 2.配置环境变量的步骤 (1)按下win+E键,找到此电脑,右键 ...
- java excel 0没了,解决导出Excel后0丢失的问题
需求背景 1.报表中的0.XXX导出Excel后0丢失,变成了.XXX,如0.5变成.5: 2.报表数据集中数据有存在空和0的数据,在报表显示的时候要求空值不显示,0值显示0,当前都显示为0: 3.横 ...
- python和java的格斗动画_《Genesis-3D开源游戏引擎--横版格斗游戏制作教程04:技能的输入与检测》...
4.技能的输入与检测 概述: 技能系统的用户体验,制约着玩家对整个游戏的体验.游戏角色的技能华丽度,连招的顺利过渡,以及逼真的打击感,都作为一款游戏的卖点吸引着玩家的注意.开发者在开发游戏初期,会根据 ...
- java pdf 判断横版、竖版
最近在开发遇到Pdf加水印的功能,竖版的时候 获取pageInfo的 高度.宽度进行加载水印,能铺满pdf每一页,但是横版pdf发现 水印只加 了一半的宽度.在查找中发现 是 pdf 加水印时,要判断 ...
- python核心编程第二版pdf_Python Book电子书pdf版合集 Python核心高级编程第二版
1小时学会Python.doc 51CTO下载-[Python系列].BeginningPythonFromNovicetoProfessionalSecondEdition.pdf 8.Python ...
- word文档中插入图片显示不全解决办法
在windows下写word文档,正常情况下,我们应该不会遇到插入图片显示不全的问题,好像是如果在已有的文档中插入图片,比如文档中间插入,图片没办法自动扩展空间,这就导致了显示不全的问题. 这个问题也 ...
最新文章
- 多个Series合并成Dataframe,index不完全匹配怎么处理
- spring context 初始化两次导致dubbo端口被占用
- SQL基础操作_8_基础概念
- origin如何将多个曲线放在一张图_Origin入门教程(十二):误差棒棒棒棒儿
- HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)
- atitit.抽奖活动插件组件设计--结构设计and 抽奖流程建模
- eclipse hadoop开发环境配置
- C语言开辟空间和C++ 开辟空间
- @vaild权限校验框架配合java正则表达式
- VMware 虚拟机鼠标闪烁
- python画三维坐标图像_由RGB-D图像获取三维坐标(相机坐标) Python
- 递归算法:爬楼梯问题
- MDSF:Mendix介绍
- PoE交换机的多种连接方式 PoE交换机的4种连接方式
- win8的prolific USB-to-serial comm port驱动安装问题解决
- JavaWeb开发日记
- 五、cadence ic 5141 ——PDK规则查看
- 2022 BUAA 软工第二次作业
- MTS格式视频转AVI相关软件
- 20种赛博朋克摄影调色luts预设