这是我调查的第二天没有结果。至少现在,我可以问一些非常具体的问题。
我正在尝试使用iText编写一个有效的 HTML 代码,该代码在 PDF 文件中包含一些非拉丁字符,更具体地说,使用来自Flying Saucer的ITextRenderer。
我的简短示例/代码首先使用此值初始化字符串变量 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
我也尝试过更多的字体,但我想我的问题与使用错误的字体无关。任何帮助都非常受欢迎。
谢谢