尝试使用iText将越南文文档导出为PDF时遇到问题。我将越南语单词放在.xml文件中,像这样
<td fontfamily="Helvetica" fontstyle="0" fontsize="9" align="0" colspan="48" lineoccupied="1">T\u1ED5 ch\u1EE9c tham gia</td>
然后让Java从xml文件中获取短语,然后使用以下方法将其转换为Unicode:
public String convertToUnicode(String s) {
int i = 0, len = s.length();
char c;
StringBuffer sb = new StringBuffer(len);
try {
while (i < len) {
c = s.charAt(i++);
if (c == '\\') {
if (i < len) {
c = s.charAt(i++);
if (c == 'u') {
if (Character.digit(s.charAt(i), 16) != -1
&& Character.digit(s.charAt(i + 1), 16) != -1
&& Character.digit(s.charAt(i + 2), 16) != -1
&& Character.digit(s.charAt(i + 3), 16) != -1) {
if (s.substring(i).length() >= 4) {
c = (char) Integer.parseInt(s.substring(i, i + 4), 16);
i += 4;
} else {
sb.append('\\');
}
} else {
sb.append('\\');
}
} // add other cases here as desired...
}
} // fall through: \ escapes itself, quotes any character but u
sb.append(c);
}
} catch (Exception e) {
System.out.println("Error Generate PDF :: " + e.getStackTrace().toString());
return s;
}
return sb.toString();
}
之后,将String导出为PDF-编码为UTF-8。但是程序无法显示越南语字符“ \ u1ED5”和“ \ u1EE9”。输出变为“ T chc tham
gia”。能否请您告诉我如何解决此问题?谢谢 :)
iText官方网站上有3个涉及亚洲语言的XML
Worker示例
。它们解析包含汉字的XHTML文件,但是应该很容易将它们适应越南语示例。
您可以在此处找到要解析的HTML文件:
这两个文件都包含以下文本:
长空(断剑),秦王残剑(Flying Snow),飞雪(Moon),如月(King)和秦王(Sky)。
在第一种情况下,使用CSS定义字体:
<span style="font-size:12.0pt; font-family:MS Mincho">長空</span>
在第二种情况下,未定义特定字体:
<body><p>長空 (Broken Sword), 秦王殘劍 (Flying Snow), 飛雪 (Moon), 如月 (the King), and 秦王 (Sky).</p></body>
这些文件包含UTF-8字符,因此我们将像这样解析它们:
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
new FileInputStream(HTML), Charset.forName("UTF-8"));
您需要的第一件事是支持越南字符的字体。这是iText无法帮您的。在HTML文件中,您已经定义了Helvetica,但这是标准的Type1字体,使用iText时不会嵌入它,并且不知道如何绘制越南字形。那永远都行不通。
第一个示例D07_ParseHtmlAsian将自动搜索名为的字体MS Mincho
。如果找到该字体(例如,因为您msmincho.ttc
在Windows字体目录中,则该字体会显示在PDF中)。参见hero.pdf。如果找不到带有该名称的字体,则该字形将不可见,因为您没有为这些字形提供任何字体程序。
第二个示例D07bis_ParseHtmlAsian提供了一种解决方法,以防您MS Mincho
无处不在。在这种情况下,您必须使用XMLWorkerFontProvider
并注册一个可以代替的字体MS Mincho
。例如:我们使用存储在文件中的字体cfmingeb.ttf
并分配别名MS Mincho
:
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("resources/fonts/cfmingeb.ttf", "MS Mincho");
生成的文件asian.pdf与我们期望的略有不同,但是现在我们至少可以看到中文字形。
在第三个示例中,HTML文件没有告诉我们有关需要使用的字体的任何信息。我们将使用CSS定义字体,如下所示:
CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream("body {font-family:tsc fming s tt}".getBytes()));
cssResolver.addCss(cssFile);
现在,正文中的所有文本将使用TSC FMing S TT字体(存储在文件中cfmingeb.ttf
)。您可以在生成的PDF
asian2.pdf中看到差异。
问题内容: 我想通过iText将Swing JComponent打印到pdf。 不幸的是,PDF文件中未显示任何内容。你知道如何解决这个问题吗? 问题答案: 我已经弄清楚添加addNotify和验证帮助。
当尝试使用将文件转换为文件时,会出现以下异常: RuntimeException:Scanline必须以EOL代码字开头。在com.itextpdf.text.pdf.codec.tifffaxdecoder.readeol(tifffaxdecoder.java:1303),在com.itextpdf.text.pdf.codec.tifffaxdecoder.decode2d(tifffaxd
问题内容: 在熊猫中为数据框生成PDF的有效方法是什么? 问题答案: 一种方法是使用markdown。您可以使用。这会将数据框转换为html表。从那里,您可以将生成的html放入markdown文件(.md)(请参阅http://daringfireball.net/projects/markdown/basics)。从那里开始,有一些实用程序可以将markdown转换为pdf(https://w
问题内容: 我的表格格式 我在网上找到了以下代码。但是,如果我使用“ thead”和“ tbody”标签,那是行不通的 问题答案: 您在Internet上找到的解决方案无法正常工作的原因是因为线路开始。该变量只有两个元素,是和。该行正在寻找内的所有元素是。你能做的最好的事情就是给一个id你和然后抓住所有基于该值。说您有: 然后对标记执行相同的操作 编辑:我也强烈建议使用jQuery。它将缩短为:
谢谢你的帮助。。。 在将html表格标签/片段(我已转换为字符串)转换为PDF文档时... 我能够使用此技术成功地将css样式应用于PDF文档。。。 但是,我没有成功地使用现有的css文件(即,使用CssFile对象)将css应用于PDF文档,如下所示。。。 。。。我一直无法让这个工作,不知道是什么问题。。。我正在。。。 如何正确使用CssFile和CssResolver将css样式——即从现有的
我想用iText将带有图像的html文件转换成pdf格式。我在这里提供我的消息来源。 请帮助我如何使用iText将带有图像的html文件转换为pdf格式。如果没有图像或者硬编码图像路径,我可以转换html文件。提前致谢