博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iTextSharp生成pdf的一个简单例子
阅读量:6986 次
发布时间:2019-06-27

本文共 12210 字,大约阅读时间需要 40 分钟。

效果图:

参考:http://www.cnblogs.com/CareySon/archive/2011/11/09/2243496.html

         http://www.cnblogs.com/julyluo/p/3839788.html

itextsharp版本:4.1.6.0

代码:

///         /// Compare页面生成pdf功能。        ///         /// 国家        /// pn        /// 语言        /// 
响应对象
public string ComparePdf(string country, string[] pns, string language) { var result = ""; //生成pdf Document document = new Document(); //这样写:是生成一个文件到某目录中 //var directory = HttpContext.Current.Server.MapPath("~/pdf"); //string host = HttpContext.Current.Request.Url.Host; //int port = HttpContext.Current.Request.Url.Port; //if (!Directory.Exists(directory)) //{ // Directory.CreateDirectory(directory); //} //var fileName = ""; //foreach (var item in pns) //{ // fileName += "_" + item + "_"; //} //fileName = "Compare" + fileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf"; //var pdfPath = directory + "\\" + fileName; //var fileStream = new FileStream(pdfPath, FileMode.Create); //PdfWriter pw = PdfWriter.GetInstance(document, fileStream); //这样写:是生成文件到内存中去 var memoryStream = new MemoryStream(); PdfWriter pw = PdfWriter.GetInstance(document, memoryStream);//生成到内存中 //数据 var list = Compare(country, pns, language); document.Open();//打开文件 //写入数据 //注册字体 string fontpath = HttpContext.Current.Server.MapPath("~/App_Data"); BaseFont customfont = BaseFont.CreateFont(fontpath + "\\Lato-Regular.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); var baseFont = new Font(customfont, 14 * 0.667f, Font.NORMAL, new Color(68, 68, 68)); var leftFont = new Font(customfont, 14 * 0.667f, Font.BOLD, new Color(68, 68, 68)); #region 头部 PdfPTable tableLogo = new PdfPTable(3); tableLogo.DefaultCell.Border = Rectangle.NO_BORDER; tableLogo.DefaultCell.MinimumHeight = 40f; float[] headWidths = new float[] { 60f, 60f, 150f }; tableLogo.SetWidths(headWidths); //logo var logo = iTextSharp.text.Image.GetInstance("http://d1fyvoqprbjuee.cloudfront.net/smartfindimages/logo.png"); logo.ScaleToFit(130 * 0.667f, 43 * 0.667f); var logoCell = new PdfPCell(); logoCell.PaddingLeft = -1f; logoCell.MinimumHeight = 45f; logoCell.HorizontalAlignment = Element.ALIGN_LEFT; logoCell.Border = 0; logoCell.AddElement(logo); tableLogo.AddCell(logoCell); var headFont = new Font(customfont, 26 * 0.667f, Font.BOLD, new Color(68, 68, 68)); var sCell = new PdfPCell(new Paragraph("SmartFind", headFont)); sCell.Border = 0; sCell.PaddingLeft = 3f; sCell.PaddingBottom = 17f; sCell.MinimumHeight = 45f; sCell.HorizontalAlignment = Element.ALIGN_LEFT; sCell.VerticalAlignment = Element.ALIGN_BOTTOM; tableLogo.AddCell(sCell); var aCell = new PdfPCell(); aCell.Border = 0; aCell.MinimumHeight = 45f; aCell.PaddingBottom = 17f; aCell.HorizontalAlignment = Element.ALIGN_LEFT; aCell.VerticalAlignment = Element.ALIGN_BOTTOM; var accFont = new Font(customfont, 18 * 0.667f, Font.NORMAL, new Color(170, 170, 170)); var acc = new Paragraph("| Accessories", accFont); aCell.AddElement(acc); tableLogo.AddCell(aCell); document.Add(tableLogo); #endregion document.Add(new Paragraph("")); #region 中间的表格 PdfPTable table = new PdfPTable(list.Count + 1);//n列的表格 table.DefaultCell.Border = 0; table.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER; table.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE; //根据图片数量确定列数及列宽 if (pns.Count() == 1) { float[] widths = new float[] { 2f, 3f }; table.SetWidths(widths); } else if (pns.Count() == 2) { float[] widths = new float[] { 2f, 3f, 3f }; table.SetWidths(widths); } else if (pns.Count() == 3) { float[] widths = new float[] { 2f, 3f, 3f, 3f }; table.SetWidths(widths); } else if (pns.Count() == 4) { float[] widths = new float[] { 2f, 3f, 3f, 3f, 3f }; table.SetWidths(widths); } //左单元格 var leftCell = new PdfPCell(new Paragraph("Images", leftFont)); leftCell.MinimumHeight = 40f; leftCell.BackgroundColor = new Color(242, 242, 242); leftCell.HorizontalAlignment = Element.ALIGN_CENTER; leftCell.VerticalAlignment = Element.ALIGN_MIDDLE; table.AddCell(leftCell); //右单元格 var rightCell = new PdfPCell(); rightCell.HorizontalAlignment = Element.ALIGN_CENTER; rightCell.VerticalAlignment = Element.ALIGN_MIDDLE; rightCell.MinimumHeight = 40f; foreach (var item in list) { var imageCell = new PdfPCell(); imageCell.Padding = 1f; //根据图片数量确定左边距,确保图片在中间显示。这个地方写的不好,暂时这样 if (list.Count == 2) { imageCell.PaddingLeft = 30f; } if (list.Count == 1) { imageCell.PaddingLeft = 80f; } if (list.Count == 3) { imageCell.PaddingLeft = 10f; } //确保网络图片存在 if (!string.IsNullOrEmpty(item.Url) && Helper.IsExists(item.Url + "-218.png")) { var image = iTextSharp.text.Image.GetInstance(item.Url + "-218.png"); if (list.Count == 4) { image.ScaleToFit(80f, 80f); } else { image.ScaleToFit(100f, 100f); } imageCell.AddElement(image); } table.AddCell(imageCell); } //Product Title leftCell.Phrase = new Paragraph("Product Title", leftFont); var titleFont = new Font(customfont, 14 * 0.667f, Font.NORMAL, new Color(255, 105, 0)); table.AddCell(leftCell); foreach (var item in list) { rightCell.Phrase = new Paragraph(item.Title, titleFont); table.AddCell(rightCell); } //List Price leftCell.Phrase = new Paragraph("List Price", leftFont); table.AddCell(leftCell); foreach (var item in list) { rightCell.Phrase = new Paragraph(item.Currency + item.Price, baseFont); table.AddCell(rightCell); } //Part Number leftCell.Phrase = new Paragraph("Part Number", leftFont); table.AddCell(leftCell); foreach (var item in list) { rightCell.Phrase = new Paragraph(item.PN, baseFont); table.AddCell(rightCell); } //facet var first = list.FirstOrDefault(); foreach (var item in first.Facets) { leftCell.Phrase = new Paragraph(item.Key, leftFont); table.AddCell(leftCell); rightCell.Phrase = new Paragraph(item.Value, baseFont); table.AddCell(rightCell); //其余的 list.Remove(first); var other = list; foreach (var one in other) { rightCell.Phrase = new Paragraph(one.Facets.FirstOrDefault(o => o.Key == item.Key).Value, baseFont); table.AddCell(rightCell); } } document.Add(table); #endregion //页脚 PDFFooter footer = new PDFFooter(); footer.OnEndPage(pw, document); document.Close(); var bytes = memoryStream.ToArray(); result = Convert.ToBase64String(bytes); return result; }/// /// 页脚类 /// public class PDFFooter : PdfPageEventHelper { // write on top of document public override void OnOpenDocument(PdfWriter writer, Document document) { base.OnOpenDocument(writer, document); PdfPTable tabFot = new PdfPTable(new float[] { 1F }); tabFot.SpacingAfter = 10F; PdfPCell cell; tabFot.TotalWidth = 300F; cell = new PdfPCell(new Phrase("Header")); tabFot.AddCell(cell); tabFot.WriteSelectedRows(0, -1, 150, document.Top, writer.DirectContent); } // write on start of each page public override void OnStartPage(PdfWriter writer, Document document) { base.OnStartPage(writer, document); } // write on end of each page public override void OnEndPage(PdfWriter writer, Document document) { base.OnEndPage(writer, document); PdfPTable tabFot = new PdfPTable(new float[] { 1F }); tabFot.TotalWidth = 700f; tabFot.DefaultCell.Border = 0; // var footFont = FontFactory.GetFont("Lato", 12 * 0.667f, new Color(60, 60, 60)); string fontpath = HttpContext.Current.Server.MapPath("~/App_Data"); BaseFont customfont = BaseFont.CreateFont(fontpath + "\\Lato-Regular.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); var footFont = new Font(customfont, 12 * 0.667f, Font.NORMAL, new Color(170, 170, 170)); PdfPCell cell; cell = new PdfPCell(new Phrase("@ 2016 . All Rights Reserved", footFont)); cell.VerticalAlignment = Element.ALIGN_CENTER; cell.Border = 0; cell.PaddingLeft = 100f; tabFot.AddCell(cell); tabFot.WriteSelectedRows(0, -1, 150, document.Bottom, writer.DirectContent); } //write on close of document public override void OnCloseDocument(PdfWriter writer, Document document) { base.OnCloseDocument(writer, document); } }

  

///         /// 判断网络文件是否存在        ///         ///         /// 
public static bool IsExists(string url) { try { using (new WebClient().OpenRead(url)) { } return true; } catch (WebException) { return false; } }

  其他注意点:

1、当字体不支持中文、日文、繁体中文

public string[] ChineseFont = new string[] { "Traditional Chinese [zh-tw]", "Japanese [ja]" }; BaseFont customfont = BaseFont.CreateFont(fontpath + "\\Lato-Regular.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);            if (ChineseFont.Contains(data.Language))            {                customfont = BaseFont.CreateFont(fontpath + "\\msyh.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);            }

要写BaseFont.IDENTITY_H

2、表格的边框

设置 table.DefaultCell.Border = 0;是不能约束单元格的边框的,必须每个单元格单独设置边框pnCell.Border=0或设置其他宽度及四面是否显示。

3、表格位置

一个表格默认是在页面中居中对齐,要设置 左对齐: pnTable.HorizontalAlignment = Element.ALIGN_LEFT;

4、表格中嵌套表格

嵌套的表格不会占满此行,设置了此表格左对齐,右边留白很多。要完全设置表格的宽度,并且锁定才行。

pnTable.TotalWidth = 404 * 0.667f;

pnTable.LockedWidth = true;

5、链接。

链接要用块来实现。

var linkCell = new PdfPCell();            linkCell.BorderWidthTop = 0;            linkCell.Padding = 5f;            linkCell.PaddingLeft = 10f;            linkCell.PaddingBottom = 20f;            var chunk = new Chunk("More Information", link14);            chunk.SetAnchor("http://accsmartfind.lenovo.com/products/" + model.PN);            linkCell.AddElement(chunk);            table.AddCell(linkCell);

6、样式。

样式不行表格来凑,如果样式还不出来,再加一个表格。

 

代码:  ,里面的对象数据要自己添加些调试。vs2013.

转载于:https://www.cnblogs.com/heifengwll/p/6235383.html

你可能感兴趣的文章
架构设计复杂度的6个来源
查看>>
Netflix混沌工程手册Part 2:混沌工程原则
查看>>
矩阵:如何使用矩阵操作进行 PageRank 计算?
查看>>
阿里云储道深度解析存储系统设计——NVMe SSD性能影响因素一探究竟
查看>>
2016:编写高性能的JavaScript
查看>>
[算法]-将功赎过(js求二进制的两种方式)
查看>>
探索前端黑科技——通过 png 图的 rgba 值缓存数据
查看>>
总结移动开发实践中遇到的坑
查看>>
极客学院#2:HTML5
查看>>
【友盟+】推送Android SDK 3.0发布,一次拯救消息到达率的迭代
查看>>
梯度下降法变种的汇总
查看>>
技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)
查看>>
安装Xcache,配置管理页面
查看>>
Git常用命令和Git团队使用规范指南
查看>>
swift 监测网络状态
查看>>
那是我夕阳下的奔跑 —— Gemini
查看>>
一个不错的抛物线js效果
查看>>
优麒麟 16.04.6 LTS 版本发布!
查看>>
Ant Motion 1.7.0 发布,React 框架动效解决方案
查看>>
如何解决不能使用Process的Start方法运行一个程序的问题。
查看>>