2010-10-26 76 views
3

我想使用ITextSharp將ASP.NET網頁轉換爲pdf。我確實寫了一些代碼,但是我不能讓它顯示土耳其字符。誰能幫我?HTML To PDF Turkish Character問題

下面是代碼:

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

有沒有必要使用大寫鎖定您的標題... – joni 2010-10-26 11:25:27

+0

快樂?現在,你能幫我嗎? – user487533 2010-10-26 11:30:20

+0

不,對不起。我不會說ASP .. – joni 2010-10-26 11:35:41

回答

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

您應該通過字體作爲iTextSharp的操作參數命令,這樣的:

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

你可能要考慮與報告工具正與PDF導出功能,而不是照片直接使用PDF,其可以是一個真正的頭痛..

+0

經過5天的頭痛,我認爲你對報告工具絕對正確。 – efirat 2012-07-04 12:03:18

+1

什麼是「pdftable」。每個人都在把這個解決方案粘貼到任何地方。我怎樣才能將該字體設置爲我的pdf文檔。你能解釋一下,「pdftable」是什麼? – 2015-01-15 12:23:06

+0

@MahmutEFE我不記得了,也不是問題中的重點。關鍵是你需要在必要時傳遞你的土耳其字體。 – Serguzest 2015-01-15 17:07:59

0

你需要確保你正在寫在支持土耳其字符集(或者至少你嘗試caracters寫出來)一個字體文本。

我不知道HtmlTextWriter在字體使用方面做了什麼 - 它可能會使用標準內置字體之一,這些字體不太可能支持要打印的字符,如果落在Latin1或Latin1之外擴展的Unicode範圍。

我使用BaseFont.createFont(...)在iText(Java)中的PDF中包含一個外部Font,它支持我正在編寫的所有字符。您可能能夠創建您的Font對象,然後將其傳遞給HtmlTextWriter?

+0

讓我試試,謝謝。 – user487533 2010-10-26 11:53:12

+0

我想這不行。任何其他想法? – user487533 2010-10-26 13:44:07