ftl转word,word转pdf记录
最近项目需要用到转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记录相关推荐
- 利用.ftl模板生成word之后再转pdf发现 填充的印章图片显示不全,没有自动移到下一页处理办法
因为公司业务需要,利用一个ftl模板生成word在转为pdf.然后发现印章图片在页底那边显示不全,没有如文字一般自动换到下一页去.例如如下: 最后折腾了半天,在网上试了各种办法.最后只能通过 java ...
- word打印为pdf去掉批注和修订记录
对于这个问题某乎上充斥着垃圾回答,大多引流到自家开发的pdf产品上.其实背后的方法都是一样的,就是关掉批注,用word自带的功能就能解决,凡是word编辑软件都有类似功能 直接用word打印为pdf后 ...
- java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)
freemark生成word/pdf 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 `.doc` word效果展示 2.1 `.docx` word效果展示 2.2 docx w ...
- nodejs+libreoffice 将word转成pdf
项目场景: 项目场景:项目中遇到一个需求,前端要预览word,不知道怎么做,只能后端转了,我使用的nodejs + libreoffice,先将word转成pdf,发送给前端 然后前端预览pdf就好 ...
- word转换成pdf,包括导航目录和图片不变黑
1.word转换成pdf,包括导航目录和图片不变黑: 有些时候将word转换成pdf,我们会发现生成的文件要么不带导航目录,要么就是图片显示有问题,比如变黑.变黑是因为某些图片在作图时修改了透明度,因 ...
- java基于word模板动态生成word及转pdf实践
在项目中很容易会遇到需要动态生成pdf的应用场景,其实现方式也比较多 由于项目的关系,对于这种组件性的开发方式我想的是怎么方便怎么来,怎么快就怎么来 在咨询了之前做政务系统的同学后,他们都一致推荐我使 ...
- word转化为PDF
前言:由于一个客户的项目中需要将WORD文档转换成PDF格式,故写了本篇实站教程 需求分析:客户的项目以B/S结构为主,提供一个WORD文件在后台自动转换成PDF,经过实际测试,如果该篇WORD文档有 ...
- docx4j实现word文件转换pdf文件
目录 前言 PDF文件导出 word文件转换pdf文件 前言 前段时间在项目中遇到了导出pdf的问题,之前在项目中遇到导出文件莫不是excle或者word文件的导出,所以在遇到需要导出pdf文件时,我 ...
- 怎么把word转化为PDF?赶快试试这个方法!
怎么把word转化为PDF?我们都经常会编辑文件.记录数据,所以也经常会需要转换文件的格式,word文件转换为PDF文件是最热的转换操作之一,所以有很多人都在问小编到底该怎样进行转换,不知道怎样转换出 ...
最新文章
- js正则验证身份证号是否正确
- CloudStack管理员文档 - 虚拟机
- Zabbix的分布式监控部署
- 困境中的帮助者与被助者
- 450g带盖吐司配方_450g带盖吐司烤多久
- 车联网大数据框架_大数据基础:ORM框架入门简介
- 安装Redis常见问题
- citrix+netscaler配置第一次培训
- 【LINUX系列】之字符串搜索命令
- UIViewController的生命周期
- Git:git如何拉取指定分支到本地
- 字体的样式设置和字体分类
- 在ubuntu中使用visual studio code对C/C++文件调试
- 斯坦福大学公开课:iOS 7应用开发
- 域名投毒,DNS污染,域名欺骗,其实就是域名污染。
- 前端面试题 ~ 移动端注意
- 笔记整理之 寒门难出贵子5 宝宝在魔都陨落
- Chrome浏览器使用指南
- 前端JS导出Excel表格 可筛选列 table2excel
- 编辑为什么建议转投_编辑建议转投其他期刊一般有哪些原因
热门文章
- [vue 进阶] 关于dicts字典的用法
- OpenGL ES之glEnable和glDisable函数
- html使用手机默认字体,开发移动端H5的时候,字体该不该随着手机系统字体的调整而变化?...
- 2022年商标注册需要多长时间?
- 关于信息检索评价TREC:session track 的说明
- 未曾清贫难成人,不经打击老天真
- linux dprintk 日志,linux命令备忘
- 云筑网认证_大师为你详解云筑网怎样注册账号
- Ubuntu18.04 安装配置桌面便签 Indicator Stickynotes
- Java实现 LeetCode 174 地下城游戏