2014-02-18 7 views
1

Я использую библиотеку генерации PDF под названием Aspose.Pdf. Мне нравится эта библиотека, но у меня возникла проблема с появлением китайских иероглифов в формате PDF. Я использую следующий код для генерации PDF в C# .NET MVC: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 и т. Д.).

КПП. Я использую 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 было недостаточно.

С вышеуказанным, кириллица и польский в порядке, но японский язык по-прежнему пуст. Тем не менее, этого пока достаточно. Может быть, это тоже будет хорошо для кого-то.