当前位置: 首页 > news >正文

HTML模板生成word,pdf文档

1.获取html模板

public static void main(String[] args) {String htmlContent = getHtmlFileContent(templateName,dataMap);String exportType = "pdf";if (exportType.equals("pdf")){convertToPdf(htmlContent,filePath);}else {exportWord(htmlContent, filePath);}
}public static String getHtmlFileContent(String templateName, Map<String, Object> contentMap) {String htmlText = null;try {Configuration configuration = new Configuration();TemplateLoader templateLoader = new ClassTemplateLoader(PdfUtil.class, "/static/html/");configuration.setTemplateLoader(templateLoader);Template tpl = configuration.getTemplate(templateName);//解析模板并替换动态数据,最终content将替换模板文件中的${content}标签。htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, contentMap);} catch (Exception e) {e.printStackTrace();}return htmlText;
}

保存文件为word

	import com.itextpdf.html2pdf.ConverterProperties;import com.itextpdf.html2pdf.HtmlConverter;import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;import com.itextpdf.kernel.geom.PageSize;import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.font.FontProvider;import com.itextpdf.text.pdf.BaseFont;import freemarker.cache.ClassTemplateLoader;import freemarker.cache.TemplateLoader;import freemarker.template.Configuration;import freemarker.template.Template;import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;import org.xhtmlrenderer.pdf.ITextRenderer;import java.io.*;import java.util.HashMap;import java.util.Locale;import java.util.Map;/*** 保存文件为word*/public static void exportWord(String content, String filePath) throws Exception {byte[] b = content.getBytes("GBK"); //这里是必须要设置编码的,不然导出中文就会乱码。ByteArrayInputStream bais = new ByteArrayInputStream(b);//将字节数组包装到流中POIFSFileSystem poifs = new POIFSFileSystem();DirectoryEntry directory = poifs.getRoot();DocumentEntry documentEntry = directory.createDocument("WordDocument", bais); //该步骤不可省略,否则会出现乱码。//输出文件File file = new File(filePath);FileOutputStream ostream = new FileOutputStream(file);poifs.writeFilesystem(ostream);bais.close();ostream.close();poifs.close();}

保存为pdf文档

	import com.itextpdf.html2pdf.ConverterProperties;import com.itextpdf.html2pdf.HtmlConverter;import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;import com.itextpdf.kernel.geom.PageSize;import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.font.FontProvider;import com.itextpdf.text.pdf.BaseFont;import freemarker.cache.ClassTemplateLoader;import freemarker.cache.TemplateLoader;import freemarker.template.Configuration;import freemarker.template.Template;import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;import org.xhtmlrenderer.pdf.ITextRenderer;import java.io.*;import java.util.HashMap;import java.util.Locale;import java.util.Map;public static void convertToPdf(String html,String pdfPath){// 中文和英文的格式//String pdfPath = "D:\\cumentPdf.pdf";File file = new File(pdfPath);try(OutputStream outputStream = new FileOutputStream(file)) {// 转换 HTML to PDFPdfWriter writer = new PdfWriter(outputStream);PdfDocument pdfDocument = new PdfDocument(writer);// 设置PDF大小pdfDocument.setDefaultPageSize(PageSize.A3);// 设置中文ConverterProperties converterProperties = new ConverterProperties();FontProvider fontProvider = new DefaultFontProvider(true, true, true);converterProperties.setFontProvider(fontProvider);// html转换PDFHtmlConverter.convertToPdf(html, pdfDocument, converterProperties);// 关闭pdfDocument.close();} catch (Exception e){e.fillInStackTrace();}}

2. pdf 转 excel

下载jar地址:https://mvnrepository.com/artifact/e-iceblue/spire.pdf/9.7.0

 <dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf</artifactId><version>9.7.0</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/spire.pdf-9.7.0.jar</systemPath>
</dependency>
  import com.spire.pdf.FileFormat;import com.spire.pdf.PdfDocument;public static void pdfToExcel(String pdfPath,String excelPath){//创建PdfDocument实例PdfDocument pdf = new PdfDocument();//加载PDF文档pdf.loadFromFile(pdfPath);//保存为Excelpdf.saveToFile(excelPath, FileFormat.XLSX);}

使用excel生成html模板


<dependency><groupId>e-iceblue</groupId><artifactId>spire.xls.free</artifactId><version>5.1.0</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/spire.xls.free.5.1.0.jar</systemPath>
</dependency>package com.suninfo.analyse.test;import org.springframework.web.bind.annotation.*;
import com.spire.xls.*;public class ExcelToPdfOrHtml {public static void main(String[] args) {//读取excel文件地址String fileUrl = "D:\\CA_HOME\\upload\\杭州-2023-06-28 16-38-45.xlsx";//要转换的sheet页名称String sheetName = "Sheet1";Workbook wb = new Workbook();wb.loadFromFile(fileUrl);if(wb==null){throw new RuntimeException("文件不存在,请检查文件路径");}Worksheet worksheet = wb.getWorksheets().get(sheetName);PageSetup pageSetup = worksheet.getPageSetup();pageSetup.setPaperSize(PaperSizeType.PaperA4);pageSetup.setPrintArea("A1:J21");pageSetup.setZoom(80);if(worksheet==null){throw new RuntimeException("工作簿中不存在"+sheetName+"工作表,请检查");}//pdf存放路径String url = "D:\\CA_HOME\\upload\\excelToPdf1.pdf";//saveToPdf 如果该路径原本存在,直接生成文件,如果路径不存在,自动创建文件夹生成该路径
//        worksheet.saveToPdf(url);worksheet.saveToHtml( "D:\\CA_HOME\\upload\\orgHtmlTemplate.html");}}

相关文章:

HTML模板生成word,pdf文档

1.获取html模板 public static void main(String[] args) {String htmlContent getHtmlFileContent(templateName,dataMap);String exportType "pdf";if (exportType.equals("pdf")){convertToPdf(htmlContent,filePath);}else {exportWord(htmlContent…...

ssl单向证书和双向证书校验测试及搭建流程

零、前提准备 首先了解下HTTP和HTTPS的区别&#xff1a; HTTPS与HTTP有什么不同&#xff1f; HTTP是过去很长一段时间我们经常用到的一种传输协议。HTTP协议传输的数据都是未加密的&#xff0c;这就意味着用户填写的密码、账号、交易记录等机密信息都是明文&#xff0c;随时…...

【2种方法,jmeter用一个正则提取器提取多个值!】

jmeter中&#xff0c;用json提取器&#xff0c;一次提取多个值&#xff0c;这个很多人都会。但是&#xff0c;用正则提取器一次提取多个&#xff0c;是否可以呢&#xff1f; 肯定&#xff0c;很多人都自信满满的说&#xff0c;可以&#xff01;形如&#xff1a;token":&q…...

012-堆,结构体

012-堆,结构体 堆空间的申请和释放 堆空间特点? ​ 栈空间的特点是,自动申请自动释放 ​ 堆空间由用户自己主动申请,主动释放 ​ 利用函数malloc进行堆空间的申请 ​ 利用函数free进行堆空间使用完毕后的释放 问题: ​ 局部变量的存储空间在栈区; ​ 全局变量的存储空…...

GDAL C++ API 学习之路 OGRGeometry 多边形类 OGRPolygon

OGRPolygon class OGRPolygon 是 OGR 几何图形库中的一个类&#xff0c;用于表示多边形的几何图形。它是一种封闭的多边形&#xff0c;由一个或多个外环&#xff08;OGRLinearRing&#xff09;和零个或多个内环&#xff08;OGRLinearRing&#xff09;组成。多边形是平…...

文件传输协议FTP与托管文件传输MFT有什么区别?

传输敏感数据是日常业务中不可或缺的一环。但是&#xff0c;在把敏感数据从A点搬到B点的过程中&#xff0c;保证该敏感数据的安全是组织的重要任务&#xff0c;因此最好选择一种能够确保文件安全的方案。 FTP与MFT有什么不同&#xff1f; FTP&#xff08;文件传输协议&#xf…...

js实现按照句号将一段文本进行分段

/*** 将给定的文本按照300字并且按照句号分为多个p标签** param text 给定的文本* returns 返回分割后的多个p标签的数组*/ function splitTextByParagraph(text) {// 将文本按照句号分割成多个句子const sentences text.split(。);// 初始化一个空数组来存储生成的p标签const…...

环形链表的进一步探究

茕茕白兔&#xff0c;东走西顾&#xff0c;衣不如新&#xff0c;人不如故 往期回顾&#xff1a; 数据结构——双向链表 数据结构——单链表 数据结构——顺序表 文章目录 如何判断一个链表是否为环形链表 环形链表的判断的深入探究 例1&#xff1a;沸羊羊追美羊羊 例…...

flink任务性能优化

1、使用异步算子&#xff0c;异步执行操作 2、将下游数据需要的数据以参数的形式向下传递 3、当服务器资源有限的情况下&#xff0c;慎用RocksDBStateBackend RocksDBStateBackend performance will be poor because of the current Flink memory configuration! RocksDB wi…...

vue2 el-carousel轮播图和文字一起改变

vue项目的话 安装一下element依赖 npm i element-ui -S在main入口文件引入element包 我在app文件里边去写的 <template><div class"w"><el-carousel height"460px"><el-carousel-item v-for"item in items" :key"i…...

LangChain:打造自己的LLM应用 | 京东云技术团队

1、LangChain是什么 LangChain是一个框架&#xff0c;用于开发由LLM驱动的应用程序。可以简单认为是LLM领域的Spring&#xff0c;以及开源版的ChatGPT插件系统。核心的2个功能为&#xff1a; 1&#xff09;可以将 LLM 模型与外部数据源进行连接。 2&#xff09;允许与 LLM 模…...

字节跳动测试岗,3面都过了,HR告诉我这个原因被刷了...

说在前面 面试时最好不要虚报工资。本来字节跳动是很想去的&#xff0c;几轮面试也通过了&#xff0c;最后没offer&#xff0c;自己只想到下面几个原因&#xff1a; 虚报工资&#xff0c;比实际高30%&#xff1b; 有更好的人选&#xff0c;这个可能性不大&#xff0c;我看还在…...

Android 14重要更新预览

Android 14重要更新预览 国际化 Android 14 在 Android 13 的基础上进一步扩展了按应用设定语言功能&#xff0c;提供了一些额外的功能&#xff1a; 自动生成应用的 localeConfig&#xff1a;从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始&#xff0c;您可以…...

快速上手字符串函数

文章目录 前言一、求字符串的长度strlen函数strlen函数学习使用strlen函数模拟实现strlen函数模拟实现方法1&#xff1a;计数器法strlen函数模拟实现方法2&#xff1a;指针减指针法strlen函数模拟实现方法3&#xff1a;递归方法 二、字符串的拷贝&#xff0c;拼接和比较strcpy函…...

linux(centos) docker 安装 nginx

​1、拉取nginx最新版本镜像 docker pull nginx:latest 查看镜像 docker images 或者 docker images -a 2.启动nginx容器 docker run -d -p 80:80 --name nginx nginx 使用docker run命令&#xff0c;启动nginx容器。 --name&#xff0c;设置容器名。为方便记忆&#xff…...

SpringBoot 整合 Minio

官网&#xff1a; MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议&#xff0c;项目地址是 https://github.com/minio/minio 。 它适合存储海量的非结构化的数据&#xff0c;例如说图片、音频、视频等常见文件&#xff0c;备份数据、…...

《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇

1.简介 在开发或者测试的过程中&#xff0c;由于项目环境比较多&#xff0c;往往需要来来回回地反复切换&#xff0c;那么如何优雅地切换呢&#xff1f;宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考。 2.实际工作场景 2.1问题场景 &#xff08;1&#xff09;已发布线上…...

探索 GPTCache|GPT-4 将开启多模态 AI 时代,GPTCache + Milvus 带来省钱秘籍

世界正处于数字化的浪潮中&#xff0c;为了更好理解和分析大量数据&#xff0c;人们对于人工智能&#xff08;AI&#xff09;解决方案的需求呈爆炸式增长。 此前&#xff0c;OpenAI 推出基于 GPT-3.5 模型的智能对话机器人 ChatGPT&#xff0c;在自然语言处理&#xff08;NLP&a…...

纯css实现登录表单动效

效果图&#xff1a; 代码展示 // 我这边用的是elementUI表单校验&#xff0c;更改的样式。 <el-form:model"form":rules"rules"ref"fromList":hide-required-asterisk"true"><el-form-item prop"account"><…...

【css】外边距margin

外边距中有一个属性值比较有意思&#xff1a;inherit 值&#xff0c;继承父类的属性。 <!DOCTYPE html> <html> <head> <style> div {border: 1px solid red;margin-left: 100px; }p.ex1 {margin-left: inherit; } </style> </head> <…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...