Aspose.Pdf:为什么汉字“被淘汰”?

时间:2014-02-18 23:50:09

标签: c# asp.net-mvc pdf aspose chinese-locale

我正在使用名为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文档中被“消除”。

任何人都可以帮我吗?

2 个答案:

答案 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还不够。

有了上述内容,西里尔语和波兰语都可以,但日语仍然是空白。不过,这对我来说已经足够了。也许它也适合某人。

相关问题