c#集成itext7导出pdf,包含表格

在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后可以了。

cs 复制代码
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;
  }
相关推荐
Sour12 小时前
【无标题】aPPT 翻译后保留版式的流程:文本框、图片、母版和动画检查
pdf·powerpoint
无心水14 小时前
27、私有化部署|PaddleOCR-Server 本地OCR服务搭建
金融·pdf·ocr·pdf解析·pdf抽取·pdf提取·ocr服务
开开心心就好19 小时前
解决截图被拦截黑屏问题的免费小工具
安全·智能手机·flink·kafka·pdf·音视频·1024程序员节
软件工程小施同学20 小时前
CCF A区块链论文分享-NDSS 2026(2)-CtPhishCapture:揭露针对加密货币钱包的基于凭证窃取的网络钓鱼诈骗(附pdf)
网络·pdf·区块链
2601_9618451520 小时前
2026法考资料pdf|电子版|资料已整理
开发语言·前端框架·pdf·c#·xhtml·csrf·view design
qq_4221525720 小时前
PDF 解密工具怎么选?2026 年文档密码移除方案与注意事项
java·前端·pdf
Sour20 小时前
Word 文档翻译后保留格式的检查清单:标题、表格、图片、目录和批注
pdf·word·办公软件·office·文档翻译
Sour20 小时前
扫描版 PDF 翻译流程:OCR 识别、译文校对和排版保留
pdf·ocr
zyplayer-doc21 小时前
继飞书之后,又一款知识库推出了开源 Agent-Native CLI 工具
人工智能·pdf·编辑器·飞书·开源软件
辣香牛肉面21 小时前
Windows PDF转换工具箱
windows·pdf