4 votes

Lettres cyrilliques iTextSharp

J'ai utilisé http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3 pour générer des fichiers pdf à partir de mes vues razor et cela fonctionne très bien mais je ne peux pas afficher les lettres cyrilliques comme c,c . J'ai tout essayé et je n'arrive pas à le faire fonctionner.

Je dois d'une manière ou d'une autre indiquer au HtmlWorker d'utiliser une police différente :

 using (var htmlViewReader = new StringReader(htmlText))
                    {                       
                        using (var htmlWorker = new HTMLWorker(pdfDocument))
                        {                            

                            htmlWorker.Parse(htmlViewReader);
                        }
                    }

Pouvez-vous nous aider ?

EDITAR:

Il me manquait une ligne

styleSheet.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);

Le reste était identique à la réponse.

4voto

Daniel Points 476

Si vous modifiez le Rendu méthode de StandardPdfRenderer à l'extrait suivant, cela devrait fonctionner :

public byte[] Render(string htmlText, string pageTitle)
{
    byte[] renderedBuffer;

    using (var outputMemoryStream = new MemoryStream())
    {
        using (var pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin))
        {
            string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
            iTextSharp.text.FontFactory.Register(arialuniTff);

            PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, outputMemoryStream);

            pdfWriter.CloseStream = false;
            pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
            pdfDocument.Open();

            using (var htmlViewReader = new StringReader(htmlText))
            {
                using (var htmlWorker = new HTMLWorker(pdfDocument))
                {
                    var styleSheet = new iTextSharp.text.html.simpleparser.StyleSheet();
                    styleSheet.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
                    styleSheet.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);
                    htmlWorker.SetStyleSheet(styleSheet);

                    htmlWorker.Parse(htmlViewReader);
                }
            }
        }

        renderedBuffer = new byte[outputMemoryStream.Position];
        outputMemoryStream.Position = 0;
        outputMemoryStream.Read(renderedBuffer, 0, renderedBuffer.Length);
    }

    return renderedBuffer;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X