itext html标签生成pdf,使用ITextRenderer从HTML生成pdf文件时编码问题

我正在尝试使用包含非拉丁字符的ITextRenderer生成pdf文档。就我而言,这里是保加利亚语。

在调用ITextRenderer之前,我有一个String内容,在某些进程之后(比如使用tidy解析)看起来就像那样(我能通过调试看到这个值)

刺痛内容:

td class="description">Вид на потока

td class="description">Статус на потока

以上只是我的String的一部分。此内容包含有效的html语法。我只是把它的一小部分放在这里来澄清,直到这一部分,我的编码是正确的,因为我能够阅读保加利亚字符。

之后,会出现以下代码,用于创建文档,将其放入itextrenderer并生成pdf文件。由于我能够成功生成英语语言的pdf文件,因此该代码已经经过测试并正常工作用于lating characters的内容。

当我使用非拉丁字符切换其他语言(保加利亚语)时出现问题。生成的PDF忽略所有保加利亚字符,最终结果是带有大量空行的pdf。这是生成pdf的代码的一部分

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setValidating(false);

dbf.setNamespaceAware(false);

dbf.setFeature("http://xml.org/sax/features/namespaces", false);

dbf.setFeature("http://xml.org/sax/features/validation", false);

dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);

dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

DocumentBuilder builder = dbf.newDocumentBuilder();

Document doc = builder.parse(new ByteArrayInputStream(content.getBytes("UTF-8")));

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

InputStream is = null;

ITextRenderer renderer = new ITextRenderer();

renderer.getFontResolver().addFont("fonts/TIMES.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

renderer.getFontResolver().addFont("fonts/TIMESBD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

renderer.getFontResolver().addFont("fonts/TIMESBI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

renderer.getFontResolver().addFont("fonts/TIMESI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

renderer.setDocument(doc, null);

renderer.layout();

renderer.createPDF(outputStream);

outputStream.close();

byte[] outputBytes = outputStream.toByteArray();

is = new ByteArrayInputStream(outputBytes);

response.setContentType("application");

response.addHeader("Content-Disposition", "attachment; filename=\"" + "exported.pdf" + "\"");

response.setContentLength(outputBytes.length);

response.getOutputStream().write(inputStreamToBytes(is));

我尝试了几件事(主要与编码有关),但不幸的是我还没有找到解决方案。可能我错过了一些明显的东西:)

我不确定这是否会增加任何值,但我使用spring并且此代码在Controller中运行

任何帮助将不胜感激。

Thanx

Thymeleaf核心原理与Spring Boot集成实战:从Web渲染到PDF生成 模板引擎是现代Web开发中分离视图与业务逻辑的核心组件,它通过预定义的语法将动态数据与静态模板结合,生成最终的HTML输出。其工作原理通常包括模板解析、数据绑定和渲染输出三个阶段。在Java生态中,Thymeleaf凭借其‘自然模板’设计哲学脱颖而出,它允许模板文件本身就是合法的HTML,可直接在浏览器预览,极大地优化了前后端协作流程。这一特性不仅提升了Web页面开发效率,更使其技术价值延伸至动态内容生成的广阔领域,例如合同、报表等格式化文档的自动化生产。结合Spring Boot的自动配置能力,Thyme 阅读详情

相关推荐

Thymeleaf模板引擎:从核心语法到Spring Boot集成与PDF生成实战

模板引擎是现代Web开发中分离视图与业务逻辑的关键技术,它通过特定的语法规则将动态数据嵌入静态模板,实现页面的动态渲染。其核心原理在于解析模板中的占位符或指令,并用服务器端的数据进行替换,最终生成可响应的HTML。这项技术的价值在于提升开发效率、保证代码可维护性,并促进前后端协作。在Java生态中,模板引擎广泛应用于MVC架构的视图层,特别是在Spring Boot构建的Web应用中。本文聚焦Thymeleaf这一“自然模板”引擎,它允许模板文件作为合法的HTML被浏览器直接预览,同通过丰富的表达式语法(

weixin_33694620的博客 366

java 使用ITextRendererhtml模块生成pdf文件工具类

java 使用ITextRendererhtml模块生成pdf文件工具类,可直接下载测试。

使用ITextRenderer的简单示例

使用ITextRenderer的简单示例

u013558123的博客 1830

itext导出pdf不显示中文 ITextRenderer不显示中文

itext导出pdf不显示中文 ITextRenderer不显示中文,终极解决方案!!!绝对能解决!!!

ITextRenderer 生成PDF 文件

pom.xml 文件添加相关依赖: <!--htmlpdf --> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf</artifactId> <version&g...

zhouzhiwengang的专栏 1万+

iTextRenderer(Flying Saucer) HTMLPDF

iTextRenderer 在依赖 iText 的基础上,单独实现了HTML渲染PDF,基本上能实现 CSS 2.1的整体性,并且完全符合 W3C 规范。 使用html和css定义样式和呈现的内容。如下流程图:                    中文支持 首先需要添加中文字库,也就是你的页面中用到的所有字体: ITextFontResolver fontR...

ankg83749的博客 2110

使用itexthtml转为pdf文件,利用itexthtml转为pdf(示例代码)

亲测代码没有问题,需要注意细节已经标注;需要jar包:iText-2.0.8.jar;core-renderer-R8.jar;import com.lowagie.text.pdf.BaseFont;import org.xhtmlrenderer.pdf.ITextFontResolver;import org.xhtmlrenderer.pdf.ITextRenderer;import ja...

weixin_39530437的博客 433

c 将html转换为pdf,利用itexthtml转为pdf

亲测代码没有问题,需要注意细节已经标注;需要jar包:iText-2.0.8.jar;core-renderer-R8.jar;import com.lowagie.text.pdf.BaseFont;import org.xhtmlrenderer.pdf.ITextFontResolver;import org.xhtmlrenderer.pdf.ITextRenderer;import ja...

weixin_31100517的博客 440

freemarker导出PDF,简单的

freemarker导出PDF,简单的 1.新建一个html文件 pdf-template.html,如图: 2.html写你需要导出的样式: 这里是示范一个简单的: 同样需要一个list标签, 这里的变量要与后台的一致 3.工具类(我这里只是简单的String导出pdf,日期图片未处理): 这里工具类借鉴: https://blog.csdn.net/weixin_39806100/article/details/86616041 /** * 通过模板导出pdf文件 * @pa

sunrj_niu的博客 3083

网页生成PDF

为什么80%的码农都做不了架构师?>>> ...

weixin_34414196的博客 429

解决iText+flying saucer+freemark导出pdf不支持base64的解决办法

新增一个类: public class B64ImgReplacedElementFactory implements ReplacedElementFactory { /** * 实现createReplacedElement 替换html中的Img标签 * * @param c 上下文 * @param box 盒子 * @param uac 回调

山茶果 2338

富文本内容包含图片转为pdf

富文本内容(包含图片)转为pdf格式–本人亲测有效 1. 先用把富文本内容填到html模板里面 查看此文章[添加链接描述] 2.把html文件转换为pdf (1). 添加依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.9&

weixin_45912556的博客 1624

利用itexthtml转为pdf

亲测代码没有问题,需要注意细节已经标注;需要jar包:iText-2.0.8.jar;core-renderer-R8.jar; core-renderer-R8.jar下载地址:http://central.maven.org/maven2/org/xhtmlrenderer/core-renderer/R8/core-renderer-R8.jar iText-2.0.8.jar下载地址:...

weixin_30821731的博客 277

解决iText2.0.8+freemark导出pdf不支持base64的解决办法

转换工具类 public class B64ImgReplacedElementFactory implements ReplacedElementFactory { /** * 实现createReplacedElement 替换html中的Img标签 * * @param c 上下文 * @param box...

weixin_30521649的博客 354

ITextRendererPDF转换为HTML详细教程

前端的html正常写就可以了,需要注意的就是样式里面的@page定义PDF样式的和@font-face引入字体以及每个html标签必须有结束符。ip地址加端口号加对应路径,列如本地http://localhost:81/admin/asset/top/png。解决方案:在html中所有结束符都要加上</..>结束,例如<img></img>、<meta></meta>后端通过一下代码引入。前端通过以下代码引入。

m0_59465624的博客 1780

ITextRenderer导出pdf不显示中文

ITextRenderer 中文不显示

weixin_42943586的博客 1547

ITextRendererhtml文件转为PDF

maven依赖: <!--pdf--> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>core-renderer</artifactId> &...

SELECT_BIN的博客 7294

ITextRenderer将多个页面导在同一pdf分页处理

遇到需求把多个fremaker模板导出到同一个pdf中,中间设置分页;参考ITextRenderer将多个页面导在一个pdf中_Kyle_Ping的博客-CSDN博客我这里是同一个模板导出得,可以多个不同模板只需要多次把模板获取放在循环中处理。这个作为笔记记录问题

qq_25486753的博客 1007
上一篇: html中点重置和提交没反应,为什么点击按钮没反应??
下一篇: html怎么转换成xmind,怎么把html导入XMind
weixin_39934613
博客等级 码龄9年 40粉丝 143原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值