2

When i am trying to generate the PDF using HTML text that contains some Emoji icon throws an error ?

Here is my sample input HTML:

<html>
<body>
   <span style='font-size:12.0pt;font-family:"Segoe UI Emoji",sans-serif'>&#128522;</span>
</body>
</html>

Here is my code fragment:

PdfSharp.Pdf.PdfDocument pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(
                BodyHTMLText
                , new TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerateConfig()
                {
                    PageSize = PdfSharp.PageSize.Letter,
                    //PageOrientation = PdfSharp.PageOrientation.Landscape,
                    MarginBottom = 20,
                    MarginLeft = 20,
                    MarginRight = 20,
                    MarginTop = 20
                    //,ManualPageSize
                },
                null,
                null,
                null
                );

            ////pdf.AddPage()
            pdf.Save(SavedFilePath);

Here is the output error i got:

Additional information: Value was either too large or too small for a character.

at System.Convert.ToChar(Int64 value)
   at TheArtOfDev.HtmlRenderer.Core.Utils.HtmlUtils.DecodeHtmlCharByCode(String str) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Utils\HtmlUtils.cs:line 374
   at TheArtOfDev.HtmlRenderer.Core.Utils.HtmlUtils.DecodeHtml(String str) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Utils\HtmlUtils.cs:line 322
   at TheArtOfDev.HtmlRenderer.Core.Dom.CssBox.ParseToWords() in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Dom\CssBox.cs:line 526
   at TheArtOfDev.HtmlRenderer.Core.Parse.DomParser.CorrectTextBoxes(CssBox box) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Parse\DomParser.cs:line 596
   at TheArtOfDev.HtmlRenderer.Core.Parse.DomParser.CorrectTextBoxes(CssBox box) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Parse\DomParser.cs:line 607
   at TheArtOfDev.HtmlRenderer.Core.Parse.DomParser.CorrectTextBoxes(CssBox box) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Parse\DomParser.cs:line 607
   at TheArtOfDev.HtmlRenderer.Core.Parse.DomParser.CorrectTextBoxes(CssBox box) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Parse\DomParser.cs:line 607
   at TheArtOfDev.HtmlRenderer.Core.Parse.DomParser.CorrectTextBoxes(CssBox box) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Parse\DomParser.cs:line 607
   at TheArtOfDev.HtmlRenderer.Core.Parse.DomParser.CorrectTextBoxes(CssBox box) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Parse\DomParser.cs:line 607
   at TheArtOfDev.HtmlRenderer.Core.Parse.DomParser.GenerateCssTree(String html, HtmlContainerInt htmlContainer, CssData& cssData) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\Parse\DomParser.cs:line 69
   at TheArtOfDev.HtmlRenderer.Core.HtmlContainerInt.SetHtml(String htmlSource, CssData baseCssData) in d:\source\HTML-Renderer\Source\HtmlRenderer\Core\HtmlContainerInt.cs:line 431
   at TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(String html, PdfGenerateConfig config, CssData cssData, EventHandler`1 stylesheetLoad, EventHandler`1 imageLoad)

How do i resolved this error ?

Dipak Patel
  • 79
  • 1
  • 5
  • 1
    Version 1.5.1.0 is working for me. Please check https://github.com/ArthurHub/HTML-Renderer – Dominik Dec 06 '19 at 15:33
  • @Dominik Did you use any special settings or fonts? (If so could you give a few details please?). Is that the version of PdfSharp, 1.5.1.0? Is it special? I don't see that version offered through VS Nuget, the closest I see is the latest version , which I am using (and I still see the problem reported above), 1.50.5147 (other versions available inc.: 1.3.0 & 1.32.XXXX). – Zeek2 Jun 17 '22 at 07:36
  • Also, this issue is still shown as Open on the PdfSharp site issue 63, ref. https://github.com/empira/PDFsharp/issues/63 (and on empira/MigraDoc as #29, ref: https://github.com/empira/MigraDoc/issues/29 ). And still open this year 2022: https://forum.pdfsharp.net/viewtopic.php?f=2&t=4326 – Zeek2 Jun 17 '22 at 07:43

1 Answers1

0

Try format textcontent

public static string HtmlEncode( string text ) {
    char[] chars = HttpUtility.HtmlEncode( text ).ToCharArray();
    StringBuilder result = new StringBuilder( text.Length + (int)( text.Length * 0.1 ) );

    foreach ( char c in chars ) {
        int value = Convert.ToInt32( c );
        if ( value > 127 )
            result.AppendFormat("&#{0};",value); 
        else
            result.Append( c );
    }

    return result.ToString();
}