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的区别: HTTPS与HTTP有什么不同? HTTP是过去很长一段时间我们经常用到的一种传输协议。HTTP协议传输的数据都是未加密的,这就意味着用户填写的密码、账号、交易记录等机密信息都是明文,随时…...
【2种方法,jmeter用一个正则提取器提取多个值!】
jmeter中,用json提取器,一次提取多个值,这个很多人都会。但是,用正则提取器一次提取多个,是否可以呢? 肯定,很多人都自信满满的说,可以!形如:token":&q…...
012-堆,结构体
012-堆,结构体 堆空间的申请和释放 堆空间特点? 栈空间的特点是,自动申请自动释放 堆空间由用户自己主动申请,主动释放 利用函数malloc进行堆空间的申请 利用函数free进行堆空间使用完毕后的释放 问题: 局部变量的存储空间在栈区; 全局变量的存储空…...
GDAL C++ API 学习之路 OGRGeometry 多边形类 OGRPolygon
OGRPolygon class OGRPolygon 是 OGR 几何图形库中的一个类,用于表示多边形的几何图形。它是一种封闭的多边形,由一个或多个外环(OGRLinearRing)和零个或多个内环(OGRLinearRing)组成。多边形是平…...
文件传输协议FTP与托管文件传输MFT有什么区别?
传输敏感数据是日常业务中不可或缺的一环。但是,在把敏感数据从A点搬到B点的过程中,保证该敏感数据的安全是组织的重要任务,因此最好选择一种能够确保文件安全的方案。 FTP与MFT有什么不同? FTP(文件传输协议…...
js实现按照句号将一段文本进行分段
/*** 将给定的文本按照300字并且按照句号分为多个p标签** param text 给定的文本* returns 返回分割后的多个p标签的数组*/ function splitTextByParagraph(text) {// 将文本按照句号分割成多个句子const sentences text.split(。);// 初始化一个空数组来存储生成的p标签const…...
环形链表的进一步探究
茕茕白兔,东走西顾,衣不如新,人不如故 往期回顾: 数据结构——双向链表 数据结构——单链表 数据结构——顺序表 文章目录 如何判断一个链表是否为环形链表 环形链表的判断的深入探究 例1:沸羊羊追美羊羊 例…...
flink任务性能优化
1、使用异步算子,异步执行操作 2、将下游数据需要的数据以参数的形式向下传递 3、当服务器资源有限的情况下,慎用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是一个框架,用于开发由LLM驱动的应用程序。可以简单认为是LLM领域的Spring,以及开源版的ChatGPT插件系统。核心的2个功能为: 1)可以将 LLM 模型与外部数据源进行连接。 2)允许与 LLM 模…...
字节跳动测试岗,3面都过了,HR告诉我这个原因被刷了...
说在前面 面试时最好不要虚报工资。本来字节跳动是很想去的,几轮面试也通过了,最后没offer,自己只想到下面几个原因: 虚报工资,比实际高30%; 有更好的人选,这个可能性不大,我看还在…...
Android 14重要更新预览
Android 14重要更新预览 国际化 Android 14 在 Android 13 的基础上进一步扩展了按应用设定语言功能,提供了一些额外的功能: 自动生成应用的 localeConfig:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以…...
快速上手字符串函数
文章目录 前言一、求字符串的长度strlen函数strlen函数学习使用strlen函数模拟实现strlen函数模拟实现方法1:计数器法strlen函数模拟实现方法2:指针减指针法strlen函数模拟实现方法3:递归方法 二、字符串的拷贝,拼接和比较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命令,启动nginx容器。 --name,设置容器名。为方便记忆ÿ…...
SpringBoot 整合 Minio
官网: MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议,项目地址是 https://github.com/minio/minio 。 它适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、…...
《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇
1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考。 2.实际工作场景 2.1问题场景 (1)已发布线上…...
探索 GPTCache|GPT-4 将开启多模态 AI 时代,GPTCache + Milvus 带来省钱秘籍
世界正处于数字化的浪潮中,为了更好理解和分析大量数据,人们对于人工智能(AI)解决方案的需求呈爆炸式增长。 此前,OpenAI 推出基于 GPT-3.5 模型的智能对话机器人 ChatGPT,在自然语言处理(NLP&a…...
纯css实现登录表单动效
效果图: 代码展示 // 我这边用的是elementUI表单校验,更改的样式。 <el-form:model"form":rules"rules"ref"fromList":hide-required-asterisk"true"><el-form-item prop"account"><…...
【css】外边距margin
外边距中有一个属性值比较有意思:inherit 值,继承父类的属性。 <!DOCTYPE html> <html> <head> <style> div {border: 1px solid red;margin-left: 100px; }p.ex1 {margin-left: inherit; } </style> </head> <…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
