最近项目需要用到转word和转pdf,这里做一下记录。

使用freemarker工具将ftl文件转word

首先,编辑好word文档内容格式,导出为xml文件,然后将文件后缀名更改诶ftl

然后引入依赖

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.21</version></dependency>

最后使用代码测试

package com.test.docpdf;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.core.env.SystemEnvironmentPropertySource;import freemarker.template.Configuration;
import freemarker.template.Template;public class FtlToWord {private static Configuration configuration = null;  private static final String templateFolder = FtlToWord.class.getClassLoader().getResource("").getPath()+"/templates/";  //FTL文件所存在的位置 static { configuration = new Configuration();  configuration.setDefaultEncoding("utf-8");  try {  configuration.setDirectoryForTemplateLoading(new File(templateFolder));  } catch (IOException e) {e.printStackTrace();}  }  /*private WordUtils() {  throw new AssertionError();  } */ public static void main(String[] args) throws IOException {Map<String, Object> map = new HashMap<String, Object>();FtlToWord w = new FtlToWord();w.exportMillCertificateWord(map);}public static void exportMillCertificateWord(Map map) throws IOException {  configuration.setDefaultEncoding("UTF-8");//Template freemarkerTemplate = configuration.getTemplate("test.ftl");  Template freemarkerTemplate = configuration.getTemplate("testtwordfff.ftl");  File file = null;  InputStream fin = null;  // 调用工具类的createDoc方法生成Word文档  file = createDoc(map,freemarkerTemplate);  fin = new FileInputStream(file);  }  private static File createDoc(Map<?, ?> dataMap, Template template) {  String name =  "C:\\Users\\666\\Desktop\\testtwordfff.doc";  File f = new File(name);  Template t = template;  try {  f.createNewFile();Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");  t.process(dataMap, w);w.close();  } catch (Exception ex) {  ex.printStackTrace();  throw new RuntimeException(ex);  }  return f;  }}

可以再代码中配置好ftl文件和pdf文件的路径,然后使用main方法 测试

将word文件转pdf

将word文件转pdf首先尝试使用的是OpenOffice。

首先下载OpenOffice的软件,然后再cmd中进入中,调用启动服务的命令:

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

然后下载jodconverter的jar包,在代码中编写测试程序。

测试发现在使用手动生成的word转pdf成功,但是使用ftl生成的word转pdf内容错误(内容为xml的标签信息)

然后再尝试的是使用jacob将word转pdf,它是直接调用Microsoft Office 或 WPS组件实现word、excel、PPT转换成PDF。

只支持windows服务器

首先引入依赖

<dependency><groupId>net.sf.jacob-project</groupId><artifactId>jacob</artifactId><version>1.14.3</version></dependency>

然后下载 jacob-1.14.3-dll.zip 文件 将dll文件放到jdk的bin目录中

最后使用代码测试调用

package com.test.docpdf;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;public class WordToPdf {private static final int WDFO_RMATPDF = 17;private static final int XLTYPE_PDF = 0;private static final int PPT_SAVEAS_PDF = 32;public static final int WORD_HTML = 8;public static final int WORD_TXT = 7;public static final int EXCEL_HTML = 44;/*private OfficeConverterUtils() {throw new AssertionError();}*/public static boolean officeToPdf(String officePath, String postfix, String pdfPath) {return wordToPdf(officePath, pdfPath);}public static void main(String[] args) {String wordPath = "C:\\Users\\61673\\Desktop\\testtwordfff.doc";String pdfPath = "C:\\Users\\61673\\Desktop\\testtwordfff.pdf";WordToPdf o = new WordToPdf();o.wordToPdf(wordPath, pdfPath);
}/*** word转换成PDF* @param wordPath 文件路径* @param pdfPath  文件路径* @return 成功失败*/public static boolean wordToPdf(String wordPath, String pdfPath) {ActiveXComponent msWordApp = new ActiveXComponent("Word.Application");msWordApp.setProperty("Visible", new Variant(false));Dispatch docs = Dispatch.get(msWordApp, "Documents").toDispatch();Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{wordPath, new Variant(false), new Variant(true)}, new int[1]).toDispatch();Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{pdfPath, new Variant(WDFO_RMATPDF)}, new int[1]);if (null != doc) {Dispatch.call(doc, "Close", false);}return true;}}

初次调用报错,由于本机当时只安装了office,所以猜测缺失了某些组件,下载了wps安装后重新测试发现,再次测试成功。

openOffice资料  jadcob资料

ftl转word,word转pdf记录相关推荐

  1. 利用.ftl模板生成word之后再转pdf发现 填充的印章图片显示不全,没有自动移到下一页处理办法

    因为公司业务需要,利用一个ftl模板生成word在转为pdf.然后发现印章图片在页底那边显示不全,没有如文字一般自动换到下一页去.例如如下: 最后折腾了半天,在网上试了各种办法.最后只能通过 java ...

  2. word打印为pdf去掉批注和修订记录

    对于这个问题某乎上充斥着垃圾回答,大多引流到自家开发的pdf产品上.其实背后的方法都是一样的,就是关掉批注,用word自带的功能就能解决,凡是word编辑软件都有类似功能 直接用word打印为pdf后 ...

  3. java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)

    freemark生成word/pdf 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 `.doc` word效果展示 2.1 `.docx` word效果展示 2.2 docx w ...

  4. nodejs+libreoffice 将word转成pdf

    项目场景: 项目场景:项目中遇到一个需求,前端要预览word,不知道怎么做,只能后端转了,我使用的nodejs + libreoffice,先将word转成pdf,发送给前端  然后前端预览pdf就好 ...

  5. word转换成pdf,包括导航目录和图片不变黑

    1.word转换成pdf,包括导航目录和图片不变黑: 有些时候将word转换成pdf,我们会发现生成的文件要么不带导航目录,要么就是图片显示有问题,比如变黑.变黑是因为某些图片在作图时修改了透明度,因 ...

  6. java基于word模板动态生成word及转pdf实践

    在项目中很容易会遇到需要动态生成pdf的应用场景,其实现方式也比较多 由于项目的关系,对于这种组件性的开发方式我想的是怎么方便怎么来,怎么快就怎么来 在咨询了之前做政务系统的同学后,他们都一致推荐我使 ...

  7. word转化为PDF

    前言:由于一个客户的项目中需要将WORD文档转换成PDF格式,故写了本篇实站教程 需求分析:客户的项目以B/S结构为主,提供一个WORD文件在后台自动转换成PDF,经过实际测试,如果该篇WORD文档有 ...

  8. docx4j实现word文件转换pdf文件

    目录 前言 PDF文件导出 word文件转换pdf文件 前言 前段时间在项目中遇到了导出pdf的问题,之前在项目中遇到导出文件莫不是excle或者word文件的导出,所以在遇到需要导出pdf文件时,我 ...

  9. 怎么把word转化为PDF?赶快试试这个方法!

    怎么把word转化为PDF?我们都经常会编辑文件.记录数据,所以也经常会需要转换文件的格式,word文件转换为PDF文件是最热的转换操作之一,所以有很多人都在问小编到底该怎样进行转换,不知道怎样转换出 ...

最新文章

  1. js正则验证身份证号是否正确
  2. CloudStack管理员文档 - 虚拟机
  3. Zabbix的分布式监控部署
  4. 困境中的帮助者与被助者
  5. 450g带盖吐司配方_450g带盖吐司烤多久
  6. 车联网大数据框架_大数据基础:ORM框架入门简介
  7. 安装Redis常见问题
  8. citrix+netscaler配置第一次培训
  9. 【LINUX系列】之字符串搜索命令
  10. UIViewController的生命周期
  11. Git:git如何拉取指定分支到本地
  12. 字体的样式设置和字体分类
  13. 在ubuntu中使用visual studio code对C/C++文件调试
  14. 斯坦福大学公开课:iOS 7应用开发
  15. 域名投毒,DNS污染,域名欺骗,其实就是域名污染。
  16. 前端面试题 ~ 移动端注意
  17. 笔记整理之 寒门难出贵子5 宝宝在魔都陨落
  18. Chrome浏览器使用指南
  19. 前端JS导出Excel表格 可筛选列 table2excel
  20. 编辑为什么建议转投_编辑建议转投其他期刊一般有哪些原因

热门文章

  1. [vue 进阶] 关于dicts字典的用法
  2. OpenGL ES之glEnable和glDisable函数
  3. html使用手机默认字体,开发移动端H5的时候,字体该不该随着手机系统字体的调整而变化?...
  4. 2022年商标注册需要多长时间?
  5. 关于信息检索评价TREC:session track 的说明
  6. 未曾清贫难成人,不经打击老天真
  7. linux dprintk 日志,linux命令备忘
  8. 云筑网认证_大师为你详解云筑网怎样注册账号
  9. Ubuntu18.04 安装配置桌面便签 Indicator Stickynotes
  10. Java实现 LeetCode 174 地下城游戏