实例介绍
【实例简介】
【实例截图】
【核心代码】
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();
}
}
}
}
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论