我正在使用名为Aspose.Pdf的PDF生成库。我喜欢这个图书馆,但是我遇到了一个让中文字符显示在PDF中的问题。我使用以下代码在C#.NET MVC中生成PDF:
var pdf = new Aspose.Pdf.Generator.Pdf();
pdf.IsLandscape = true;
pdf.HtmlInfo.CharsetApplyingLevelOfForce = Aspose.Pdf.Generator.HtmlInfo.CharsetApplyingForceLevel.EnforceUseAlways;
pdf.HtmlInfo.CharSet = "UTF-8";
pdf.HtmlInfo.BadHtmlHandlingStrategy = Aspose.Pdf.Generator.BadHtmlHandlingStrategy.TreatAsPlainText;
pdf.BindHTML(htmlString);
pdf.SetUnicode();
pdf.Save(fullFilePath);
htmlString变量中的值是:
<!DOCTYPE html>
<html>
<body style="font-family: 'Arial Unicode MS',Arial,sans-serif; ">
<center><h3>Corrective Action Plans PDF</h3></center>
<table style="padding: 5px; font-size: 8pt; border: 1px solid #000000;" cellpadding="5">
<tr style="border: 1px solid #000000;" bgcolor="#4D94FF">
<th style="border: 1px solid #000000;" width="11%">
ID
</th>
<th style="border: 1px solid #000000;" width="11%">
Status
</th>
<th style="border: 1px solid #000000;" width="11%">
审计类型
</th>
<th style="border: 1px solid #000000;" width="11%">
审核表格
</th>
<th style="border: 1px solid #000000;" width="11%">
Category
</th>
<th style="border: 1px solid #000000;" width="11%">
问题
</th>
<th style="border: 1px solid #000000;" width="11%">
Location ID
</th>
<th style="border: 1px solid #000000;" width="11%">
Location
</th>
<th style="border: 1px solid #000000;" width="11%">
Start Date
</th>
</tr>
<tr style="border: 1px solid #000000;" bgcolor="#CCCCCC">
<td style="border: 1px solid #000000;" width="11%">
1260
</td>
<td style="border: 1px solid #000000;" width="11%">
New
</td>
<td style="border: 1px solid #000000;" width="11%">
CAM Forms
</td>
<td style="border: 1px solid #000000;" width="11%">
CAM Form 4 - All Action Plan Options
</td>
<td style="border: 1px solid #000000;" width="11%">
CAM4: Use Action Plan
</td>
<td style="border: 1px solid #000000;" width="11%">
Droplist Non-Compliant
</td>
<td style="border: 1px solid #000000;" width="11%">
017
</td>
<td style="border: 1px solid #000000;" width="11%">
ANGLETON
</td>
<td style="border: 1px solid #000000;" width="11%">
2014/2/13 14:00:00
</td>
</tr>
</table>
</body>
</html>
如您所见,HTML标记中有中文字符,位于表格的标题行中。但是,这些值在生成的PDF文档中被“消除”。
任何人都可以帮我吗?
答案 0 :(得分:4)
这是一个非常具体的问题,所以我不确定我是否会对此做出回应。但是,我是绝望的,所以无论如何都伸出了手。 :)
无论如何,我推进并设法找到解决方案。我通过将C#更改为以下内容来修复它:
var pdf = new Aspose.Pdf.Generator.Pdf();
pdf.IsLandscape = true;
Aspose.Pdf.Generator.Section section = pdf.Sections.Add();
Aspose.Pdf.Generator.Text text = new Aspose.Pdf.Generator.Text(section, htmlString);
text.IsHtmlTagSupported = true;
text.IsHtml5Supported = true;
text.TextInfo.FontName = "Arial Unicode MS";
text.IfHtmlTagSupportedOverwriteHtmlFontNames = true;
section.Paragraphs.Add(text);
pdf.SetUnicode();
pdf.Save(fullFilePath);
答案 1 :(得分:2)
我有类似的问题,但设置有很多不同。
我没有使用BindHTML和HTML数据,而是使用XML输入:
var pdf = new Aspose.Pdf.Generator.Pdf();
pdf.BindXML(thexml);
pdf.Save(fullFilePath);
其中thexml
包含有关如何生成PDF对象的冗长而复杂的描述。一直以来Aspose PDF XML规范都在运行。除了某些内部文本或内部html数据包含非拉丁字符时。
我试过西里尔语,日语和波兰语的例子 - 前两个中的所有“特殊”字符都被渲染为空格,在波兰语中,所有特殊字符都被强制转换为最接近的拉丁字符(ć-&gt; c,Ł-&gt; ; L等等。
顺便说一下。我使用Aspose.PDF v9.6.0.0
在这个问题/答案的帮助下,我能够有点使用:
var pdf = new Aspose.Pdf.Generator.Pdf();
pdf.TextInfo.IsUnicode = true;
pdf.SetUnicode();
pdf.BindXML(thexml);
pdf.Save(fullFilePath);
您提供的其他设置似乎没有任何改变。此外,我很奇怪我必须按照你的看法设置两次IsUnicode。 SetUnicode
还不够。
有了上述内容,西里尔语和波兰语都可以,但日语仍然是空白。不过,这对我来说已经足够了。也许它也适合某人。