C#-使用iTextSharp将DataGridView导出为带有Unicode字符的PDF
我是新来的。使用iTextSharp,我可以将数据从dataGridView1导出到PDF文件,作为一个表,但是,当我这样做时,PDF不会显示像这样的字符♫, → 或► (Unicode)。所以我在读这篇文章,但我不明白,基本上所有的解决方案都是ASP.NET或VB.NET。我正在使用Visual C#Express 2010。这是我用来导出PDF的代码:C#-使用iTextSharp将DataGridView导出为带有Unicode字符的PDF,c#,winforms,visual-studio-2010,datagridview,itext,C#,Winforms,Visual Studio 2010,Datagridview,Itext,我是新来的。使用iTextSharp,我可以将数据从dataGridView1导出到PDF文件,作为一个表,但是,当我这样做时,PDF不会显示像这样的字符♫, → 或► (Unicode)。所以我在读这篇文章,但我不明白,基本上所有的解决方案都是ASP.NET或VB.NET。我正在使用Visual C#Express 2010。这是我用来导出PDF的代码: public void GenerarDocumento(Document document) { //se crea un objeto
public void GenerarDocumento(Document document)
{
//se crea un objeto PdfTable con el # de columnas del dataGridView
PdfPTable datatable = new PdfPTable(dataGridView1.ColumnCount);
//asignamos algunas propiedades para el diseño del pdf
datatable.DefaultCell.Padding = 3;
float[] headerwidths = GetTamañoColumnas(dataGridView1);
datatable.SetWidths(headerwidths);
datatable.WidthPercentage = 100;
datatable.DefaultCell.BorderWidth = 2;
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
//SE GENERA EL ENCABEZADO DE LA TABLA EN EL PDF
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
datatable.AddCell(dataGridView1.Columns[i].HeaderText);
}
datatable.HeaderRows = 1;
datatable.DefaultCell.BorderWidth = 1;
//SE GENERA EL CUERPO DEL PDF
for (int i = 0; i < dataGridView1.RowCount; i++)
{
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
datatable.AddCell(dataGridView1[j, i].Value.ToString());
}
datatable.CompleteRow();
}
//Add PdfTable to the doc
document.Add(datatable);
}
我需要在代码中更改什么?我必须做什么?可能是重复的,是的,我知道另一个问题是Java。没关系。答案归结为“如果你想要Unicode字符,你需要使用一种包含Unicode字符的字体”。是的,我知道另一个问题是Java。没关系。答案归结为“如果您想要Unicode字符,您需要使用包含Unicode字符的字体”。
public float[] GetTamañoColumnas(DataGridView dg)
{
float[] values = new float[dg.ColumnCount];
for (int i = 0; i < dg.ColumnCount; i++)
{
values[i] = (float)dg.Columns[i].Width;
}
return values;
}
private void btnExportarPDF_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Documento PDF (*.pdf)|*.pdf";
sfd.FileName = DateTime.Now.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture);
if (sfd.ShowDialog() == DialogResult.OK)
{
iTextSharp.text.Document doc = new iTextSharp.text.Document(PageSize.A4.Rotate(), 10, 10, 10, 10);
string filename = sfd.FileName;
FileStream file = new FileStream(sfd.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
PdfWriter.GetInstance(doc, file);
doc.Open();
GenerarDocumento(doc);
doc.Close();
System.Diagnostics.Process.Start(sfd.FileName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}