Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > ปัญหา iTextSharp: Export PDF จาก GridView ไม่สามารถแสดง ภาษาไทยได้



 

ปัญหา iTextSharp: Export PDF จาก GridView ไม่สามารถแสดง ภาษาไทยได้

 



Topic : 053933

Guest




Code
private void ExportToPDF(string strFileName, GridView dg)
    {
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition",
         "attachment;filename=myGridView.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

        BaseFont EnCodefont = BaseFont.CreateFont(Server.MapPath("/font/ANGSA.TTF"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        Font Nfont = new Font(EnCodefont, 18, Font.NORMAL);
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        myGridView.RenderControl(hw);
        StringReader sr = new StringReader(sw.ToString());
        Document pdfDoc = new Document(PageSize.A4, 30, 20, 40, 40);
        HTMLWorker htmlworker = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        pdfDoc.Add(new Paragraph("รายงานข้อมูลประจำวันที่ " + System.DateTime.Now.ToString("dd/MM/yyyy"), Nfont));
        pdfDoc.Add(new Paragraph("ทดสอบ", Nfont));
        htmlworker.Parse(sr);
        pdfDoc.Close();
        Response.Write(pdfDoc);
        Response.End();


พอดีจะทำการ export gridview แต่ว่า ภาษาไทยนั้น show ได้แต่ใน Paragraph ที่มีการ เรียก Nfont ที่มีการกำหนด font ไว้แล้ว...

โดยปกติแล้ว default front ของ itextsharp นั้นเป้น HELVETICA มันไม่ support ภาษาไทย..

แต่ว่าเวลาดึงเอา data มาจาก gridview นั้นใช้คำสั่ง htmlworker.Parse(sr); ซึ่งไม่รู้ว่าจะเอา font ภาษาไทยไป..แทรกไว้ตรงไหน

รบกวนผู้รู้ช่วยแนะนำด้วยครับ...

ลองใช้ FontFactory.GetFont กับ FontFactory.Register แล้วก็ได้ไม่ได้..

ลองใช้ code ที่เป็น Table แล้วไปดึงแต่ล่ะ cell มาก็ แทรกภาษาที่กำหนดไว้ไม่ได้อยู่ดี...



Tag : .NET, C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-01-04 11:04:21 By : Juniper View : 15602 Reply : 11
 

 

No. 1



โพสกระทู้ ( 373 )
บทความ ( 0 )



สถานะออฟไลน์


ลองใช้ font ของ SIPA หรือยังครับ download มาลองใช้ดูครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-04 12:10:20 By : numenoy
 


 

No. 2

Guest


เรื่อง font ไม่มีปัญหาครับ... แต่ปัญหาคือจะทำยังไงให้.. เอา data ที่ดึงมาจาก gridview แล้ว export ออกไปเป้น ภาษาไทยครับ

มีหลายๆ ตัวอย่าง เขามีแต่ใช้เป็น Phase , Paragraph ซึ่งสามารถ เอา font ที่กำหนด...มาต่อท้าย ใช้ได้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-04 12:44:57 By : Juniper
 

 

No. 3

Guest


ลองใช้อีก code นึงซึ่งเป็นการ สร้าง table มาแล้วก็ add cell เข้าไป.. ก็หาที่แทรก font ที่กำหนดไว้ ไม่ได้ครับ..

Code
  protected void btnExportPDF_Click(object sender, EventArgs e)
    {
        GridView1.AllowPaging = Convert.ToBoolean(rbPaging.SelectedItem.Value);
        GridView1.DataBind();

         //Create a table
        iTextSharp.text.Table table = new iTextSharp.text.Table(GridView1.Columns.Count);
        table.Cellpadding = 5; 

        //Set the column widths 
        int[] widths = new int[GridView1.Columns.Count];
        for (int x = 0; x < GridView1.Columns.Count; x++)
        {
            widths[x] = (int)GridView1.Columns[x].ItemStyle.Width.Value ;
            string cellText = Server.HtmlDecode(GridView1.HeaderRow.Cells[x].Text);
            iTextSharp.text.Cell cell = new iTextSharp.text.Cell(cellText);
            //iTextSharp.text.Cell cell = new iTextSharp.text.Cell(new Phrase("Basic Account Information", FontFactory.GetFont(FontFactory.HELVETICA, 9, iTextSharp.text.Font.BOLD)));
            cell.BackgroundColor = new Color (System.Drawing.ColorTranslator.FromHtml("#008000"));
            table.AddCell(cell); 
        }
        table.SetWidths(widths);

                
        //Transfer rows from GridView to table
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
            {
                for (int j = 0; j < GridView1.Columns.Count; j++)
                {
                    string cellText = Server.HtmlDecode(GridView1.Rows[i].Cells[j].Text);
                    iTextSharp.text.Cell cell = new iTextSharp.text.Cell(cellText);

                    //Set Color of Alternating row
                    if (i % 2 != 0)
                    {
                        cell.BackgroundColor = new Color(System.Drawing.ColorTranslator.FromHtml("#C2D69B"));
                    }
                    table.AddCell(cell);
                }
            }
        }
		
        BaseFont EnCodefont = BaseFont.CreateFont(Server.MapPath("/font/ANGSA.TTF"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        Font Nfont = new Font(EnCodefont, 18, Font.NORMAL);
        Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        pdfDoc.Add(new Paragraph("รายงานข้อมูลประจำวันที่ " + System.DateTime.Now.ToString("dd/MM/yyyy"), Nfont));
        pdfDoc.Add(table);
        pdfDoc.Close();  
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Write(pdfDoc);
        Response.End();
    }


อยากแทรก font ตรง pdfDoc.Add(table); แต่ทำไม่เป้นจริงๆ ครับ.. รบกวนผู้รู้แนะนำด้วยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-04 12:50:17 By : Juniper
 


 

No. 4

Guest


แก้ได้แล้วครับ.. ทาง [email protected] เขาแนะนำว่าให้ไปใช้ FontProvider

แล้วพอดีไปเจอเว็บตุรกี http://forum.ceturk.com/archive/index.php/t-22271.html

ก็เลยแก้เอาตามนี้ ด่านล่างนี้ เอาไปใช้ได้เลยครับ หากใครติดปัญหานี้แบบผม...

Code
public class MyFontFactoryImpl : FontFactoryImp
    {
        Font defaultFont;
        public MyFontFactoryImpl()
        {

            BaseFont tahoma = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\tahoma.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            defaultFont = new Font(tahoma, 12);
           
        }
        public override Font GetFont(string fontname, string encoding, Boolean embedded, float size, int style, BaseColor color, Boolean cached )
        {
            return defaultFont;
        }
    }

    public class HtmlToPdf
    {
        string _html;
        public HtmlToPdf(string html)
        {
            if (!(FontFactory.FontImp is MyFontFactoryImpl))
                FontFactory.FontImp = new MyFontFactoryImpl();
            _html = html;
        }

        public void Render(Stream stream)
        {
            StringReader sr = new StringReader(_html);
            Document pdfDoc = new Document();
            PdfWriter.GetInstance(pdfDoc, stream);
            HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
            pdfDoc.Open();
            htmlparser.Parse(sr);
            pdfDoc.Close();
        }

        public void Render(HttpResponse response, string fileName)
        {
            response.Clear();
            response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileName));
            response.ContentType = "application/octet-stream";

            Render(response.OutputStream);

            response.End();
        }
    }


เอาไปใช้งาน..

Code
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
    {
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        myGridView.AllowPaging = false;
        myGridView.DataBind();
        myGridView.RenderControl(hw);
        
        HtmlToPdf htmlToPdf = new HtmlToPdf(sw.ToString());

        htmlToPdf.Render(Response, "test.pdf");
    }


เหนื่อยจริงๆ เลยครับ ใช้เวลา 3 วันเต็มๆ

http://www.vs2soft.com
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-05 23:31:01 By : Juniper
 


 

No. 5

Guest


หามานานเหมือนกันค่ะ เกือบมีความหวัง แต่อ่าน code แล้วไม่เข้าใจ แล้วเอามา compile ก็ไม่ผ่านค่ะ เช่น

if (!(FontFactory.FontImp is MyFontFactoryImpl))

แต่ FontProvider เป็นยังไงคะ ใน code นี้ไม่เห็นเลยค่ะ

ขอคำแนะนำด้วยนะคะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-02 16:22:47 By : Amilin
 


 

No. 6



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Go to : ASP.NET สร้าง PDF ไม่รองรับภาษาญี่ปุ่น ใช้ PdfSharp - ภาษาไทย (ASP.NET andamp; PDF andamp; Thai)

มีแต่ตัวนี้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-02 16:48:17 By : webmaster
 


 

No. 7



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Go to : ใช้ iTextSharp สร้างไฟล์ PDF ให้แสดงภาษาไทยยังไงครับ

เจอล่ะครับ มีคนโพสไว้ที่นี่ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-02 16:53:27 By : webmaster
 


 

No. 8

Guest


ขอบคุณค่ะคุณ webmaster คือต้องการจะ parse จาก html ที่มีภาษาไทยไปเป็น pdf เหมือนคุณ Juniper ค่ะ
ถ้าจะให้แสดง text ธรรมา จะเขียน Paragraph paragraph = new Paragraph("Test Create PDF แสดงภาษาไทย", font); ซื่งสามารถกำหนด font ได้ค่ะ อันนี้ไม่มีปัญหา จะมีก็แต่ สระกับวรรณยุกต์ซ้อนกันค่ะ แต่ถ้าใช้ htmlWorker.parse มันไม่มีให้กำหนด font เลยค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-02 17:07:42 By : Amilin
 


 

No. 9

Guest


Code (C#)
iTextSharp.text.Document document = null;
try
{
document = new iTextSharp.text.Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("HelloWorld.pdf", FileMode.Create));
document.Open();
BaseFont baseFont = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\angsau.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED, true);
Phrase phrase = new Phrase("ผู้กัน", new iTextSharp.text.Font(baseFont));
Paragraph paragraph = new Paragraph();
paragraph.Add(phrase);
document.Add(paragraph);
}
catch (Exception ex) {
throw ex;
}
finally
{
document.Close();
}

วรรณยุกต์ มันกระโดด ใครเคยเจอบอกหน่อยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-11 18:25:53 By : itextsharp
 


 

No. 10

Guest


ตอบความคิดเห็นที่ : 9 เขียนโดย : itextsharp เมื่อวันที่ 2012-09-11 18:25:53
รายละเอียดของการตอบ ::
ขอบคุณคับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-10-17 12:48:26 By : Tor
 


 

No. 11

Guest


ตอบความคิดเห็นที่ : 9 เขียนโดย : itextsharp เมื่อวันที่ 2012-09-11 18:25:53
รายละเอียดของการตอบ ::
สร้างโฟร์เดอร์ font และกอปไปไว้ เอา resource ที่เราจะใช้ไปแม๊ปเองเลยคับ

BaseFont.CreateFont(HttpContext.Current.Server.MapPath("~/fonts/THSarabunNewBold.ttf"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED)

ส่วนคนที่ใช้ vb เขียนให้ก๊อปปี้ c# code ไป convert http://converter.telerik.com/ เวปนี้เลยครับ

ขอบคุณเจ้าของด้วยครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-06-29 15:56:41 By : ekaf
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ปัญหา iTextSharp: Export PDF จาก GridView ไม่สามารถแสดง ภาษาไทยได้
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่