使用itextsharp将hindi unicode的字体改为pdf

时间:2016-11-22 08:26:11

标签: asp.net c#-4.0

我使用itextsharp c#创建pdf,对于使用'ARIALUNI.TTF'的unicode hindi字体,但是当我创建pdf时,hindi字体没有正确显示为输入。那么,如何正确地在pdf中获取印地语字体。 可以使用任何其他unicode字体吗?或任何其他决议? 这是我的代码& HTML ...

 private void fillgridview()
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Name"), new DataColumn("HindiName") });
        dt.Rows.Add("India", "भारत");
        dt.Rows.Add("China", "चीन");
        dt.Rows.Add("Australia", "ऑस्ट्रेलिया");
        dt.Rows.Add("United States", "अमेरिका");
        dt.Rows.Add("Canada", "कनाडा");
        dt.Rows.Add("Russia", "रूस");
        dt.Rows.Add("Itli", "इटली");
        dt.Rows.Add("France", "फ्रांस");
        GridView1.DataSource = dt;
        GridView1.DataBind(); 
    }
    protected void btnExportPDF_Click(object sender, EventArgs e)
    {
        GridView1.AllowPaging = false;
        GridView1.DataBind();              
        BaseFont bf = BaseFont.CreateFont(Environment.GetEnvironmentVariable("windir") + @"\fonts\ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(GridView1.Columns.Count);
        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);
            //Set Font and Font Color
            iTextSharp.text.Font font = new iTextSharp.text.Font(bf, 10, iTextSharp.text.Font.NORMAL);
            font.Color = BaseColor.WHITE;
            iTextSharp.text.pdf.PdfPCell cell = new iTextSharp.text.pdf.PdfPCell(new Phrase(12, cellText, font));
            //Set Header Row BackGround Color
            cell.BackgroundColor = BaseColor.BLUE;
            table.AddCell(cell);
        }
        table.SetWidths(widths);
        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);
                    //Set Font and Font Color
                    iTextSharp.text.Font font = new iTextSharp.text.Font(bf, 10, iTextSharp.text.Font.NORMAL);
                    font.Color = BaseColor.BLACK;
                    iTextSharp.text.pdf.PdfPCell cell = new iTextSharp.text.pdf.PdfPCell(new Phrase(12, cellText, font));
                    //Set Color of row
                    if (i % 2 == 0)
                    {
                        //Set Row BackGround Color
                        cell.BackgroundColor = BaseColor.YELLOW;
                    }
                    table.AddCell(cell);
                }
            }
        }
        //Create the PDF Document
        Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
        using (MemoryStream memoryStream = new MemoryStream())
        {  
        PdfWriter.GetInstance(pdfDoc, memoryStream);
        pdfDoc.Open();
        pdfDoc.Add(table);
        pdfDoc.Close();
        byte[] bytes = memoryStream.ToArray();        
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);         
        //Response.Write(pdfDoc);
        Response.BinaryWrite(bytes);
        Response.End();
        }
    }






<asp:GridView ID="GridView1" runat="server" Width="300" HeaderStyle-BackColor="Blue"
    HeaderStyle-ForeColor="White" RowStyle-BackColor="Yellow" AlternatingRowStyle-BackColor="White"
    RowStyle-ForeColor="Black" AutoGenerateColumns="false" Font-Names="Arial" Font-Size="12">
    <Columns>
        <asp:BoundField ItemStyle-Width="200px" DataField="Name" HeaderText="Name" />
        <asp:BoundField ItemStyle-Width="200px" DataField="HindiName" HeaderText="Hindi Name" />
    </Columns>
</asp:GridView>
<br />
<asp:Button ID="btnExportPDF" runat="server" Text="ExportToPDF" OnClick="btnExportPDF_Click" />

Output:
[<img src="~/AAA.jpg" width="300" height="100">][1]


  [1]: https://i.stack.imgur.com/xUpnG.jpg

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但我最近陷入了同样的境地。在互联网上找不到任何解决方案。现在我有了一个棘手的解决方案。

在这里分享以帮助任何人。

我有 win10,它预装了 Kundli NormalA 常规字体。

要查看系统中的字体 - 打开 C 盘 - Windows - 字体。

我右键单击它,出现一个选项 - 压缩到“HINN.rar”

所以我尝试了 HINN.TFF

BaseFont bf = BaseFont.CreateFont(Environment.GetEnvironmentVariable("windir") + @"\fonts\HINN.TTF", BaseFont.IDENTITY_H, true);

iTextSharp.text.Font Hindiheadingfonta = new iTextSharp.text.Font(bf, 16, iTextSharp.text.Font.BOLD);

    

然后打开 MS Office 并选择字体 Kundli。 在印地语字体中输入您想输入的任何内容。 复制该文本并粘贴到 VS Studio。 MS Word 中的बिजेन्द्र 将在 C# 中粘贴为 fctsUæ。

PdfPCell Cell15B = new PdfPCell(new Phrase("**fctsUæ**", Hindiheadingfonta));
   

大功告成。