ITextRenderer 生成PDF 文件

2023-10-27

pom.xml 文件添加相关依赖:

        <!--html 转 pdf -->
		<dependency>
			<groupId>org.xhtmlrenderer</groupId>
			<artifactId>flying-saucer-pdf</artifactId>
			<version>9.0.7</version>
		</dependency>

核心功能代码片段一:

html 转pdf 文件写入指定pdf 文件中:
	    ITextRenderer renderer = new ITextRenderer();
	    ITextFontResolver fontResolver = renderer.getFontResolver();
	    try {
	    	//设置字体,否则不支持中文,在html中使用字体,html{ font-family: SimSun;}
		fontResolver.addFont("thymeleaf/font/SIMSUNB.TTF", 						BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
	    } catch (IOException e) {
		logger.error(e.getMessage());
	    }
	    // 文档渲染document对象,字符串类型<html></html>
	    renderer.setDocumentFromString(html);
	    renderer.layout();
	    // 生成文件写入指定pdf 文件中。
	    renderer.createPDF(new FileOutputStream(new File("C://pdf//1.pdf")));

核心功能代码片段二:

html 转pdf 文件, 通过response 输出pdf 文件流:
                   // response 响应参数设置
                   response.setContentType("application/pdf;charset=utf-8");
	   response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("单位工程总目		录.pdf", "UTF8"));
	  response.setHeader("FileName", URLEncoder.encode("单位工程总目录.pdf", "UTF8"));
	  ServletOutputStream servletOutputStream =  response.getOutputStream();
	  
                  ITextRenderer renderer = new ITextRenderer();
	  ITextFontResolver fontResolver = renderer.getFontResolver();
	  try {
	    	//设置字体,否则不支持中文,在html中使用字体,html{ font-family: SimSun;}
		fontResolver.addFont("thymeleaf/font/SIMSUNB.TTF", 									BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
	    } catch (IOException e) {
		logger.error(e.getMessage());
	    }
	    // 文档渲染document对象,字符串类型<html></html>
	    renderer.setDocumentFromString(html);
	    renderer.layout();
	    // 生成文件写入response 流中。
	    renderer.createPDF(servletOutputStream );
	    servletOutputStream .flush();
                    servletOutputStream .close();

问题思考:使用ITextRenderer 满足HTML格式的Document 文档对象转换为pdf 文件,存在的问题如下:

1、汉字无法正常显示问题,

2、doucument 文档对象中包含插入的图片、媒体等相关资源需要进一步转换。

3、页面样式问题。

等其他相关问题

解决思路:通过wkhtmltopdf 客户端实现html 文档对象转换为pdf 文件,可以完美避免上面所描述的问题。

java 后台生成pdf 文件的整体思路:

1、基于模板引擎(freemarker/thymeleaf),生成模板html 文件

2、基于wkhtmltopdf 将html 文件转换为pdf 文件。

相关的功能代码,将在下一篇文章详细讲解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ITextRenderer 生成PDF 文件 的相关文章

随机推荐

  • VMware centos7 Destination Host Unreachable

    现象 不管是ping网关还是外网都出现了 root rocketmqOS ping 192 168 23 2 PING 192 168 23 2 192 168 23 2 56 84 bytes of data From 192 168 2
  • jsp文件上传图片到服务器

    jsp文件上传图片到服务器 首先利用onchange去调用uploadBookImg函数 将图片上传到服务器 返回一个地址 将地址写入到一个隐藏域里面 提交表单的时候就可以将服务器返回的地址存入到数据库里面
  • 解决Django和Flask的跨域问题

    目录 2 1 概念 什么是同源 2 2 概念 什么是跨域请求 2 3 概念 浏览器的 同源策略 2 3 1 发生了跨域请求 浏览器在遵循 同源策略 下 处理流程如下 2 3 2 没有发生跨域请求的情况下浏览器会直接发送请求 如下图 3 解决
  • 使用obsidian的模板插件templater来自动化分类笔记记录

    在记笔记的过程中 不难发现为了笔记不那么凌乱 不得不去分类笔记以及为笔记打上元数据 这些步骤基本都是机械重复的 往往有时候只是想快速将内容记录下来 但是等到分类完 元数据写完 已经快要遗忘原本需要记录的内容 即使将这些步骤挪至最后完成 也显
  • TDengine安装使用

    引言 近期 听说了时序数据库TDengine 本人的好奇心又出来了 同是时序数据库的InfluxDB不也挺好的嘛 通过一些网上的资料以及些简单的实际操作 本人得出的结论是 数据量少时 InfluxDB的性能好些 当数据量越来越大之后 TDe
  • matlab 贝叶斯网络

    第一次搭建 参考教程https blog csdn net moodytong article details 8122327 我的matlab是2014a 系统win7旗舰 下面就开始一步一步来 一 matlab中添加FULLBNT FU
  • java 导出Excel设置宽度自适应

    private static void setAutoColumnWidth XSSFSheet sheet int maxColumnNum try 获取当前列的宽度 然后对比本列的长度 取最大值 for int columnNum 0
  • 卷积神经网络的实际应用,卷积神经网络毕业论文

    旷视首席科学家 知名AI学者孙剑博士去世 他在该领域有哪些贡献 旷视首席科学家 知名AI学者孙剑博士去世 他在该领域有哪些贡献 在学术层面 孙老师是计算机视觉领域全世界最知名 最顶级的一批科学家 他的工作ResNet 12w citatio
  • 西安华为OD面试经验(德科)

    背景 本科某双非邮电软件专业 二战冲985失败 随便写的简历挂boss上 hr电话联系帮我约的机考 华为od网络风评很差 这一点还是hr告诉我这个初入社会的学生党的 态度挺诚恳 我也只是本着随便试试的态度去的 机考是5 7号 技术一面是5
  • SSC 扩频时钟技术(1)

    SSC 全称Spread Spectrum Clocking 即扩频时钟 由于信号的辐射主要是由于信号的能量过于集中在其载波频率位置 导致信号的能量在某一频点位置处的产生过大的辐射发射 因此为了进一步有效的降低EMI辐射 芯片厂家在设计芯片
  • 通过 window.opener.document 获取弹窗弹窗或打开页面中的数据并回显

    通过 window opener document 获取弹窗弹窗或打开页面中的数据并回显 1 html 示例 写法 td td
  • tcp客户/服务器回射程序之五-----用shutdown函数解决在批量方式下所引起的问题

    tcp客户 服务器回射程序之五 用shutdown函数解决在批量方式下所引起的问题 当我们把标准输出和标准输入重定向到文件来运行新的客户程序时 却发现输出文件总是小于输入文件 而对于回射服务器而言 它们应该相等 问题的起因在于我们对于EOF
  • python十个实战项目

    python项目练习一 即时标记 python项目练习二 画幅好画 python项目练习三 万能的XML python项目练习四 新闻聚合 python项目练习五 虚拟茶话会 python项目练习六 使用CGI进行远程编辑 python项目
  • 目标检测算法之YOLOv2损失函数详解

    前言 前面的YOLOv2推文详细讲解了YOLOv2的算法原理 但官方论文没有像YOLOv1那样提供YOLOv2的损失函数 难怪Ng说YOLO是目标检测中最难懂的算法 今天我们尝试结合DarkNet的源码来分析YOLOv2的损失函数 关键点回
  • 终于辞职了,全职ue了

    终于辞职了 然后 这几天睡得特别香 拿到了ue的offer 两万五 从年前开始 其实本来不想辞职 毕竟还是疫情 工作不好找 一年半简历也不好看 但是最终还是走了这一步 外因 1 全员降薪到80 士气打击的厉害 我觉得是不是自己飘了 以自己的
  • 搭建harbor私有镜像仓库

    一 环境准备 1 关闭防火墙 systemctl stop firewalld 禁止防火墙开机自起 systemctl disable firewalld 2 关闭selinux 永久关闭 sed i s enforcing disable
  • 简述Java中的基本数据类型

    本文主要向大家介绍一下Java中的8种基本数据类型 以及数据类型之间的转换 希望对大家学习Java语言有所帮助 一 数据类型的分类 一 基本数据类型 8种 注意 在Java中 所有数据类型都有默认值 定义之后没有赋值 就会有默认值 且默认值
  • 计算机心理活动,计算机科学系关于心理活动的总结

    计算机科学系关于心理活动总结 一 活动概况 时间 10月22 23 25 29 30日 11月5 6 12日 地点 新区湖畔绿地或老区西操场 人员 商丘师院10级新生以及各系心理委员组长 二 活动目的 1 通过游戏等活动的形式带给同学们人生
  • matlab中的符号表达式的使用

    定义了一个表达式 如 y sin x 如何让matlab知道x是自变量 y是因变量 并且y x0 这种格式合法 求出x x0时候的值 三种方法 1 用inline函数 格式 FunctionName inline 任何有效的表达式 表达式中
  • ITextRenderer 生成PDF 文件

    pom xml 文件添加相关依赖