Question

Je veux convertir une page Web ASP.NET à l'aide iTextSharp pdf. J'ai écrit un code mais je ne peux pas faire montrer les caractères turcs. Peut-elle aider quelqu'un me?

Voici le code:

using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

using System.Web.UI;
using System.Web;
using iTextSharp.text.html.simpleparser;
using System.Text;
using System.Text.RegularExpressions;

namespace Presentation
{
    public partial class TemporaryStudentFormPrinter : System.Web.UI.Page
    {
        protected override void Render(HtmlTextWriter writer)
        {
            MemoryStream mem = new MemoryStream();
            StreamWriter twr = new StreamWriter(mem);
            HtmlTextWriter myWriter = new HtmlTextWriter(twr);
            base.Render(myWriter);
            myWriter.Flush();
            myWriter.Dispose();
            StreamReader strmRdr = new StreamReader(mem);
            strmRdr.BaseStream.Position = 0;
            string pageContent = strmRdr.ReadToEnd();
            strmRdr.Dispose();
            mem.Dispose();
            writer.Write(pageContent);
            CreatePDFDocument(pageContent);
        }
        public void CreatePDFDocument(string strHtml)
        {
            string strFileName = HttpContext.Current.Server.MapPath("test.pdf");
            Document document = new Document(PageSize.A4, 80, 50, 30, 65);
            PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));

            StringReader se = new StringReader(strHtml);
            HTMLWorker obj = new HTMLWorker(document);

            document.Open();

            obj.Parse(se);
            document.Close();
            ShowPdf(strFileName);
        }
        public void ShowPdf(string strFileName)
        {
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);
            Response.ContentType = "application/pdf";
            Response.WriteFile(strFileName);
            Response.Flush();
            Response.Clear();
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}
Était-ce utile?

La solution

iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);

iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);

Vous devriez passer la police comme un argument dans iTextSharp commandes de manipulation comme ça:

pdftable.AddCell(new Phrase(nn.InnerText.Trim(), fontNormal));

Vous voudrez peut-être envisager de travailler avec des outils de reporting avec pdf capacité d'exportation au lieu de travailler avec direclty pdf qui peut être un véritable casse-tête ..

Autres conseils

Vous devez vous assurer que vous écrivez le texte dans une police qui prend en charge le jeu de caractères turc (ou au moins les caractères que vous essayez d'écrire).

Je ne sais pas ce que HtmlTextWriter-t en termes d'utilisation de la police - il probablement utiliser une de la norme intégrée des polices qui ne sont pas susceptibles de soutenir les caractères que vous souhaitez imprimer si l'extérieur de chute du Latin1 ou Latin1- Extension de la plage Unicode.

J'utiliser BaseFont.createFont(...) d'avoir une police externe incluse dans mon PDF iText (Java) - celui qui prend en charge tous les personnages que je vous écris. Vous pourriez être en mesure de créer votre objet de police, puis passer à HtmlTextWriter?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top