在好例子网,分享、交流、成长!
您当前所在位置:首页ASP 开发实例ASP/Basic基础 → iText 生成pdf Demo应用

iText 生成pdf Demo应用

ASP/Basic基础

下载此实例
  • 开发语言:ASP
  • 实例大小:0.15M
  • 下载次数:17
  • 浏览次数:382
  • 发布时间:2016-01-29
  • 实例类别:ASP/Basic基础
  • 发 布 人:北虫
  • 文件格式:.rar
  • 所需积分:2
 相关标签: iText d demo

实例介绍

【实例简介】

【实例截图】


【核心代码】


using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using iTextSharp.text;
using iTextSharp.text.pdf;
using Microsoft.VisualBasic.FileIO;

namespace iTextDemo
{
    public class ReportDemo
    {

        BaseFont BF_Light = BaseFont.CreateFont(@"C:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        string imagePath = "../../Data/分辨率使用情况报告_2014.04-2014.06.jpg";
        

        public ReportDemo()
        {

        }

        public void GeneratePDFReport()
        {
            Document document = new Document();
            using (document)
            {
               PdfWriter writer= PdfWriter.GetInstance(document, new FileStream(string.Format("{0}-{1}.pdf", DateTime.Now.Second, DateTime.Now.Millisecond),
                    FileMode.Create));

                document.Open();
                document.Add(GetBaseTable());            
                document.Add(GetBaseAndImageTable());

                DirectDrawReport(writer.DirectContentUnder);

                document.NewPage();

                document.Add(GetAllInfoTable());
            }
        }

        private PdfPTable GetAllInfoTable()
        {
            PdfPTable table = new PdfPTable(4);
            table.WidthPercentage = 100f;
            table.SetWidths(new int[] { 1, 3, 2, 18 });

            PdfPCell cell;
            Paragraph p;
            int rowNum = 0;
            int textColumNum = 3;

            using (TextFieldParser parser = new TextFieldParser("../../Data/screen.csv", UTF8Encoding.UTF8, true))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");
                while (!parser.EndOfData)
                {
                    string[] fields = parser.ReadFields();
                    if (rowNum > 0)
                    {
                        for (int i = 0; i < textColumNum; i  )
                        {
                            p = new Paragraph(fields[i], new Font(BF_Light, 10));
                            cell = new PdfPCell(p);
                            cell.Border = Rectangle.NO_BORDER;
                            table.AddCell(cell);
                        }

                        string fileName = string.Format("../../Data/{0}.csv", fields[1]);
                        float yMax = float.Parse(fields[3]);
                        float yScale = float.Parse(fields[4]);
                        

                        cell = new PdfPCell(new Phrase(""));
                        cell.MinimumHeight = 55f;
                        cell.Border = Rectangle.NO_BORDER;
                        //画图的类,和cell关联                        
                        ResolutionChart chart = new ResolutionChart(fileName, yMax, yScale);
                        cell.CellEvent = chart;
                        table.AddCell (cell);
                        rowNum  ;

                    }
                    else
                    {
                        rowNum  ;
                    }
                }
            }
           

            return table;
        }

        private PdfPTable GetBaseAndImageTable()
        {
            PdfPTable table = new PdfPTable(2);
            table.WidthPercentage = 100f;

            PdfPCell cell;

            //图片
            Image image = Image.GetInstance(imagePath);
            cell = new PdfPCell(image, true);
            table.AddCell(cell);

            //表格
            PdfPTable baseTable = GetBaseTable();
            cell = new PdfPCell(baseTable);
            table.AddCell(cell);

            table.SpacingBefore = 20f;

            return table;
        }

        private PdfPTable GetBaseTable()
        {
            PdfPTable table = new PdfPTable(3);

            PdfPCell cell;
            Paragraph p;
            int mainColumn = 3;
            int rowNum = 0;

            using (TextFieldParser parser = new TextFieldParser("../../Data/screen.csv", UTF8Encoding.UTF8, true))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");
                while (!parser.EndOfData)
                {
                    string[] fields = parser.ReadFields();
                    if (fields.Length > mainColumn-1)
                    {
                        for (int i = 0; i < mainColumn; i  )
                        {
                            //要设置字体和大小
                            p = new Paragraph(fields[i], new Font(BF_Light, 13));
                            cell = new PdfPCell(p);
                            //设置cell属性
                            //cell.Border = Rectangle.NO_BORDER;
                            if (rowNum == 0)
                            {
                                cell.BackgroundColor = BaseColor.GRAY;
                            }
                            if (i == mainColumn - 1)
                            {
                                cell.HorizontalAlignment = Element.ALIGN_RIGHT;
                            }
                            //添加单元格
                            table.AddCell(cell);
                        }
                        rowNum  ;
                    }
                }
            }

            return table;
        }

        private void DirectDrawReport(PdfContentByte canvas)
        {
            //画线
            canvas.SaveState();
            canvas.SetLineWidth(2f);
            canvas.MoveTo(100, 100);
            canvas.LineTo(200, 200);
            canvas.Stroke();
            canvas.RestoreState();

            //文本
            ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, new Phrase("JulyLuo测试", new Font(BF_Light, 10)), 100, 20, 0);
        }

        class ResolutionChart : IPdfPCellEvent
        {
            string fileName;
            float yMax;
            float yScaleNum;
            float marginLeft;
            float marginRight;
            float marginTop;
            float marginBottom;
           BaseFont BF_Light = BaseFont.CreateFont(ConfigurationManager.AppSettings["ReportFont"], BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

            public ResolutionChart(string fileName, float yMax, float yScaleNum)
            {
                this.fileName = fileName;
                this.yMax = yMax;
                this.yScaleNum = yScaleNum;
                marginBottom =  marginRight = marginTop = 5f;
                marginLeft = 10f;
            }

            public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
            {
                PdfContentByte cb = canvases[PdfPTable.BACKGROUNDCANVAS];
                PdfContentByte cbline = canvases[PdfPTable.LINECANVAS];

                cbline.SaveState();
                cb.SaveState();

                int totalMonths = 91;

                float leftX = position.Left   marginLeft;
                float bottomY = position.Bottom   marginBottom;

                float righX = position.Right - marginRight;
                float topY = position.Top - marginTop;

                float xScale = (righX - leftX) / totalMonths;
                float yScale = (topY - bottomY) / yMax;

                cb.SetLineWidth(0.4f);
                cbline.SetLineWidth(0.4f);
                //y 轴
                cb.MoveTo(leftX, bottomY);
                cb.LineTo(leftX, topY);
                cb.Stroke();
                //y 轴突出的短横线
                float yAxiseTextLinetWidth = 3f;
                float yAxisTextSpaceAdjust = 2.5f;
                for (float y = yScaleNum; y < yMax; y  = yScaleNum)
                {
                    float yPoint = bottomY   (yScale * y);
                    cb.MoveTo(leftX, yPoint);
                    cb.LineTo(leftX - yAxiseTextLinetWidth, yPoint);
                    cb.Stroke();
                }
                //y 轴文本
                for (float y = yScaleNum; y < yMax; y  = yScaleNum)
                {
                      float yPoint = bottomY   (yScale * y);
                      ColumnText.ShowTextAligned(cb, Element.ALIGN_RIGHT, new Phrase(string.Format("{0}%", y), new Font(BF_Light, 5)), leftX - yAxiseTextLinetWidth, yPoint - yAxisTextSpaceAdjust, 0);
                }
                
                //x 轴
                cb.MoveTo(leftX, bottomY);
                cb.LineTo(righX, bottomY);
                cb.Stroke();

                int monthNum = 1;

                cb.SetRGBColorStroke(0xFF, 0x45, 0x00);

                cbline.SetLineDash(2f);

                using (TextFieldParser parser = new TextFieldParser(fileName, UTF8Encoding.UTF8, true))
                {
                    parser.TextFieldType = FieldType.Delimited;
                    parser.SetDelimiters(",");
                    while (!parser.EndOfData)
                    {
                        string[] fields = parser.ReadFields();
                        
                        if (fields.Length > 2)
                        {
                            float oneMonthValue=float.Parse(fields[1].TrimEnd('%'));
                            float xPoint = (monthNum - 1) * xScale   leftX;
                            float yPoint = bottomY   (yScale * oneMonthValue);

                            if (monthNum == 1)
                            {
                                cb.MoveTo(xPoint, yPoint);
                            }
                            else
                            {
                                cb.LineTo(xPoint, yPoint);
                            }

                            if (monthNum % 7 == 0)
                            {
                                cbline.MoveTo(xPoint, yPoint);
                                cbline.LineTo(xPoint, bottomY);
                               
                                cbline.Stroke();

                                string month = fields[0].Substring(7, 5);
                                ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER, new Phrase(month, new Font(BF_Light, 5)), xPoint, bottomY-5f, 0);
                            }
                        }
                        monthNum  ;
                    }
                }

                cb.Stroke();

                cb.RestoreState();
                cbline.RestoreState();
            }
        }
    }
}


标签: iText d demo

实例下载地址

iText 生成pdf Demo应用

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警