在Nuget解决方案中搜索itext7,进行安装
同时还要安装 itext7.bouncy-castle-adapter。
否则 PdfWriter writer = new PdfWriter(pdfOutputPath);执行时会报错unknown PdfException,然后生成一个空白的pdf,且显示已损坏。
捕获异常发现 ex.InnerException
{"Either com.itextpdf:bouncy-castle-adapter or com.itextpdf:bouncy-castle-fips-adapter dependency must be added in order to use BouncyCastleFactoryCreator"},安装itext7.bouncy-castle-adapter后可以了。
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Layout.Borders;
using iText.IO.Font;/// <summary>/// 导出pdf/// </summary>/// <param name="pdfOutputPath">pdf导出路径</param>private static void exportPdf(string pdfOutputPath){PdfWriter writer = new PdfWriter(pdfOutputPath);PdfDocument pdf = new PdfDocument(writer);Document document = new Document(pdf);// 设置中文字体iText.Kernel.Font.PdfFont font = iText.Kernel.Font.PdfFontFactory.CreateFont("C://Windows//Fonts//SIMFANG.TTF", PdfEncodings.IDENTITY_H);document.Add(new Paragraph("添加段落").SetFont(font));//创建表格iText.Layout.Element.Table table = new iText.Layout.Element.Table(12) // 12列的表格.SetWidth(UnitValue.CreatePercentValue(100)) // 表格宽度为100%.SetMarginTop(10).SetMarginBottom(10).SetFont(font);// 添加表头table.AddCell(new Cell(1, 12).Add(new Paragraph("表头")).SetBackgroundColor(new DeviceRgb(217, 217, 217)).SetTextAlignment(TextAlignment.CENTER));// 添加内容table = fillTable(table, 1, 2, "test1:", 0, 15f);//fillTable 为自定义的方法table = fillTable(table, 1, 4, "测试1", 0, 35f);table = fillTable(table, 1, 2, "test2:", 0, 15f);table = fillTable(table, 1, 4, "测试2", 0, 35f);//单元格加入图片 string picPath = "E:/image/aaa.png";Image image = new Image(iText.IO.Image.ImageDataFactory.Create(picPath));image.Scale(0.5f, 0.5f); //依照比例缩放,根据实际图片大小,太大了会超出所以进行缩放image.SetMarginLeft(50f); //在单元格中的位置调整Cell cell = new Cell(13, 12).Add(image).SetBorder(new SolidBorder(1));table.AddCell(cell.SetWidth(UnitValue.CreatePercentValue(95f)).SetTextAlignment(TextAlignment.CENTER));// 添加表格到文档document.Add(table).SetFontSize(14);document.Close();}/// <summary>/// 填充表格/// </summary>/// <param name="table">表格</param>/// <param name="rowspant">单元格行数</param>/// <param name="colspant">列数</param>/// <param name="content">内容</param>/// <param name="bordert">边框 0无边框 1宽度为1的边框</param>/// <param name="percentt">宽度占比 例如100%就传入100</param>/// <returns></returns>private static iText.Layout.Element.Table fillTable(iText.Layout.Element.Table table, int rowspant, int colspant, string content, float bordert, float percentt){//边框判断Border borderTemp = null;if (bordert > 0){borderTemp = new SolidBorder(bordert);}if (content == null || content.Equals(""))//单元格空值填充{table.AddCell(new Cell(rowspant, colspant).SetBorder(borderTemp).SetWidth(UnitValue.CreatePercentValue(percentt)).SetTextAlignment(TextAlignment.CENTER));}else{//new Cell(rowspant, colspant) //创建单元格为几行几列,(1,1)为单个单元格,(x,x)为合并单元格//.Add(new Paragraph(content)) //添加单元格内容,如果为空不能写此项,否则报错//.SetBorder(borderTemp) //设置单元格边框//.SetWidth(UnitValue.CreatePercentValue(percentt)) //设置单元格宽度占比//.SetTextAlignment(TextAlignment.CENTER) //设置单元格内容居中table.AddCell(new Cell(rowspant, colspant).Add(new Paragraph(content)).SetBorder(borderTemp).SetWidth(UnitValue.CreatePercentValue(percentt)).SetTextAlignment(TextAlignment.CENTER));}return table;}