62,047
社区成员
发帖
与我相关
我的任务
分享
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Web.UI.WebControls; // GridView
using System; // String
using System.Web; // HttpContext
using System.Web.UI;
using System.Text;
//using System.Drawing;
namespace EggAspNetStudy.Common
{
/// <summary>
/// 将DataTable转化为PDF文件的方法
/// </summary>
public class GrdToPDF
{
public GrdToPDF()
{
}
#region ConvertGrdiViewToPDF_EachPageHeader() -> 换GridView为PDF文档,每一页都有表头
/// <summary>
/// 转换GridView为PDF文档
/// </summary>
/// <param name="pobjGrdv">GridView</param>
/// <param name="PDFFileName">目标PDF文件名字</param>
/// <param name="FontPath">字体所在路径</param>
/// <param name="FontSize">字体大小</param>
/// <returns>返回调用是否成功</returns>
public static void ConvertGrdiViewToPDF_EachPageHeader(GridView pobjGrdv, string PDFFileName, string FontPath, float FontSize)
{
//string strFileName = PDFFileName + "_" + DateTime.Now.ToString("yyyyMMddHmmss") + ".pdf";
string strFileName = PDFFileName + ".pdf";
//初始化一个目标文档类
//Document document = new Document();
//竖排模式,大小为A4,四周边距均为25
Document document = new Document(PageSize.A4, 25, 25, 25, 25);
//横排模式,大小为A4,四周边距均为50
//Document doc = new Document(PageSize.A4.rotate(),50,50,50,50);
//调用PDF的写入方法流
//注意FileMode-Create表示如果目标文件不存在,则创建,如果已存在,则覆盖。
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(HttpContext.Current.Server.MapPath(strFileName), FileMode.Create));
//创建PDF文档中的字体
BaseFont baseFont = BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
//根据字体路径和字体大小属性创建字体
Font font = new Font(baseFont, FontSize);
// 添加页脚
//HeaderFooter footer = new HeaderFooter(new Phrase(footertxt), true);
HeaderFooter footer = new HeaderFooter(new Phrase("-- ", font), new Phrase(" --", font));
footer.Border = Rectangle.NO_BORDER; // 不显示两条横线
footer.Alignment = Rectangle.ALIGN_CENTER; // 让页码居中
document.Footer = footer;
//打开目标文档对象
document.Open();
//根据数据表内容创建一个PDF格式的表
PdfPTable table = new PdfPTable(pobjGrdv.Columns.Count);
//iTextSharp.text.Table table = new iTextSharp.text.Table(pobjGrdv.Columns.Count);
// GridView的所有数据全输出
pobjGrdv.AllowPaging = false;
// ---------------------------------------------------------------------------
// 添加表头
// ---------------------------------------------------------------------------
// 设置表头背景色
//table.DefaultCell.BackgroundColor = Color.GRAY; // OK
//table.DefaultCell.BackgroundColor = (iTextSharp.text.Color)System.Drawing.Color.FromName("#3399FF"); // NG
table.DefaultCell.BackgroundColor = iTextSharp.text.Color.LIGHT_GRAY;
//table.DefaultCell.BackgroundColor = System.Drawing.Color.DodgerBlue;
// 添加表头
for (int j = 0; j < pobjGrdv.Columns.Count; j++)
{
table.AddCell(new Phrase(pobjGrdv.HeaderRow.Cells[j].Text, font)); // OK
}
// 告诉程序这行是表头,这样页数大于1时程序会自动为你加上表头。
table.HeaderRows = 1;
// ---------------------------------------------------------------------------
// 添加数据
// ---------------------------------------------------------------------------
// 设置表体背景色
table.DefaultCell.BackgroundColor = Color.WHITE;
//遍历原gridview的数据行
for (int i = 0; i < pobjGrdv.Rows.Count; i++)
{
for (int j = 0; j < pobjGrdv.Columns.Count; j++)
{
table.AddCell(new Phrase(pobjGrdv.Rows[i].Cells[j].Text, font));
}
}
//在目标文档中添加转化后的表数据
document.Add(table);
//关闭目标文件
document.Close();
//关闭写入流
writer.Close();
// Dialog
String FullFileName = System.Web.HttpContext.Current.Server.MapPath(strFileName);//这里是你文件在项目中的位置,根目录下就这么写
FileInfo DownloadFile = new FileInfo(FullFileName);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.ClearHeaders();
System.Web.HttpContext.Current.Response.Buffer = false;
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));
System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
System.Web.HttpContext.Current.Response.WriteFile(DownloadFile.FullName);
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.End();
}
//然后,在要调用转换的按钮的事件代码中调用就可以了
//假设传进去的GridView的名字为GridView1
//假设要保存的文件名为GridView的ID
//假设字体使用simsun (请注意根据你电脑的实际情况来选择目录)
//假设字号选择14
//GrdToPDF.ConvertGrdiViewToPDF_EachPageHeader(this.GridView1, this.GridView1.ID.ToString(), "c:\\winnt\\FONTS\\simsun.ttc,1", 14);
#endregion
}
}
CREATE TABLE KOUT_EXTBL_USERS
(
項番 NUMBER,
名前 VARCHAR2(30),
性別 CHAR(2),
年齢 NUMBER,
電話番号 VARCHAR2(30),
メールアドレス VARCHAR2(50),
住所 VARCHAR2(100),
更新日時 DATE DEFAULT sysdate
)
PCTFREE 10
MAXTRANS 255
TABLESPACE OTC_DTA
STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)
NOCACHE
LOGGING
/
INSERT INTO KOUT_EXTBL_USERS values('1','ユーザーA','男','25','080-1111-1001',
'testuser01@yahoo.co.jp','東京都文京区茗荷谷',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('2','ユーザーB','女','20','080-1111-1002',
'testuser02@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('3','ユーザーC','男','26','080-1111-1003',
'testuser03@hotmail.co.jp','東京都墨田区押上',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('4','ユーザーD','女','25','080-1111-1004',
'testuser04@yahoo.co.jp','東京都文京区茗荷谷',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('5','ユーザーE','女','17','080-1111-1005',
'testuser05@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('6','ユーザーF','男','26','080-1111-1006',
'testuser06@hotmail.co.jp','東京都中央区八丁堀',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('7','ユーザーG','男','25','080-1111-1007',
'testuser07@yahoo.co.jp','東京都文京区茗荷谷',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('8','ユーザーH','女','23','080-1111-1008',
'testuser08@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('9','ユーザーI','男','26','080-1111-1009',
'testuser09@hotmail.co.jp','東京都墨田区押上',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('10','ユーザーJ','女','18','080-1111-1010',
'testuser10@yahoo.co.jp','東京都文京区茗荷谷',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('11','ユーザーK','女','23','080-1111-1011',
'testuser11@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('12','ユーザーL','男','26','080-1111-1012',
'testuser12@hotmail.co.jp','東京都中央区八丁堀',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('13','ユーザーM','女','25','080-1111-1013',
'testuser13@yahoo.co.jp','東京都文京区茗荷谷',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('14','ユーザーN','女','30','080-1111-1014',
'testuser14@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('15','ユーザーO','男','26','080-1111-1015',
'testuser15@hotmail.co.jp','東京都墨田区押上',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('16','ユーザーP','男','25','080-1111-1016',
'testuser16@yahoo.co.jp','東京都文京区茗荷谷',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('17','ユーザーQ','女','23','080-1111-1017',
'testuser17@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('18','ユーザーR','男','35','080-1111-1018',
'testuser18@hotmail.co.jp','東京都墨田区押上',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('19','ユーザーS','女','25','080-1111-1019',
'testuser19@yahoo.co.jp','東京都文京区茗荷谷',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('20','ユーザーT','女','23','080-1111-1020',
'testuser20@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('21','ユーザーU','男','26','080-1111-1021',
'testuser21@hotmail.co.jp','東京都中央区八丁堀',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('22','ユーザーV','男','33','080-1111-1022',
'testuser22@hotmail.co.jp','東京都墨田区押上',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('23','ユーザーW','男','50','080-1111-1023',
'testuser23@yahoo.co.jp','東京都中央区八丁堀',to_date('2008/07/28 15:27:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('24','ユーザーX','女','23','080-1111-1024',
'testuser24@yahoo.co.jp','東京都新宿区大久保',to_date('2008/07/28 15:28:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('25','ユーザーY','男','45','080-1111-1025',
'testuser25@hotmail.co.jp','東京都中央区八丁堀',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
INSERT INTO KOUT_EXTBL_USERS values('26','ユーザーZ','女','26','080-1111-1026',
'testuser26@hotmail.co.jp','東京都墨田区押上',to_date('2008/07/29 15:29:00', 'yyyy/MM/dd hh24:mi:ss')
)
/
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test04_GrdToPDFUseComm.aspx.cs" Inherits="themes_01_GridViewExportToPDF_test04_GrdToPDFUseComm" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="PDF出力" />
<asp:SqlDataSource ID="DataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:connStrMaximT6.ProviderName %>"
SelectCommand="
SELECT
項番
,名前
,性別
,年齢
,電話番号
,メールアドレス
,住所
FROM
KOUT_EXTBL_USERS
ORDER BY
項番 ASC
">
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="DataSource1" EnableViewState="False"
AllowPaging="True" DataKeyNames="項番" CellPadding="4" ForeColor="#333333" GridLines="Both">
<Columns>
<asp:BoundField DataField="項番" HeaderText="項番" ReadOnly="True" SortExpression="項番" />
<asp:BoundField DataField="名前" HeaderText="名前" ReadOnly="True" SortExpression="名前" />
<asp:BoundField DataField="性別" HeaderText="性別" ReadOnly="True" SortExpression="性別" />
<asp:BoundField DataField="年齢" HeaderText="年齢" ReadOnly="True" SortExpression="年齢" />
<asp:BoundField DataField="電話番号" HeaderText="電話番号" ReadOnly="True" SortExpression="電話番号" />
<asp:BoundField DataField="メールアドレス" HeaderText="メールアドレス" ReadOnly="True" SortExpression="メールアドレス" />
<asp:BoundField DataField="住所" HeaderText="住所" ReadOnly="True" SortExpression="住所" />
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor=Pink />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Left" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using EggAspNetStudy.Common;
using iTextSharp.text;
public partial class themes_01_GridViewExportToPDF_test04_GrdToPDFUseComm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
GrdToPDF.ConvertGrdiViewToPDF_EachPageHeader(this.GridView1, this.GridView1.ID.ToString(), "c:\\winnt\\FONTS\\simsun.ttc,1", 14);
}
catch (DocumentException de)
{
Response.Write(de.ToString());
}
}
}