无法在 itext htmltopdf 转换中呈现中文或韩文字符

发布于 2025-01-21 01:03:19 字数 2615 浏览 3 评论 0原文

我有一个带有中文或韩国角色的HTML字符串。我想使用itextpdf.html2pdf将HTML转换为PDF,但是转换后,我无法在PDF文件中看到中文或韩国字符。

以下是代码段:

RestTemplate rTemplate = new RestTemplate();
HttpMessageConverter<String> sMessageConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
List<HttpMessageConverter<?>> httpMessageConverter = Lists.newArrayList();
httpMessageConverter.add(sMessageConverter);
rTemplate.setMessageConverters(httpMessageConverter);
String d = rTemplate.getForObject(url, String.class);
org.jsoup.nodes.Document document = Jsoup.parse(d, "utf-8");
ByteArrayOutputStream outputArray = new ByteArrayOutputStream();
HtmlConverter.convertToPdf(document.html(), outputArray);
return outputArray.toByteArray();

示例HTML内容:

<html> 
 <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 </head> 
 <body> 
  <p><span style="font-size:12.0pt; font-family:MS Mincho">長空</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Broken Sword),</span> <span style="font-size:12.0pt; font-family:MS Mincho">秦王殘劍</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Flying Snow),</span> <span style="font-size:12.0pt; font-family:MS Mincho">飛雪</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Moon), </span> <span style="font-size:12.0pt; font-family:MS Mincho">如月</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(the King), and</span> <span style="font-size:12.0pt; font-family:MS Mincho">秦王</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Sky).</span></p> 
  <p style="font-size: 12.0pt; font-family:Batang">빈집</p> 
  <p>Test</p>  
 </body>
</html>

PDF输出:

我已经读到,我们需要将字体嵌入到PDF中,以使Unicode字符显示在PDF上。

我尝试使用:

BaseFont bff = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Font f = FontFactory.getFont(AsianFontMapper.ChineseSimplifiedFont, AsianFontMapper.ChineseTraditionalEncoding_H, BaseFont.NOT_EMBEDDED);

但是我不允许我添加com.lowagie.text font对象到com.itextpdf.layout.font fontselector,我也看到了一个testpdf package font-亚洲,但不确定如何在我的代码库中使用。

有人可以建议解决方案吗?或者如果我缺少代码中的某些内容。

I have a HTML String with Chinese or Korean characters. I want to convert the HTML to PDF using itextpdf.html2pdf, but after conversion I am not able to see Chinese or Korean characters in pdf file.

Below is the code snippet:

RestTemplate rTemplate = new RestTemplate();
HttpMessageConverter<String> sMessageConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
List<HttpMessageConverter<?>> httpMessageConverter = Lists.newArrayList();
httpMessageConverter.add(sMessageConverter);
rTemplate.setMessageConverters(httpMessageConverter);
String d = rTemplate.getForObject(url, String.class);
org.jsoup.nodes.Document document = Jsoup.parse(d, "utf-8");
ByteArrayOutputStream outputArray = new ByteArrayOutputStream();
HtmlConverter.convertToPdf(document.html(), outputArray);
return outputArray.toByteArray();

Sample HTML content:

<html> 
 <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 </head> 
 <body> 
  <p><span style="font-size:12.0pt; font-family:MS Mincho">長空</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Broken Sword),</span> <span style="font-size:12.0pt; font-family:MS Mincho">秦王殘劍</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Flying Snow),</span> <span style="font-size:12.0pt; font-family:MS Mincho">飛雪</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Moon), </span> <span style="font-size:12.0pt; font-family:MS Mincho">如月</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(the King), and</span> <span style="font-size:12.0pt; font-family:MS Mincho">秦王</span> <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Sky).</span></p> 
  <p style="font-size: 12.0pt; font-family:Batang">빈집</p> 
  <p>Test</p>  
 </body>
</html>

Pdf output:
enter image description here

I have read that we need to embed the FONT to the PDF to get the Unicode characters to show up on PDF.

I tried using:

BaseFont bff = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Font f = FontFactory.getFont(AsianFontMapper.ChineseSimplifiedFont, AsianFontMapper.ChineseTraditionalEncoding_H, BaseFont.NOT_EMBEDDED);

But it's not allow me to add com.lowagie.text Font object into com.itextpdf.layout.font FontSelector, also I saw one testpdf package font-asian but not sure how to use in my code base.

Can someone please suggest the solution. Or if I am missing something in my code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

久隐师 2025-01-28 01:03:19

你正在混合两种不同的东西。 BaseFont 类不能在 iText 7 中使用,因为它是不同版本的 iText 的一部分,并且与 pdfHTML iText 7 不兼容。为了在 pdfHTML 中正确使用或设置字体,您需要在 pdfHTML 中使用 FontProvider 类。请参考iText的知识库链接https://kb.itextpdf.com/home/it7kb/ebooks/itext-7-converting-html-to-pdf-with-pdfhtml/chapter-6-using-fonts-in-pdfhtml这解释了 pdfHTML 中字体的工作原理以及要使用的代码。

public static final String FONT = "src/main/resources/fonts/cardo/Cardo- 
Regular.ttf";
public void createPdf(String src, String font, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider();
FontProgram fontProgram = FontProgramFactory.createFont(FONT);
fontProvider.addFont(fontProgram);
properties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(new File(src), new File(dest), properties);

}

You are mixing two different things. BaseFont class cannot be used in iText 7 because it is a part of different version of iText and it's not compatible with pdfHTML iText 7. In order to use or set the fonts correctly in pdfHTML, you need to make the use of FontProvider class in pdfHTML. Please refer to the knowledge base link of iText https://kb.itextpdf.com/home/it7kb/ebooks/itext-7-converting-html-to-pdf-with-pdfhtml/chapter-6-using-fonts-in-pdfhtml that explains how fonts works in pdfHTML and what code to be used.

public static final String FONT = "src/main/resources/fonts/cardo/Cardo- 
Regular.ttf";
public void createPdf(String src, String font, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider();
FontProgram fontProgram = FontProgramFactory.createFont(FONT);
fontProvider.addFont(fontProgram);
properties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(new File(src), new File(dest), properties);

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文