数据导出PDF文件

#region PDF文档生成
//调用生成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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值