首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aspose.Pdf:为什么汉字会被“删掉”?

Aspose.Pdf:为什么汉字会被“删掉”?
EN

Stack Overflow用户
提问于 2014-02-18 23:50:08
回答 2查看 2.9K关注 0票数 1

我正在使用一个名为Aspose.Pdf的PDF生成库。我喜欢这个图书馆,但是我很难让汉字在PDF中显示出来。我使用以下代码在C#.NET MVC中生成PDF:

代码语言:javascript
复制
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变量中的值是:

代码语言:javascript
复制
<!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文档中,这些值正在被“删除”。

有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-19 18:48:42

这是一个非常具体的问题,所以我甚至不确定我会得到什么回应。但是,我当时很绝望,所以无论如何都会伸出援手。:)

无论如何,我坚持了下来,并设法找到了解决这个问题的方法。我通过将我的C#更改为以下内容来修正它:

代码语言:javascript
复制
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);
票数 4
EN

Stack Overflow用户

发布于 2016-02-04 11:02:39

我也遇到了类似的问题,但情况却大不相同。

我不使用BindHTML和HTML,而是使用XML输入:

代码语言:javascript
复制
var pdf = new Aspose.Pdf.Generator.Pdf();
pdf.BindXML(thexml);
pdf.Save(fullFilePath);

其中,thexml包含关于如何生成PDF对象的冗长而复杂的描述。一直以来,阿斯波斯PDF XML规范,所有的工作。除非某些内部文本或内部html数据包含非拉丁字符。

我试着用Cyrillics,日语和波兰的例子--在前两个“特殊”字符中,所有的特殊字符都表示为空格,而在波兰语中,所有特殊字符都被强制使用最近的拉丁字符(ć->c,Ł->L等等)。

顺便说一句。我使用Aspose.PDF v9.6.0.0

在这个问题/答案的帮助下,我能够让在某种程度上使用

代码语言:javascript
复制
var pdf = new Aspose.Pdf.Generator.Pdf();
pdf.TextInfo.IsUnicode = true;
pdf.SetUnicode();
pdf.BindXML(thexml);
pdf.Save(fullFilePath);

你介绍的其他设置似乎没有改变任何事情。而且,奇怪的是,我不得不设置两次IsUnicode,正如您所看到的。SetUnicode是不够的。

以上所述,西里尔语和波兰语都可以,但日语仍然是空白。不过,这对我来说已经足够了。也许它也会为某人带来好的回报。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21868057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档