//调用生成PDF的方法。
WritePdf(@"D:\乱七八糟\123.pdf", NewList);
/// <summary>
/// 在指定路径生成PDF文档。
/// </summary>
/// <param name="asSaveFilePath">PDF文档保存路径</param>
/// <param name="asList">数据集合</param>
private void WritePdf(string asSaveFilePath, List<Idea.Web.Interface.VisitCount.Type.CStat_ViewDay> asList)
{
//创建一个新文档,纸张采用横向A4纸,距上下左右的边距均为10。
Document document = new Document(PageSize.A4.rotate(), 10, 10, 20, 10);
try
{
//不知具体用途,文件保存名,存在则覆盖,不存在则创建。
PdfWriter.getInstance(document, new FileStream(asSaveFilePath, FileMode.Create));
//添加页眉。
HeaderFooter header = new HeaderFooter(new Phrase("日访问量分布 (" + myCStatInfo.StartTime.ToString("yyyy-MM-dd") + ")>(" + myCStatInfo.EndTime.ToString("yyyy-MM-dd") + ")"), false);
document.Header = header;
//打开文档。
document.Open();
//生成文档内容并写入。
loadDocument(document, asList);
}
catch
{
}
finally
{
document.Close();
}
}
public static void loadDocument(Document document, List<Idea.Web.Interface.VisitCount.Type.CStat_ViewDay> asList)
{
//文档列数。
int NumColumns = 9;
try
{
//创建PDF文档中的字体
BaseFont baseFont = BaseFont.createFont(@"C:\WINDOWS\Fonts\SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//根据字体路径和字体大小属性创建字体
Font font = new Font(baseFont, 12, Font.NORMAL);
//创建一个指定列数的表。
PdfPTable datatable = new PdfPTable(NumColumns);
datatable.DefaultCell.Padding = 3;
//指定每列的宽度。
float[] headerwidths = { 9, 4, 8, 10, 8, 11, 9, 7, 9 };
datatable.setWidths(headerwidths);
//应该是总体宽度为100。
datatable.WidthPercentage = 100; // percentage
//指定表头标题的边框样式。
datatable.DefaultCell.BorderWidth = 2;
//指定表头标题的内容横向居中。
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
//指定表头标题的内容纵向居中。
datatable.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;
//指定表头标题的内容。
datatable.addCell(new Paragraph("日 期", font));
datatable.addCell(new Paragraph("点击率", font));
datatable.addCell(new Paragraph("IP", font));
datatable.addCell(new Paragraph("独立访客", font));
datatable.addCell(new Paragraph("新访客", font));
datatable.addCell(new Paragraph("访问次数", font));
datatable.addCell(new Paragraph("回访次数", font));
datatable.addCell(new Paragraph("人均PV", font));
datatable.addCell(new Paragraph("PV比例", font));
//应该是指定每页是否显示表头。
datatable.HeaderRows = 1;
//指定单元格的边框宽度。
datatable.DefaultCell.BorderWidth = 1;
int max = asList.Count;
Idea.Web.Interface.VisitCount.Type.CStat_ViewDay myCStat_ViewDay1 = new Idea.Web.Interface.VisitCount.Type.CStat_ViewDay();
int ipCount = 0, pvCount = 0, cusCount = 0, newCount = 0, timCount = 0, otimCount = 0;
for (int j = 0; j < asList.Count; j++)
{
ipCount += asList[j].ipCount;
pvCount += asList[j].pvCount;
cusCount += asList[j].cusCount;
newCount += asList[j].newCount;
timCount += asList[j].timCount;
otimCount += asList[j].otimCount;
}
myCStat_ViewDay1.ipCount = ipCount;
myCStat_ViewDay1.ipCount = pvCount;
myCStat_ViewDay1.ipCount = cusCount;
myCStat_ViewDay1.newCount = newCount;
myCStat_ViewDay1.timCount = timCount;
myCStat_ViewDay1.otimCount = otimCount;
asList[0].ipCount = ipCount;
asList[0].pvCount = pvCount;
asList[0].cusCount = cusCount;
asList[0].newCount = newCount;
asList[0].timCount = timCount;
asList[0].otimCount = otimCount;
for (int i = 0; i < max; i++)
{
if (i % 2 == 1)
{
datatable.DefaultCell.GrayFill = 0.9f;
}
string riqi = "";
if (asList[i].vYear != 0 && asList[i].vMonth != 0 && asList[i].vDay != 0)
{
riqi = asList[i].vYear + "年" + asList[i].vMonth + "月" + asList[i].vDay + "日";
}
else
{
riqi = "总 计";
}
datatable.addCell(new Paragraph(riqi.ToString(), font));
datatable.addCell(new Paragraph(asList[i].pvCount.ToString(), font));
datatable.addCell(new Paragraph(asList[i].ipCount.ToString(), font));
datatable.addCell(new Paragraph(asList[i].cusCount.ToString(), font));
datatable.addCell(new Paragraph(asList[i].newCount.ToString(), font));
datatable.addCell(new Paragraph(asList[i].timCount.ToString(), font));
datatable.addCell(new Paragraph(asList[i].otimCount.ToString(), font));
datatable.addCell(new Paragraph(asList[i].AVG.ToString("0.0"), font));
if (asList[i].pvCount != 0 && asList[0].pvCount != 0)
{
asList[i].Percent = (float)(Convert.ToDouble(asList[i].pvCount) / Convert.ToDouble(asList[0].pvCount)) * 100;
}
datatable.addCell(new Paragraph(asList[i].Percent.ToString("0.00") + "%", font));
if (i % 2 == 1)
{
datatable.DefaultCell.GrayFill = 0.0f;
}
}
document.Add(datatable);
}
catch (Exception e)
{
Console.Error.WriteLine(e.StackTrace);
}
}
#endregion