打印word模板并预览打印
功能需求描述:word文件中有动态数据,需要将动态数据的word文件在jsp或HTML页面预览,最后进行打印、
总体实现过程 制作模板----动态生成word模板文件----word文件转为pdf-----页面使用iframe嵌套预览pdf
详细实现:1、制作模板文件。打开word文件,先以${test}形式替换文件中每一个需要动态加载的数据:如图(如果word文件是.docx的打开后先另存为word2003版本的.doc格式,方便后续操作),根据自己的需求设定好模板格式,最后打印预览打印都是以此格式展示的。
2、替换完成后,将文件另存为xml文件,再将.xml直接修改文件后缀为.ftl格式的标准模板文件,至此模板文件制做完成
3、framemaker加载模板这一步很重要
package com.xwr.app.utils.print;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class DocumentHandler {private Configuration configuration = null; public DocumentHandler() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } public void createDoc(HttpServletRequest request,Map<String,Object> dataMap,String fileName) throws Exception { //dataMap 要填入模本的数据文件 //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载, //这里我的ftl模板是放在WebRoot中的template文件夹中configuration.setServletContextForTemplateLoading(request.getSession().getServletContext(), "/template");System.out.println(this.getClass());//configuration.setServletContextForTemplateLoading(ServletActionContext.getServletContext(),"\template");Template t=null; try { //lzyjhf.ftl为要装载的模板 t = configuration.getTemplate("lzyjhf.ftl"); } catch (IOException e) { e.printStackTrace(); } //输出文档路径及名称 File outFile = new File(fileName); Writer out = null; FileOutputStream fos=null; try { fos = new FileOutputStream(outFile); OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8"); //这个地方对流的编码不可或缺,使用main()单独调用时,应该可以,但是如果是web请求导出时导出后word文档就会打不开,并且包XML文件错误。主要是编码格式不正确,无法解析。 //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); out = new BufferedWriter(oWriter); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { t.process(dataMap, out); out.close(); fos.close(); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //System.out.println("---------------------------"); }
}
4、word转为pdf
package com.xwr.app.utils.print;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;public class Doc2Pdf {public static boolean getLicense() {boolean result = false;try {InputStream is = Main.class.getClassLoader().getResourceAsStream("/license.xml"); // license.xml我放在src下License aposeLic = new License();aposeLic.setLicense(is);result = true;} catch (Exception e) {e.printStackTrace();}return result;}public static void doc2pdf(String Address) {if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生return;}try {long old = System.currentTimeMillis();File file = new File("E:/pdf1.pdf"); //新建一个空白pdf文档FileOutputStream os = new FileOutputStream(file);Document doc = new Document(Address); //Address是将要被转化的word文档doc.save(os, SaveFormat.PDF);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换long now = System.currentTimeMillis();System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时} catch (Exception e) {e.printStackTrace();}}
}
5、以上代码测试类
package com.xwr.app.utils.print;import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.spire.doc.Document;
import com.spire.doc.FileFormat;public class Main {/** * @param args * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException { HttpServletRequest request = null; Map<String, Object> dataMap = new HashMap<String, Object>(); dataMap.put("deptswj", "AAAAA"); dataMap.put("year", "BBBBB"); dataMap.put("num", "17"); dataMap.put("deptname", "人事处"); dataMap.put("username", "CCCCC"); dataMap.put("kssj", "2020年10月11日"); dataMap.put("jssj", "2020年12月13日"); dataMap.put("username", "小明"); dataMap.put("lzyjnr", "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试"); dataMap.put("deptswj", "DDDD"); dataMap.put("zfsj", "2020年12月13日"); DocumentHandler mdoc = new DocumentHandler (); try {mdoc.createDoc(request,dataMap, "E:/20201219.doc");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} //加载word示例文档Document document = new Document();document.loadFromFile("E:/20201219.doc");//保存结果文件document.saveToFile("E:/20201219111.pdf", FileFormat.PDF);}
}
6、相关jar包和license文件请在我的资源中下载
打印word模板并预览打印相关推荐
- Android通过系统打印功能实现PDF预览打印
一. 简介 Android4.4(KitKat,api-19)系统内置了打印框架,通过安装对应打印机的打印插件,就可以容易实现打印功能: 关于 图片.webview.layout及截屏相关的打 ...
- java pdf预览打印_Android实现PDF预览打印功能
最近在做一个项目,需要用到android手机连接打印机进行打印的功能,目前在网上找到的教程介绍的都是蓝牙连接热敏打印机(pos机大小的打印机)和蓝牙打印机,如果连接日常所见到的网络打印机,进行打印,很 ...
- 用友T6软件设置打印模板后预览没有变化-用友T6
设置打印模板后预览没有变化 原因分析:操作员在进行打印预览时如果在预览界面选择"保存当前设置",此时会在C盘下生成一个XML格式的文件,无论如何修改单据打印模板,预览调取的都是保存 ...
- HTML生成PDF、web打印动态分页、预览。内容满了,自动换页、移动端兼容 bookjs-eazy
WEB打印,HTML转PDF工具.bookjs-eazy 仓库地址: GITEE | GITHUB 主要解决,HTML生成PDF,分页可控的问题 依赖js库:polyfill.jquery.lodas ...
- 基于http请求web打印组件,实现浏览器、移动端、服务端无预览打印
打印功能在项目开发中比较常用,尤其是工业级应用十分广泛,且无预览打印,而因浏览器安全机制,无法直接实现无预览打印,根据项目需求,做了一个打印的插件,可以实现无预览打印,且模板调整十分便捷 环境:Bar ...
- jeecg实现无预览打印
jatoolprint官网地址:收费版:http://print.jatools.com/ 免费版: http://printfree.jatools.com/ 代码结构如下: 打印效果如下(因为免 ...
- php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...
JavaScript 实现打印,打印预览,打印设置 WebBrowser是IE内置的浏览器控件,无需用户下载. 一.WebBrowser控件 二.WebBrowder控件的方法 //打印 WebBro ...
- 不同的电脑打印预览不同怎么解决_条码打印软件中标签预览正常打印无反应怎么解决...
在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决. 一.预览正常情况下,打印没反应 (1)在条码打印软件中设计好 ...
- 谷歌浏览器打印不弹出预览直接打印机打印
谷歌浏览器打印不弹出预览直接打印机打印 注意 --kiosk-printing前面有个空格 这个浏览器还是会弹出自带打印页,不过会马上消失的
- Vue PDF文件预览打印vue-pdf
Vue PDF文件预览vue-pdf 最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件,G ...
最新文章
- Swift-跳转到tableView指定位置
- linux ftp服务器搭建及用户的分配,Linux搭建FTP服务器
- 为 Hyper-V 配置外部网络
- python二维列表排序_使用Python按顺时针方向排序二维坐标列表?
- excel中自动填充到最后一行
- Asp.Net MVC中使用ACE模板之Jqgrid
- c#下如何生成安装程序
- 中国替代运动器材市场趋势报告、技术动态创新及市场预测
- 帝国网站管理系统(ECMS)电影模块在IE下不能使用的解决办法
- dbstart $oracle_home,使用dbstart和dbshut命令启动和关闭数据库
- heidisql与 MySQL区别,heidisql怎么使用 MySQL可视化工具heidisql安装使用教程
- Linux之zlog的学习
- 学习笔记之DNS配置(视图,日志,动态DNS)
- 开源: CVPR 2020 修复你的老照片
- 华为Vo5G技术GC方式下引入G
- 草料二维码-免费的二维码生成工具
- 如何设置Foxmail收取yahoo.com.cn和yahoo.cn以及yahoo.com等邮箱的方法
- validation--数据校验
- 最新高频Java面试题目分享,分布式ID(数据库多主模式
- JSP JSTL标签