2014-02-18 65 views
1

我正在使用名为Aspose.Pdf的PDF生成库。我喜欢这个图书馆,但是我遇到了一个问题,那就是让中文字符在PDF中出现。我使用下面的代码来生成C#.NET MVC的PDF:Aspose.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文档中的值正在“空白”。

任何人都可以帮助我吗?

回答

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); 
2

我有类似的问题,但设置有很多不同。
我没有使用BindHTML和HTML数据,而不是说,我使用XML输入:

var pdf = new Aspose.Pdf.Generator.Pdf(); 
pdf.BindXML(thexml); 
pdf.Save(fullFilePath); 

其中thexml包含如何应生成PDF对象一个漫长而复杂的描述。一直Aspose PDF XML规范,一切正常。除了某些内部文本或内部html数据包含非拉丁字符时。

我尝试过使用西里尔文,日文和波兰文的例子 - 前两个中的所有'特殊'字符都被渲染为空格,波兰文中所有特殊字符都被强制为最接近的拉丁字符(ć-> c,Ł-> L等)。

Btw。我用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还不够。

以上所述,西里尔文和波兰文都可以,但日文仍然是空白的。尽管如此,这对我来说已经足够了。也许它也会为别人分好。

相关问题