效果图:
导语:
在我们做项目的过程中,经常会遇到一些服务性的需求,感到特别困扰,明明实用的价值不高,但是还是得实现;
因此小客在这里整理一下自己导出PDF的一些思路,供大家参考。
网上有很多导出PDF运用到的插件,大家也可以看看其他插件的使用,学习学习;
提要:
这里我使用的是-iTextSharp,供大家参考参考,借鉴方案,完善思路,补充自己,一起学习;
准备工作:
1、在自己的项目解决方案中---工具->Nuget程序管理包->程序管理控制台,安装iTextSharp插件;
Install-Package iTextSharp
Install-Package itextsharp.xmlworker
开始实现:
1、首先创建一个文档,便于后续toPdf
Document document = new Document(PageSize.A4, 5, 5, 20, 20);
2、定义好我们需要存储的路径
string path = Server.MapPath(@"..\Common\ExportWord\" + "xxxxxxxxxxx.pdf");
相对路径,Common\ExportWord 这两个文件夹必须是真实存在的;
3、根据存储的路径来创建文件流
FileStream fsPath = new FileStream(path, System.IO.FileMode.Create);
4、将文件流和新建的文档 放入PdfWriter中直接创建PDF格式的文件
PdfWriter writer = PdfWriter.GetInstance(document, fsPath);
5、创建字体样式,便于后面使用
BaseFont bfChinese = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//表格标题--字体设置
Font fontRukuHeader = new Font(bfChinese, 15, Font.NORMAL, BaseColor.BLACK);
//表格第一行标头--字体设置
Font fontTtitle = new Font(bfChinese, 10, Font.NORMAL, BaseColor.BLACK);
//表格数据--字体设置
Font fontGrid = new Font(bfChinese, 10);
6、打开文档,按照导出的需求模板来开始填充文档信息数据,
document.Open();
7、设置整个表格的总列数
PdfPTable table = new PdfPTable(7);
8、开始调整模板,根据你的需求来调整
PdfPCell firstCell = new PdfPCell(new Phrase("内部确认单", fontRukuHeader));
firstCell.Colspan = 7;//合并7行
firstCell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;//居中
firstCell.PaddingBottom = 6;
table.AddCell(firstCell);
9、将表格数据放入文档中
document.Close();
document.Add(table);
10、输出成PDF
PdfReader reader = new PdfReader(path);
MemoryStream stream = new MemoryStream();
PdfStamper pdfstamper = new PdfStamper(reader, stream);
pdfstamper.FormFlattening = true;
pdfstamper.Close();
reader.Close();
Byte[] btArray = stream.ToArray();
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
fs.Write(btArray, 0, btArray.Length);
fs.Flush();
fs.Close();
FileInfo downloadFile = new FileInfo(path);
string name = Path.GetFileName(path);
return File(path, 'application/pdf', Url.Encode(name));