Как экспортировать datatable в PDF с помощью C# windows forms
Как написать или экспортировать datatable (datagridview) в PDF с помощью C# windows forms? Я использую библиотеку itextsharp.dll
Пожалуйста, обратитесь к следующим темам:
Учебные пособия по созданию 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#[^]
спасибо
Пожалуйста!
Приятно!
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()); } } } }
это мой источник данных :
запрос частная недействительным(объект отправителя, 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);
}
}
док. добавить (абзац);
док.Закрывать();
Ящик для сообщений.Показать("Отчет Создан!");
}
он не может быть запущен. можете ли вы помочь мне, пожалуйста?
Хороший ответ!
Да
Проверьте по этому адресу следующие коды:
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(); }
спасибо, но это не помогает. он не будет работать в моем приложении. Я использую приложение visual c# windows form. можете ли вы дать ссылку на отчет в visual studio express edition 2008?? помоги мне, пожалуйста....
Мои 5!
Объект 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 неправильный синтаксис рядом с '.'.
может ли кто-нибудь помочь мне в этом вопросе
Приятно!
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); }
Неужели? Через 2 года после первоначального сообщения .. решение 5...