来自iTextrenderer创建的pdf中缺少的html内容

时间:2014-08-07 09:32:25

标签: java html pdf itext flying-saucer

我正在尝试从一个有中文字符的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, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

html2pdf: content missing

我尝试了很多,看错了什么但找不到解决办法。 你们中的任何人都可以帮我解决这个问题吗? TIA!

3 个答案:

答案 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;有时工作(我尝试在符号之后添加空格,或。),但有时当没有符号时它仍会溢出。