友情提醒,这个是目前不支持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显示不全)相关推荐

  1. 解决在不同DPR(设备像素比)的大屏幕显示出错或显示不全问题。

    项目场景: **** 编写一个适配超大屏幕的大数据看板页面,用的适配方案是 rem+flexible.js,但是遇到不同DPR设备像素比(设备设置中可能叫"密度"一般为240或者3 ...

  2. IReport 导出PDF中的 平方(m²) 与 立方(m³) 特殊字符再Adobe Acrobat DC显示不全问题

    问题: IReport 导出PDF 平方(m²)  与 立方(m³)  特殊字符再Adobe Acrobat DC显示不全,而再WPS.Office.浏览器.等工具打开正常. 相关截图: 在浏览器打开 ...

  3. 3步!PDF Converter Master for Mac6.2中文激活版满足您一切pdf转换需求!

    16输出格式,准确的PDF转换,丰富的输出格式选择,灵活高效-PDF Converter Master for Mac6.2中文激活版有太多太多的功能,让你放弃其他的转换器,而安装这一款,成为您的唯一 ...

  4. JAVA环境配置及如何解决win10重启后环境配置失效的问题

    一.配置JAVA环境 1.JDK的下载与安装 进入官网下载对应版本 注意:安装路径最好不要包含中文或空格等特殊字符,最好使用纯英文目录 2.配置环境变量的步骤 (1)按下win+E键,找到此电脑,右键 ...

  5. java excel 0没了,解决导出Excel后0丢失的问题

    需求背景 1.报表中的0.XXX导出Excel后0丢失,变成了.XXX,如0.5变成.5: 2.报表数据集中数据有存在空和0的数据,在报表显示的时候要求空值不显示,0值显示0,当前都显示为0: 3.横 ...

  6. python和java的格斗动画_《Genesis-3D开源游戏引擎--横版格斗游戏制作教程04:技能的输入与检测》...

    4.技能的输入与检测 概述: 技能系统的用户体验,制约着玩家对整个游戏的体验.游戏角色的技能华丽度,连招的顺利过渡,以及逼真的打击感,都作为一款游戏的卖点吸引着玩家的注意.开发者在开发游戏初期,会根据 ...

  7. java pdf 判断横版、竖版

    最近在开发遇到Pdf加水印的功能,竖版的时候 获取pageInfo的 高度.宽度进行加载水印,能铺满pdf每一页,但是横版pdf发现 水印只加 了一半的宽度.在查找中发现 是 pdf 加水印时,要判断 ...

  8. python核心编程第二版pdf_Python Book电子书pdf版合集 Python核心高级编程第二版

    1小时学会Python.doc 51CTO下载-[Python系列].BeginningPythonFromNovicetoProfessionalSecondEdition.pdf 8.Python ...

  9. word文档中插入图片显示不全解决办法

    在windows下写word文档,正常情况下,我们应该不会遇到插入图片显示不全的问题,好像是如果在已有的文档中插入图片,比如文档中间插入,图片没办法自动扩展空间,这就导致了显示不全的问题. 这个问题也 ...

最新文章

  1. 多个Series合并成Dataframe,index不完全匹配怎么处理
  2. spring context 初始化两次导致dubbo端口被占用
  3. SQL基础操作_8_基础概念
  4. origin如何将多个曲线放在一张图_Origin入门教程(十二):误差棒棒棒棒儿
  5. HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)
  6. atitit.抽奖活动插件组件设计--结构设计and 抽奖流程建模
  7. eclipse hadoop开发环境配置
  8. C语言开辟空间和C++ 开辟空间
  9. @vaild权限校验框架配合java正则表达式
  10. VMware 虚拟机鼠标闪烁
  11. python画三维坐标图像_由RGB-D图像获取三维坐标(相机坐标) Python
  12. 递归算法:爬楼梯问题
  13. MDSF:Mendix介绍
  14. PoE交换机的多种连接方式 PoE交换机的4种连接方式
  15. win8的prolific USB-to-serial comm port驱动安装问题解决
  16. JavaWeb开发日记
  17. 五、cadence ic 5141 ——PDK规则查看
  18. 2022 BUAA 软工第二次作业
  19. MTS格式视频转AVI相关软件
  20. 20种赛博朋克摄影调色luts预设

热门文章

  1. Echarts 基本使用五大步骤
  2. 网络安全人员需要考的几本证书(含金量高),建议收藏
  3. 微信朋友圈怎样推广,一张思维导图告诉大家
  4. 《Unreal大象无形》读书笔记
  5. hadoop集群部署
  6. 读书笔记之-Analyzing Neural Time Series Data 1、2
  7. 【TOP10 APP】这些应用成了AppCan千人大会的焦点
  8. 2021年中国邮政行业发展现状分析,邮政服务业务收入有所下降「图」
  9. python如何重新开始程序_如何使Python程序自动重新启动
  10. python翻转课堂_总算发现如何运用翻转课堂用于数学教学