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

embedded/2025/1/11 23:45:07/

在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;}


http://www.ppmy.cn/embedded/153153.html

相关文章

【ROS2】URDF模型文件中Xacro宏语言详解

1、简介 URDF(Unified Robot Description Format)是ROS中用于描述机器人模型的一种XML文件格式; 而Xacro则是为了优化URDF文件的编写过程而引入的一种XML宏语言; Xacro提高了URDF文件的可读性和复用性,可以在URDF文件中使用变量、数学运算和宏定义等功能; 比如:连杆、关…

ocrmypdf使用时的cannot import name ‘PdfMatrix‘ from ‘pikepdf‘问题

最近在做pdf的ocr,之前使用过ocrmypdf&#xff0c;打算再次使用&#xff0c;发现它更新了&#xff0c;所以就打算使用最新版 环境&#xff1a;win11anaconda 创建虚拟环境后安装语句&#xff1a; pip install ocrmypdf -i https://pypi.tuna.tsinghua.edu.cn/simple pip in…

微信小程序中使用weui组件库

这里只介绍官方推荐的通过useExtendedLib扩展库的方式引入&#xff0c;这种方式引入的组件将不计入代码包的大小。 app.json中配置 {"useExtendedLib": {"kbone": true,"weui": true} }在使用组件的页面的 json 文件加入 usingComponents 配置字…

静态路由配置与调试——计算机网络实训day1

文章目录 操作前准备一、实验目的二、实验要求三、实验过程1、在R1和R2上配置设备名称。基本配置设备命名 2、在R1和R2上配置接口IP地址&#xff0c;并查看IP地址的配置情况。3、在R1和R2上配置静态路由&#xff0c;并查看路由表。静态路由缺省路由&#xff08;默认路由&#x…

设计模式中的代理模式

在Java中&#xff0c;代理模式&#xff08;Proxy Pattern&#xff09;可以通过静态代理和动态代理两种主要方式实现。 一、静态代理模式 在编译时就已经确定了代理类和被代理类的关系。 代理类和目标对象通常实现相同的接口或继承相同父类。 缺点是对于每个需要代理的目标对象…

使用 SQL 和表格数据进行问答和 RAG(7)—将表格数据(CSV 或 Excel 文件)加载到向量数据库(ChromaDB)中

将表格数据&#xff08;CSV 或 Excel 文件&#xff09;加载到向量数据库&#xff08;ChromaDB&#xff09;中。这里定义的类 PrepareVectorDBFromTabularData&#xff0c;它的主要功能是读取表格数据文件到DataFrame中、生成嵌入向量、并将这些数据存储在向量数据库的集合中&am…

Electron使用记录

Electron 参考引用 参考文档&#xff1a; ElectronVue3.2TypeScriptVite开发桌面端 - 掘金 (juejin.cn) 如何用Electronvuevite构建桌面端应用(一) - 掘金 (juejin.cn) Electron教程&#xff08;三&#xff09;如何打包 electron 程序&#xff1a;electron-forge 的使用教程-C…

CRTP编程模式(奇异递归模板)实现客户端的https管理模块

一、什么是 CRTP&#xff08;Curiously Recurring Template Pattern&#xff09;&#xff1f; CRTP 是 C 中的一种编程技巧&#xff0c;它利用模板机制来实现静态多态性。 简单来说&#xff0c;CRTP 是指派生类在继承基类时&#xff0c;将自身作为模板参数传递给基类。通过这种…