struts2 + freemark + itext 导出pdf(基于模板方式)

2024-05-26 13:18

本文主要是介绍struts2 + freemark + itext 导出pdf(基于模板方式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

生成静态页面方法:

private void statHtml(Product product){try{//初始化FreeMarker配置//创建一个Configuration实例cfg = new Configuration();cfg.setDirectoryForTemplateLoading(new File(ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/")+"jsp\\product"));cfg.setEncoding(Locale.getDefault(), "utf-8");//创建模版对象Template t = cfg.getTemplate("look.html");t.setEncoding("utf-8");//生成静态String path = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/")+"jsp\\product";//在模版上执行插值操作,并输出到制定的输出流中File fileName = new File(path + "\\look1.html");Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "utf-8"));t.process(product, out);out.flush();out.close();}catch(Exception e){e.printStackTrace();}}导出pdf:public String downPdf() throws Exception{ITextRenderer renderer = new ITextRenderer();if(id > 0 && !"".equals(id)){product = productService.modProduct(id);statHtml(product);}String dest = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/")+"jsp\\product";String outputFile =dest+"\\"+ "报告" + ".pdf"; //定义输出文件全名File outFile = new File(outputFile);if (!outFile.exists()) {outFile.getParentFile().mkdirs();}OutputStream os = new FileOutputStream(outputFile);String path = dest+"\\look1.html";String url = new File(path).toURI().toURL().toString();// 解决中文支持问题ITextFontResolver fontResolver = renderer.getFontResolver();fontResolver.addFont(dest +"\\arialuni.ttf", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);renderer.setDocument(url);renderer.layout();renderer.createPDF(os);os.flush();os.close();return SUCCESS;}private InputStream pdfStream;   private String pdfName;   给出get,set方法


xml配置:

<action name="downPdf" class="com.mobile.action.product.ProductAction" method="downPdf"><result name="success" type="stream"><param name="contentType">application/pdf; charset=gb2312</param><param name="inputName">pdfStream</param><param name="contentDisposition">attachment; filename="${pdfName}"</param><param name="bufferSize">4096</param></result></action>

html 模板:

<!DOCTYPE html>
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta><style type="text/css">@page {size: A4 landscape;}h1{font-size:16px;text-align:center}table{width:100%;border-collapse:collapse;table-layout:fixed}table th,table td{border:1px solid gray;text-align:center;font-size:12px;padding:3px;font-weight:normal}table.signature td{border:0}p,ul li{line-height:1.5em}span.hl{color:red}#report-item-notes{list-style:none}#report-item-notes ol{list-style:none}</style></head><body style="font-family:'Arial Unicode MS'"> 必须加这个样式,style 样式要写在 head 里面<h1>产品信息</h1><table><tbody><tr><th>产品名称:</th><th>产品价格:</th></tr><tr><td>${productName}</td><td>${productPrice}</td></tr></tbody></table></body>
</html>


这篇关于struts2 + freemark + itext 导出pdf(基于模板方式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004568

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的