我使用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
答案 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));
大功告成。