2010-10-26 16 views
3

Je souhaite convertir une page Web ASP.NET en format PDF à l'aide de ITextSharp. J'ai écrit du code mais je ne peux pas le montrer aux personnages turcs. Quelqu'un peut-il m'aider?HTML en PDF Problème de caractères turc

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) 
     { 

     } 
    } 
} 
+0

Vous n'avez pas besoin d'utiliser le verrouillage des majuscules pour votre titre ... – joni

+0

Happy? Maintenant, pouvez-vous m'aider? – user487533

+0

Non, désolé. Je ne parle pas ASP .. – joni

Répondre

8
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 devez passer la police comme un argument en iTextSharp manipulation des commandes 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 direclty avec pdf qui peut être un vrai mal de tête ..

+0

Après 5 jours de maux de tête, je pense que vous avez absolument raison sur les outils de reporting. – efirat

+1

qu'est ce que le "pdftable". tout le monde colle cette solution partout. comment puis-je définir cette police à la doc mon pdf. Pouvez-vous expliquer ce qu'est le "pdftable" ???? –

+0

@MahmutEFE Je ne me souviens pas et ce n'est pas le point dans la question. Le point est que vous devez passer votre police turque si nécessaire. – Serguzest

0

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 fait en termes d'utilisation de police - il utilisera probablement l'une des polices intégrées standard qui ne sont pas susceptibles de prendre en charge les caractères que vous souhaitez imprimer si la chute en dehors de Latin1 ou Latin1 étendues Unicode.

J'utilise BaseFont.createFont(...) pour avoir une police externe incluse dans mon PDF dans iText (Java) - une qui supporte tous les caractères que j'écris. Vous pourriez être en mesure de créer votre objet Font, puis le passer à HtmlTextWriter?

+0

Laissez-moi essayer, merci. – user487533

+0

Ça ne marche pas je suppose. D'autres idées? – user487533