Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-使用iTextSharp将DataGridView导出为带有Unicode字符的PDF_C#_Winforms_Visual Studio 2010_Datagridview_Itext - Fatal编程技术网

C#-使用iTextSharp将DataGridView导出为带有Unicode字符的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

我是新来的。使用iTextSharp,我可以将数据从dataGridView1导出到PDF文件,作为一个表,但是,当我这样做时,PDF不会显示像这样的字符♫, → 或► (Unicode)。所以我在读这篇文章,但我不明白,基本上所有的解决方案都是ASP.NET或VB.NET。我正在使用Visual C#Express 2010。这是我用来导出PDF的代码:

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);
        }

    }