WebMaster Ответов: 4

Как экспортировать datatable в PDF с помощью C# windows forms


Как написать или экспортировать datatable (datagridview) в PDF с помощью C# windows forms? Я использую библиотеку itextsharp.dll

4 Ответов

Рейтинг:
34

Prasad_Kulkarni

Пожалуйста, обратитесь к следующим темам:

Учебные пособия по созданию PDF-файлов с использованием C# (.NET 2.0) и iTextSharp:
Учебники по созданию PDF-файлов с помощью C# 2.0[^]

Библиотека .NET для создания впечатляющих отчетов в формате PDF:
Gios PDF .NET библиотека[^]

Экспорт Таблицы данных или интерфейс IEnumerable в Word 2003 - 2007 и Excel 2003 - 2007 / формат PDF / в формате XML / HTML-код:
Экспортирует объект DataTable/IEnumerable для Word и Excel / формат PDF / CSV или HTML / CSV файл[^]

Как написать / экспортировать datatable в PDF с помощью C# windows forms [^]
DataTable To PDF[^]
Экспорт таблицы в PDF в asp.net с помощью C#[^]


[no name]

спасибо

Prasad_Kulkarni

Пожалуйста!

Volynsky Alex

Приятно!

Рейтинг:
26

miwuawen

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

namespace MDAIInternet
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
   protected System.Web.UI.WebControls.Button Button1;
   protected System.Web.UI.WebControls.TextBox TextBox1;
   protected System.Web.UI.WebControls.DataGrid DataGrid1;
   static DataTable datatable = new DataTable("testpdf"); //定义一个datatable

   private void Page_Load(object sender, System.EventArgs e)
   {
    // 在此处放置用户代码以初始化页面

    if (!Page.IsPostBack)
    {
     DataRow dr;
     //建立Column例,可以指明例的类型,这里用的是默认的string
     datatable.Columns.Add(new DataColumn("编号"));
     datatable.Columns.Add(new DataColumn("用户名"));
     for (int i = 1; i < 5; i++)
     {
      dr = datatable.NewRow();
      dr[0] = System.Convert.ToString(i);
      dr[1] = "tommy" + System.Convert.ToString(i);
      datatable.Rows.Add(dr);
     }
    }
    this.DataGrid1.DataSource=datatable;
    this.DataGrid1.DataBind(); //先显示出来看看
   }

   #region Web 窗体设计器生成的代码
   override protected void OnInit(EventArgs e)
   {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
   }
  
   /// <summary>
   /// 设计器支持所需的方法 - 不要使用代码编辑器修改
   /// 此方法的内容。
   /// </summary>
   private void InitializeComponent()
   {   
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load);

   }
   #endregion

   private void Button1_Click(object sender, System.EventArgs e)
   {
    try
    {
     Document document = new Document();
     PdfWriter.GetInstance(document, new FileStream(Server.MapPath("Chap0101.pdf"), FileMode.Create)); //在当前路径下创一个文件  
     document.Open();
     BaseFont bfChinese = BaseFont.CreateFont("D:\\WINDOWS\\Fonts\\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //在windows目录下引用字体文件
     iTextSharp.text.Font fontChinese = new iTextSharp.text.Font(bfChinese, 12, iTextSharp.text.Font.NORMAL,new iTextSharp.text.Color(0, 0, 0));

//     document.Add(new Paragraph(this.TextBox1.Text.ToString(), fontChinese));                  
//可以自己添加文字进去
//     iTextSharp.text.Image jpeg = iTextSharp.text.Image.GetInstance(Server.MapPath("pic015.jpg"));   //添加个图片
//     document.Add(jpeg);
     PdfPTable table = new PdfPTable(datatable.Columns.Count);

     for (int i = 0; i < datatable.Rows.Count; i++)
     {
      for (int j = 0; j < datatable.Columns.Count; j++)
      {
       table.AddCell(new Phrase(datatable.Rows[i][j].ToString(), fontChinese));
      }
     }
     document.Add(table);  //添加table

     document.Close();
     Response.Redirect("Chap0101.pdf"); //打开PDF文件
//     Response.TransmitFile("Chap0101.pdf");  //保存

    
    }
    catch (DocumentException ex)
    {
     Response.Write(ex.ToString());
    }
   }
}
}


[no name]

это мой источник данных :

запрос частная недействительным(объект отправителя, EventArgs в электронной)
{
var fr = новый WMSDService();
ВАР ДС = фр.getListRequest();
dataGridView1.Источник данных = ДС;}


что не так с этой моей программой?

частный недействительными button4_Click(объект отправителя, EventArgs в электронной)
{
Документ док = новый документ(iTextSharp.текст.Страницы.Письмо, 10, 10, 42, 35);
PdfWriter wri = PdfWriter.Деыпзьапсе(док, нового типа FileStream("d:\\Test.pdf", содержит filemode.Создавать));

док.Открыть();
Абзац абзац = новый абзац ("данные, экспортированные из DataGridview!");

Таблица PdfPTable = новая таблица PdfPTable(2);
стол.TotalWidth = 216f;
стол.LockedWidth = истина;
float [] widths = new float [] { 1f, 2f };
стол.SetWidths (ширина);
стол.Горизонтальное выравнивание = 0;
стол.SpacingBefore = 20F с;
стол.SpacingAfter = 30Ф;

Pdfpcell cell = new PdfPCell(новая фраза ("продукты"));
ячейка.Colspan = 2;
ячейка.Граница = 0;
ячейка.Горизонтальное выравнивание = 1;
стол.AddCell(ячейка);

var fr = новый WMSDService();
ВАР ДС = фр.getListRequest();
dataGridView1.Источник данных = ДС;

док.Добавить(табл.);
PdfPTable t1 = новый PdfPTable(2);
DataTable dt = (DataTable)dataGridView1. DataSource;

PdfPCell cid = new PdfPCell(новая фраза ("Product GF"));
PdfPCell cname = new PdfPCell(новая фраза ("Product Indoor"));
СИД.Свойство backgroundColor = iTextSharp.текст.BaseColor.СЕРЫЙ;
запись CNAME.Свойство backgroundColor = iTextSharp.текст.BaseColor.СЕРЫЙ;
Т1.AddCell(дур);
Т1.AddCell(запись CNAME);

foreach (DataGridViewRow rows in dataGridView1. Rows)
{
если (преобразовать.ToBoolean(dataGridView1.Строк[строк.Индекс].Ячейки[3]. Значение))
{
идентификатор поплавок = поплавок.Синтаксический анализ(dataGridView1.Строк[строк.Индекс].Ячейки["стража"].Значение.Метод toString());
название поплавок = поплавок.Синтаксический анализ(dataGridView1.Строк[строк.Индекс].Ячейки ["Ind"]. Значение.Метод toString());

PdfPCell c2 = new PdfPCell(новая фраза (id));
PdfPCell c1 = new PdfPCell(новая фраза(имя));

Т1.AddCell(С1);
Т1.AddCell(С2);
}
}
док. добавить (абзац);
док.Закрывать();
Ящик для сообщений.Показать("Отчет Создан!");
}

он не может быть запущен. можете ли вы помочь мне, пожалуйста?

mk4you7

Хороший ответ!

Volynsky Alex

Да

Рейтинг:
16

Pandvi

Проверьте по этому адресу следующие коды:

private void Data2PDF(DataTable dataTable)
{
Document document = new Document(PageSize.A4, 10, 10, 90, 10);
System.IO.MemoryStream mStream = new System.IO.MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, mStream);
int cols = dataTable.Columns.Count;
int rows = dataTable.Rows.Count;
pdfDoc.Open();

// pdfTable create and set
iTextSharp.text.Table pdfTable = new iTextSharp.text.Table(cols, rows);
pdfTable.BorderWidth = 1;
pdfTable.Width = 100;
pdfTable.Padding = 1;
pdfTable.Spacing = 1;

    //table headers
for (int i = 0; i < cols; i++)
{
   Cell cellCols = new Cell();
   Font ColFont = FontFactory.GetFont(FontFactory.HELVETICA, 12, Font.BOLD);
   Chunk chunkCols = new Chunk(dataTable.Columns[i].ColumnName, ColFont);
   cellCols.Add(chunkCols);
   pdfTable.AddCell(cellCols);

}


    //table data 
for (int k = 0; k < rows; k++)
{
    for (int j = 0; j < cols; j++)
    {
      Cell cellRows = new Cell();
      Font RowFont = FontFactory.GetFont(FontFactory.HELVETICA, 12);
      Chunk chunkRows = new Chunk(dataTable.Rows[k][j].ToString(), RowFont);
      cellRows.Add(chunkRows);
      pdfTable.AddCell(cellRows);

    }
}

pdfDoc.Add(pdfTable);
pdfDoc.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=Datatable.pdf");
Response.Clear();
Response.BinaryWrite(mStream.ToArray());
Response.End();

}


Кроме того, я добавляю ссылку внизу: Экспорт базы данных в Excel, PDF, HTML,RTF, XML и т. д. для ASP.NET без автоматизации[^]


[no name]

спасибо, но это не помогает. он не будет работать в моем приложении. Я использую приложение visual c# windows form. можете ли вы дать ссылку на отчет в visual studio express edition 2008?? помоги мне, пожалуйста....

Prasad_Kulkarni

Мои 5!

Aditya Asati

Объект sqlconnection кон = новое sqlconnection(@"источник данных=.\Именем sqlexpress;ключевое слово attachdbfilename=D:\в WebSite2\папку App_Data\ASPNETDB.МДФ;Комплексная безопасность=true;в пользовательский экземпляр=true в");
против.Открыть();
строку стр ="выбрать Good_Reciept_Note.porderid,Good_Reciept _Note.podate,Good_Reciept _Note.material_code,Good_Reciept _Note.сделать,Good_Reciept _Note.цена Good_Reciept _Note.кол-во,Good_Reciept _Note.supplier_id,Good_Reciept _Note.guarantee_period,MeterSno.серийный номер serialno от Good_Reciept _note,MeterSno где Good_Reciept.porderid='" + txtpid.Текст + " и Good_Reciept _note.podate ='" + txtpdate.Текст + "'";
SqlDataAdapter da=новый SqlDataAdapter(str, con);
DataSet dset=новый набор данных();
da. Fill(dset, " Goods_Reciept_Note");
Документе RDoc документации = новая документе();
RDoc документации.Загрузить(Сервер.MapPath ("meterreciept. rpt"));
RDoc документации.SetDataSource(dset);
System.IO.MemoryStream m = (System.IO.MemoryStream)rdoc.ExportToStream(CrystalDecisions.Общий.ExportFormatType.PortableDocFormat);
RDoc документации.Закрывать();
RDoc документации.Располагать();
Ответ.ClearContent();
Ответ.ClearHeaders();
Ответ.Буфер = true;
Ответ.ContentType = " приложение / pdf";
Ответ.BinaryWrite(m.Метод toArray());
это мой код, который я должен занести в таблицу, я хочу, чтобы несколько значений были просмотрены в формате pdf в соответствии с параметрами, переданными пользователем, параметрами, переданными пользователем, которые являются более полными и упорядоченными данными, но я получаю сообщение об ошибке в строке 30 неправильный синтаксис рядом с '.'.
может ли кто-нибудь помочь мне в этом вопросе

Volynsky Alex

Приятно!

Рейтинг:
1

Rahim Lotfi

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
 

 public static void SaveDataGridViewToPDF(DataGridView Dv, string FilePath)
     {
         FontFactory.RegisterDirectories();
         iTextSharp.text.Font myfont = FontFactory.GetFont("Tahoma", BaseFont.IDENTITY_H, 12, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK);
         Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
 
         pdfDoc.Open();
         PdfWriter wri = PdfWriter.GetInstance(pdfDoc, new FileStream(FilePath, FileMode.Create));
         pdfDoc.Open();
         PdfPTable _mytable = new PdfPTable(Dv.ColumnCount);
 
         for (int j = 0; j < Dv.Columns.Count; ++j)
         {
             Phrase p = new Phrase(Dv.Columns[j].HeaderText, myfont);
             PdfPCell cell = new PdfPCell(p);
             cell.HorizontalAlignment = Element.ALIGN_CENTER;
             cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
             _mytable.AddCell(cell);
         }
         //-------------------------
         for (int i = 0; i < Dv.Rows.Count - 1; ++i)
         {
             for (int j = 0; j < Dv.Columns.Count; ++j)
             {
 
                 Phrase p = new Phrase(Dv.Rows[i].Cells[j].Value.ToString(), myfont);
                 PdfPCell cell = new PdfPCell(p);
                 cell.HorizontalAlignment = Element.ALIGN_CENTER;
                 cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
                 _mytable.AddCell(cell);
             }
         }
         //------------------------           
         pdfDoc.Add(_mytable);
         pdfDoc.Close();
         System.Diagnostics.Process.Start(FilePath);
     }
//__________________ For DataTable To Pdf

 
   public static void SaveDataTableToPDF(System.Data.DataTable DTable, string FilePath)
     {
         FontFactory.RegisterDirectories();
         iTextSharp.text.Font myfont = FontFactory.GetFont("Tahoma", BaseFont.IDENTITY_H, 12, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK);
         Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
 
         pdfDoc.Open();
         PdfWriter wri = PdfWriter.GetInstance(pdfDoc, new FileStream(FilePath, FileMode.Create));
         pdfDoc.Open();
         PdfPTable _mytable = new PdfPTable(DTable.Columns.Count);
 
         for (int j = 0; j < DTable.Columns.Count; ++j)
         {
             Phrase p = new Phrase(DTable.Columns[j].ColumnName, myfont);
             PdfPCell cell = new PdfPCell(p);
             cell.HorizontalAlignment = Element.ALIGN_CENTER;
             cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
             _mytable.AddCell(cell);
         }
         //-------------------------
         for (int i = 0; i < DTable.Rows.Count - 1; ++i)
         {
             for (int j = 0; j < DTable.Columns.Count; ++j)
             {
 
                 Phrase p = new Phrase(DTable.Rows[i][j].ToString(), myfont);
                 PdfPCell cell = new PdfPCell(p);
                 cell.HorizontalAlignment = Element.ALIGN_CENTER;
                 cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
                 _mytable.AddCell(cell);
             }
         }
         //------------------------           
         pdfDoc.Add(_mytable);
         pdfDoc.Close();
         System.Diagnostics.Process.Start(FilePath);
     }


CHill60

Неужели? Через 2 года после первоначального сообщения .. решение 5...