gpt4 book ai didi

java - 使用 ITextRenderer 从具有非拉丁字符的 HTML 生成 PDF 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:15 25 4
gpt4 key购买 nike

这是我调查的第 2 天,但没有结果。至少现在,我可以问一些非常具体的问题。

我正在尝试使用 iText 在 PDF 文件中编写包含一些非拉丁字符的有效 HTML 代码更具体地说,使用来自 Flying SaucerITextRenderer .

我的简短示例/代码首先使用此值初始化字符串变量 doc:

String doc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\">"
+ "<body>Some greek characters: Καλημέρα Some greek characters"
+ "</body></html>";

这是我用于调试目的的代码。我将这个字符串保存到 HTML 文件,然后通过浏览器打开它,只是为了仔细检查 HTML 内容是否有效,我仍然可以阅读希腊字符:

//write for debugging purposes in an html file
File newTextFile = new File("C:/work/test.html");
FileWriter fw = new FileWriter(newTextFile);
fw.write(doc);
fw.close();

下一步是尝试将此值写入 PDF 文件。这是我的代码:

ITextRenderer renderer = new ITextRenderer();
//add some fonts - if paths are not right, an exception will be thrown
renderer.getFontResolver().addFont("c:/work/fonts/TIMES.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESBD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESBI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);


final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
documentBuilderFactory.setValidating(false);
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
builder.setEntityResolver(FSEntityResolver.instance());
org.w3c.dom.Document document = builder.parse(new ByteArrayInputStream(
doc.toString().getBytes("UTF-8")));

renderer.setDocument(document, null);
renderer.layout();
renderer.createPDF(os);

我的代码的最终结果是:

在 HTML 文件中 我得到:一些希腊字符:καλημέρα 一些希腊字符(预期)

在 PDF 文件中 我得到:一些希腊字符:一些希腊字符(意外 - 希腊字符被忽略!!)

依赖关系:

  • Java 版本“1.6.0_27”

  • itext-2.0.8.jar

  • de.huxhorn.lilith.3rdparty.flyingsaucer.core-renderer-8Pre2.jar

我也尝试过更多的字体,但我想我的问题与使用错误的字体无关。我们非常欢迎任何帮助。

谢谢

最佳答案

我来自捷克共和国,对我们的国家符号也有同样的问题!经过一番搜索,我设法用 this solution 解决了它.

特别是(你已经拥有的):

renderer
.getFontResolver()
.addFont(fonts.get(i).getFile().getPath(),
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);

然后是 CSS 中的重要部分:

* {
font-family: Verdana;
/* font-family: Times New Roman; - alternative. Without ""! */
}

在我看来,没有那个 css,你的字体就不会被使用。当我从 CSS 中删除这些行时,编码再次被破坏。

希望这会有所帮助!

关于java - 使用 ITextRenderer 从具有非拉丁字符的 HTML 生成 PDF 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com