我正在尝试从一个有中文字符的html创建pdf。 在这我有一个奇怪的概率。 来自html的具有中文字符的行未完全显示在从其生成的pdf中。
以下是我的HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1?DTD/transitional.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>some title.</title>
<style type="text/css">
.name
{
font-family: "Arial Unicode MS";
color:red;
margin-left: 5px;
margin-right: 5px
}
</style>
</head>
<body>
<b class="name">
LLTRN,DEBIT,,,6841,FXW,,CNY,PAY,C,,,,DD,,ord par nm,,,,,,,CN,百威英博雪津(三明)啤酒有限公司,,,,,,,CN,20140617,,CNY,647438.24,OUR,,,,,,,,SHANGHAI,CN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
<br>
RDF,FTX,TEXT
<br>
</b>
<br>
</body></html>
下面是我的itext渲染器代码:
StringWriter writer = new StringWriter();
Tidy tidy = new Tidy();
tidy.setTidyMark(false);
tidy.setDocType("omit");
tidy.setXHTML(true);
tidy.setInputEncoding("utf-8");
tidy.setOutputEncoding("utf-8");
//tidy.parse(new StringReader(documentJsoup.toString()), writer);
tidy.parse(new StringReader(inputFileString), writer);
writer.close();
String pdfContent = writer.toString();
// Creating an instance of iText renderer which will be used to generate the pdf from the html document.
ITextRenderer renderer = new ITextRenderer();
/*renderer.setDocument(doc, baseurl);
renderer.layout();
renderer.createPDF(os);
os.flush();
// close all the streams
//fis.close();
//os.close();
//instream.close();
*/
ITextFontResolver resolver = renderer.getFontResolver();
//renderer.getFontResolver().addFont("C:\\Windows\\Fonts\\arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
resolver.addFont("C:\\Windows\\Fonts\\arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.setDocumentFromString(pdfContent);
renderer.layout();
renderer.createPDF(os);
因为我使用了字体解析器并添加了字体,所以显示了中文字符....但pdf显示缺少内容....该行的最后字符(即:“AI”来自“shanghai”和下一个“,CN, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
我尝试了很多,看错了什么但找不到解决办法。 你们中的任何人都可以帮我解决这个问题吗? TIA!
答案 0 :(得分:1)
问题是飞碟不管理中文文本中的换行。它只在空格上插入换行符。在你的情况下,这意味着它不能在“nm ,,,,”之后插入换行符,并且它不适合该行。
这是飞碟中的一个已知错误(见here),但不太可能很快修复。
唯一的解决方法是在中文字符后面的字符串中的任何位置插入空格。它将使所有文本可见。
答案 1 :(得分:0)
您需要在应用程序中添加字体类型或字体文件。
您可以在此处找到代码itextSharp - html to pdf some turkish characters are missing
这个问题也和你的问题一样..
如果这对你有帮助,那么请给点。
答案 2 :(得分:0)
我尝试将下面的css规则添加到body类中,它运行得很好。
word-wrap: break-word; word-break: break-all;
&#34;添加空格&#34;有时工作(我尝试在符号之后添加空格,或。),但有时当没有符号时它仍会溢出。