none
GridView透過iTextSharp輸出PDF中文問題

    問題

  • 最近試了一下使用iTextSharp來將GridView輸出為PDF檔。
    但內容有中文就會變空白。上網查了一下解決方法是自行指定字型來解決。
    基本上是在document.Add的時候進行設定。
    而我現在輸出GirdView的方法是RenderContral,就搞不太清楚要在哪邊指定字型了?
    Code如下,請問設定好的font要交給誰才好!
    Response.ContentType = "application/pdf";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AddHeader("content-disposition", "attachment;filename=test.pdf");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            System.IO.StringWriter stringWrite = new StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    
            //處理中文
            BaseFont BaseF = BaseFont.CreateFont("C:\\Windows\\Fonts\\kaiu.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font font = new Font(BaseF, 14) ;
            //---ch
            GridView1.RenderControl(htmlWrite);
            StringReader reader = new StringReader(stringWrite.ToString());
            Document doc = new Document(PageSize.A4);
            HTMLWorker parser = new HTMLWorker(doc);
            PdfWriter.GetInstance(doc, Response.OutputStream);
            doc.Open();
            parser.Parse(reader);
            doc.Close();
    2010年3月11日 上午 01:55

解答

所有回覆

  • Hi!

    透過 iTextSharp.PdfPTable,將 GridView 轉換成 PdfPTable,其中 PdfPTable 可以指定字型
    參考這篇 http://topic.csdn.net/u/20080729/16/909c9d78-9b2d-493b-b96d-f6822cc0ce70.html


    小歐ou是個菜鳥工程師,回答不好請不要標我的回覆為解答,有網友熱心回覆也請發問者儘快回應,謝謝
    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Antarcticat 2010年3月11日 上午 04:05
    2010年3月11日 上午 03:08
  • 謝了!

    參考範整改了一下,我是要直接下載PDF~
    Response.ContentType = "application/pdf";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AddHeader("content-disposition", "attachment;filename=test.pdf");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            System.IO.StringWriter stringWrite = new StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    
            //GridView1.RenderControl(htmlWrite);
            GridView1.DataBind();
            StringReader reader = new StringReader(stringWrite.ToString());
            Document doc = new Document(PageSize.A4);
            PdfWriter.GetInstance(doc, Response.OutputStream);
            
            //處理中文
            BaseFont BaseF = BaseFont.CreateFont("C:\\Windows\\Fonts\\kaiu.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font fontCh = new Font(BaseF, 14);
                    
            doc.Open();
            PdfPTable ptb = new PdfPTable(GridView1.Columns.Count);
            
            //表格標題
            for (int h = 0; h < GridView1.Columns.Count; h++)
            {
                ptb.AddCell(new Phrase(GridView1.HeaderRow.Cells[h].Text, fontCh));
            }
            ptb.HeaderRows = 1;
            
            //表格內文
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                for (int j = 0; j < GridView1.Columns.Count; j++)
                {
                    ptb.AddCell(new Phrase(GridView1.Rows[i].Cells[j].Text, fontCh));
                }
            }
            
            doc.Add(ptb);
            doc.Close();
    2010年3月11日 上午 04:47