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

ITextRenderer将PDF转换为HTML详细教程

引入依赖

   <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.18</version></dependency>

 问题一:输出中文字体

下载字体simsun.ttc

下载链接:simsun.ttc · xiulian/fonts - Gitee.com

前端通过以下代码引入

@Font-face{
font-family:"myFont",
src:url("下载的字体的路径")
}

 后端通过一下代码引入

ClassPathResource resource=new ClassPathResource("assets/font/simsun.ttc");
font.addFont(resource.getUrl.toString(),Base.IDENTITY_H,BaseFont.EMBDDED)

问题二:设置页面大小以及页面间距 

@Page{
size:A4;
margin:0
}

问题三:报错<link>没有以</link>结束

解决方案:在html中所有结束符都要加上</..>结束,例如<img></img>、<meta></meta>

问题四:图片和二维码不显示

ip地址加端口号加对应路径,列如本地http://localhost:81/admin/asset/top/png

总代码

前端

前端的html正常写就可以了,需要注意的就是样式里面的@page定义PDF样式的和@font-face引入字体以及每个html标签必须有结束符

后端

@GetMapping()
public String exportPage(){
Ticket detail=ticketService.detail();
model.addAttribute("map",detail);
return "ticket/index";
}
public void export(TicketParam param){
//二维吗生成
String code="图片路径";
File file=FileUtil.file(code);
if(!file.exists()){
FileUtil.mkParentDirs(file);
}
}
QRCodeUtil.generate("字符串",100,100,file);
//获取html
//通过okhttp访问上面的url地址获取html页面

 

相关文章:

ITextRenderer将PDF转换为HTML详细教程

引入依赖 <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.18</version></dependency> 问题一&#xff1a;输出中文字体 下载字体simsun.ttc 下载链接&am…...

c#设计模式-行为型模式 之 备忘录模式

&#x1f680;简介 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象。所谓备忘录模式就是在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象…...

ffmpeg+安卓+yolo+RK3399部署

一次满足多项需求. 首先, 思路是, 使用ffmpeg解码本地mp4文件, 在无需任何其他改动的情况下, 就可以直接播放rtsp流, 这个是使用ffmpeg的好处. ffmpeg本身是c语言的, 所以需要编译成jni的库, https://note.youdao.com/s/6XeYftc 具体过程在这里, 用windows/macOS, Ubuntu应该都…...

发电机教程:小白必学的柴油发电机技巧

柴油发电机监控是关键的能源管理和维护工具&#xff0c;它用于确保持续的电力供应&#xff0c;提高能源效率&#xff0c;并延长发电机的寿命。 随着科技的不断发展&#xff0c;监控系统变得更加智能和高效&#xff0c;使用户能够远程监测和管理柴油发电机的运行状态。 客户案例…...

基础课1——人工智能的分类和层次

1.人工智能的分类 人工智能&#xff08;AI&#xff09;的分类主要有以下几种&#xff1a; 弱人工智能&#xff08;Artificial Narrow Intelligence&#xff0c;ANI&#xff09;&#xff1a;弱人工智能是擅长于单个方面的人工智能&#xff0c;例如战胜象棋世界冠军的人工智能阿…...

C语言复杂表达式与指针高级

一、指针数组与数组指针 1.指针数组VS数组指针 &#xff08;1&#xff09;指针数组&#xff1a;实质是一个数组&#xff0c;因为这个数组中传参的内容全部是指针变量。 &#xff08;2&#xff09;数组指针&#xff1a;实质是一个指针&#xff0c;这个指针指向一个数组 2.分析指…...

【Python从入门到进阶】39、使用Selenium自动验证滑块登录

接上篇《38、selenium关于Chrome handless的基本使用》 上一篇我们介绍了selenium中有关Chrome的无头版浏览器Chrome Handless的使用。本篇我们使用selenium做一些常见的复杂验证功能&#xff0c;首先我们来讲解如何进行滑块自动验证的操作。 一、测试用例介绍 我们要通过sel…...

利用FPGA和CPLD数字逻辑实现模数转换器

数字系统的嵌入式工程师熟悉如何通过使用FPGA和CPLD在其印刷电路板上将各种处理器&#xff0c;存储器和标准功能组件粘合在一起来实现其数字设计的“剩余”。除了这些数字功能之外&#xff0c;FPGA和CPLD还可以使用LVDS输入&#xff0c;简单的电阻电容器&#xff08;RC&#xf…...

上海亚商投顾:沪指震荡调整跌 减肥药、华为概念股持续活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指上个交易日低开后震荡调整&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;宁德时代一度跌超3%&#xff…...

间歇性微服务问题...

在Kubernetes环境中&#xff0c;最近由于特定配置导致Pod调度失败。哪种 Kubernetes 资源类型&#xff08;通常与节点约束相关&#xff09;可能导致此故障&#xff0c;尤其是在未正确定义的情况下&#xff1f; 节点选择器资源配额优先级污点Pod 中断预算 已有 201 人回答了该…...

小程序开发平台源码系统+ 带前后端完整搭建教程

大家好&#xff0c;给大家分享一个小程序开发平台源码系统。这款小程序开发平台中有很多功能&#xff0c;今天主要来给大家介绍一下洗车行业小程序制作的功能。以下是部分核心代码图&#xff1a; 系统特色功能&#xff1a; LBS定位&#xff1a;小程序能够自动显示附近的共享洗…...

外部统一设置了::-webkit-scrollbar { display: none; }如何单独给特定元素开启滚动条设置样式-web页面滚动条样式设置

如果你在外部统一设置了​​::-webkit-scrollbar { display: none; }​​​来隐藏滚动条&#xff0c;但是想要在​​.lever​​元素中单独开启滚动条的样式&#xff0c;你可以使用CSS的级联选择器来覆盖外部样式。 以下是一个示例&#xff0c;展示如何给​​.lever​​单独开启…...

【计算机网络】网络原理

目录 1.网络的发展 2.协议 3.OSI七层网络模型 4.TCP/IP五层网络模型及作用 5.经典面试题 6.封装和分用 发送方(封装) 接收方(分用) 1.网络的发展 路由器&#xff1a;路由指的是最佳路径的选择。一般家用的是5个网口&#xff0c;1个WAN口4个LAN口(口&#xff1a;端口)。可…...

力扣第39题 组合总和 c++ 回溯剪枝题

题目 39. 组合总和 中等 相关标签 数组 回溯 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 cand…...

qt软件正常运行的崩溃了定位行号方法

软件&#xff08;debug版exe或者release版exe&#xff09;在正常运行状态下&#xff08;不是gdb调试运行&#xff09;&#xff0c;如果软件崩掉&#xff0c;那么会直接闪退&#xff0c;软件什么也做不了&#xff0c;此时无法保存软件中的状态信息&#xff0c;此外&#xff0c;也…...

软件工程与计算总结(十五)详细设计中面向对象方法下的信息隐藏

软件工程与计算总结&#xff08;十三&#xff09;详细设计中的模块化与信息隐藏 之前的博客中&#xff0c;模块需要隐藏的决策主要由“职责的实现”and“实现的变更”两类&#xff0c;在面向对象方法中&#xff0c;需要做到的就是&#xff1a; 封装类的职责&#xff0c;隐藏职…...

鸿蒙初体验

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…...

hive复合类型的数据查询

hive数据表创建-CSDN博客 --第一个名字以M开头的 访问数组array 数组&#xff08; array) 引用方式 列名 [ 元素索引 _ 以 0 开始 ] select * from emp where emp_name[0] rlike "^M"; -- 出生日期是在 5 几年 访问 Map map 引用方式 列名 ["Key"] selec…...

Notes/Domino 14 Early Access Drop3发布

大家好&#xff0c;才是真的好。 其实上周&#xff0c;就是国庆假期的时候&#xff0c;HCL Notes/Domino 14 Early Access Drop3&#xff08;以下简称EA3&#xff09;就已经发布&#xff0c;而且和传说中的一样&#xff0c;带来了数项惊人的新特性。 我们先讲讲这一版本新特性…...

前端、后端开发者常用到的免费API整理

以下是我整理的前端、后端工程师在开发中经常使用到的API接口&#xff0c;希望能帮到大家~ 手机号码归属地&#xff1a;可根据手机号码查询其省市区、运营商区号行政区划代码等信息。 上亿条数据囊括最新的170、166、147等号段&#xff0c;更新及时、准确度高。空号检测&#…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...