C# 写pdf文件(写入表格)
最近在公司接手了一个检测软件的项目,其中里面就包含了一个模块是需要将检测出来的数据写入pdf文件中保存!
为此,参考了公司前辈的一些代码,自己在项目中写了一边,懂得了一些心得,现将代码过程记录下来,分享!
一、准备工作
首先C#代码操作pdf文件,需要引用一个pdf官方提供的两个dll,去网上下载,并将其添加引用到项目即可!
如下:
可以在官网下载:https://sourceforge.net/projects/itextsharp/
或者點擊下面百度網盤鏈接進行下載:
链接:https://pan.baidu.com/s/1l1bstHyCNL8fFt_FMWInDg
提取码:cppp
如下面将其添加引用到自己的项目中去即可,
然后在代码中添加:
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
到此,准备工作已经做完!
接下来看看本次博客将带领大家要实现的效果:
就这么简单的一个表格
这里要跟大家讲明白一个概念,写入的表格并不是一次性创建的,而是先创建一部分小的表格,然后拼接成大表格的。如上图表格,就是通过八个小表格拼接而来的。这八个小表格分别是:
上图中,又可以总结分成三张表格进行拼接,如下三张:
所以呢,我是定义三个函数分别创建每一张表,然后再main函数中将他们拼接的。
二、创建一个pdf文件
注意,下面的操作基本上都是创建一个单元格PdfPCell,然后将数据写入单元格中,或者将表格设置到单元格中;最后才将创建一个最终PdfPTable表格,将单元格添加到表格中。
1. 创建一个空白的pdf文件
// 创建PDF文件
FileStream pdfFs = new FileStream("MyText.pdf", FileMode.Create);// 获取实例
Document doc = new Document();
PdfWriter.GetInstance(doc, pdfFs);// 打开pdf
doc.Open();// 关闭
doc.Close();
pdfFs.Close();
通过上面代码可以创建一个空白的pdf文件!
2. 一些辅助函数
a. 设置字号与字体颜色
不用理解其含义是什么,只需知道他有什么作用就行,怎么使用就行。
最终函数返回的是Font对象
/// <summary>
/// 设置字号与字体颜色
/// </summary>
/// <returns></returns>
private static Font SetFontSizeColor(int size, Color color) {BaseFont bfchinese = BaseFont.CreateFont(@"c:\windows\fonts\simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//simkai.ttfFont ChFont = new iTextSharp.text.Font(bfchinese, size, Font.BOLD, color);return ChFont;
}
b. 创建一行N列表格
/// <summary>
/// 创建一行N列表格
/// </summary>
/// <param name="columnNameList">列的元素</param>
/// <param name="fontSize">字号大小</param>
/// <returns></returns>
private static PdfPTable CreateOneRowTable(List<string> columnNameList, int fontSize) {// 定义表格对象,参数是该表格的列数PdfPTable table = new PdfPTable(columnNameList.Count);// 实现自动换页table.SplitLate = false;table.SplitRows = true;// 获取字号Font font = SetFontSizeColor(fontSize, Color.BLACK);// 定义单元格对象PdfPCell cell;int rowCount = columnNameList.Count;for (int i = 0; i < rowCount; i++) {if (columnNameList[i] != null) {cell = new PdfPCell(new Phrase(columnNameList[i], font)); // 将内容绑定到单元格中cell.HorizontalAlignment = 1; // 居中table.AddCell(cell);}}return table;
}
创建的表格效果如下:
- 一行一列的表格
- 一行N列的表格
c. 合并两个表格
将两张表上下合并
/// <summary>
/// 合并两个表格
/// </summary>
/// <param name="table1"></param>
/// <param name="table2"></param>
/// <returns></returns>
public static PdfPTable MergeTwoTable(PdfPTable table1, PdfPTable table2) {// 定义表格对象,参数代表是该表格一共由多少列PdfPTable table = new PdfPTable(1);// 定义单元格对象PdfPCell cell;// 实现自动换页table.SplitLate = false;table.SplitRows = true;// 这个函数写死是合并两个单元格int rowCount = 2;for (int i = 0; i < rowCount; i++) {switch (i) {case 0:// 单元格中添加表格1cell = new PdfPCell(table1);// 居中cell.Padding = 0;// 将单元格添加到表格中table.AddCell(cell);break;case 1:cell = new PdfPCell(table2);cell.Padding = 0;table.AddCell(cell);break;default:break;}}// 最后将合并好的表格返回return table;
}
创建的表格效果如下:
- 上下合并
- 上下合并
d. 合并多个表格
就是将多个表格进行上下合并(“合并两个表格”的升级版)
/// <summary>
/// 合并多个表格
/// </summary>
/// <param name="pdfList"></param>
/// <returns></returns>
public static PdfPTable MergeMultTable(List<PdfPTable> pdfList) {PdfPTable table = new PdfPTable(1);PdfPCell cell;table.SplitLate = false;table.SplitRows = true;// 将表格绑定到单元格中,然后将单元格插入汇总表格foreach (PdfPTable pdf in pdfList) {cell = new PdfPCell(pdf);cell.Padding = 0;table.AddCell(cell);}return table;
}
创建的表格效果如下:
e. 创建多行多列表格
就是创建一个表格有很多列和很多行单元格。
这里需要注意,他实现多行多列创建表格的方式是:
多列实现方式:定义表格对象时就指定了列数,这就是多列的实现方式;
多行实现方式:循环定义多个单元格,然后将单元格添加到表格中,当添加单元格的数量大于列数时,下一次添加单元格就会自动换行进行添加,以此方式达到多行效果!
/// <summary>
/// 创建多行多列表格
/// </summary>
/// <param name="column">表格列数</param>
/// <param name="columnDataNameList">表格中的数据</param>
/// <returns></returns>
private static PdfPTable CreateMultRowMultColumnTable(int column, List<string> columnDataNameList) {// 创建多列表格PdfPTable table = new PdfPTable(column);// 设置字号与字体颜色Font font = SetFontSizeColor(12, Color.RED);// 设置自动换页table.SplitLate = false;table.SplitRows = true;// 定义单元格PdfPCell cell;// 这里的意思是:// 将链表中的数据一个一个的设置到单元格中,然后单元格添加到表格中// 这里需要注意,因为我们定义表格对象是设置了列数,所以设置单元格达到表的列数后,再次往表中添加单元格会自动换行添加!int rowColumn = columnDataNameList.Count;for (int i = 0; i < rowColumn; i++) {// 实例化单元格对象,数据与字体设置到单元格中cell = new PdfPCell(new Phrase(columnDataNameList[i], font));cell.HorizontalAlignment = 1;// 将单元格添加到表格中table.AddCell(cell);}return table;
}
创建的表格效果如下:
注意:列数一定要满,就是你定义表格是3列的,那么就一定要定义三个单元格添加到表格中(或者六个、九个等),否则pdf文件会出问题!
f. 创建带行标题和一组数据的表格
也就是左边是一个标题,右边是内容的表格,看下面图片就知道啦!
/// <summary>
/// 创建带行标题和一组数据的表格
/// </summary>
/// <param name="columnTitleName">行标题</param>
/// <param name="messPDFTable">数据表格</param>
/// <param name="columnCount">数据表的比例</param>
/// <returns></returns>
private static PdfPTable CreateRowTitleRowDataTable(string columnTitleName, PdfPTable messPDFTable, int columnCount) {// 创建两列的表格PdfPTable table = new PdfPTable(2);// 设置列宽比例table.SetWidths(new int[] { 1, columnCount }); // 猜测:1比columnCount的比例// 设置自动换页table.SplitLate = false;table.SplitRows = true;// 设置字号字体颜色Font font = SetFontSizeColor(18, Color.BLUE);PdfPCell cell;int rowCount = 2;for (int i = 0; i < rowCount; i++) {switch (i) {case 0:cell = new PdfPCell(new Phrase(columnTitleName, font)); // 新建一个单元格,数据作为参数cell.HorizontalAlignment = 1;table.AddCell(cell); // 单元格添加到表格中break;case 1:cell = new PdfPCell(messPDFTable); // 新建一个单元格,表格作为参数cell.Padding = 0;table.AddCell(cell); // 单元格添加到表格中break;default:break;}}return table;
}
创建的表格效果如下:
这种类型的表格很常见吧!
好了,到了这里,辅助函数就已经写完,开始创建表格,并写入pdf文件中吧!
3. 创建表格
A. 标题部分表格创建
// 标题部分表格
public static PdfPTable SetTitlePDf() {// 定义一个字符串链表,用于存储填入表格中的数据List<string> text = new List<string>();text.Add("C#往PDF格式写入表格教程");PdfPTable tableMain = CreateOneRowTable(text, 20); // 创建一张仅有一行一列的表格text = new List<string>();text.Add("语文");text.Add("数学");text.Add("英语");text.Add("历史");text.Add("政治");text.Add("地理");text.Add("音乐");text.Add("体育");PdfPTable tableMain2 = CreateOneRowTable(text, 12); // 创建张仅有一行多列的表格// 将两张表合并成一张表PdfPTable table = MergeTwoTable(tableMain, tableMain2);return table;}
也就是这样的:
B. 个人信息部分表格创建
// 个人信息部分表格
public static PdfPTable SetMessPDF() {List<string> checkNameList = new List<string>();checkNameList.Add("姓名");checkNameList.Add("性别");checkNameList.Add("年龄");PdfPTable tableTitle = CreateOneRowTable(checkNameList, 15); // 生成一张表格checkNameList = new List<string>();checkNameList.Add("小明");checkNameList.Add("男");checkNameList.Add("20");checkNameList.Add("小红");checkNameList.Add("女");checkNameList.Add("22");checkNameList.Add("小黄");checkNameList.Add("男");checkNameList.Add("26");PdfPTable tableMess = CreateMultRowMultColumnTable(3, checkNameList); // 创建多行多列表格PdfPTable tableOverall = MergeTwoTable(tableTitle, tableMess); // 两张表格上下合并PdfPTable table = CreateRowTitleRowDataTable("个人信息", tableOverall, 3); // 合并左边带标题信息的表格return table;
}
也就是这样的:
C. 详细信息部分表格创建
// 详细信息部分表格
public static PdfPTable SetInfoPDF() {List<string> checkNameList = new List<string>();checkNameList.Add("姓名");checkNameList.Add("爱好");checkNameList.Add("特点");checkNameList.Add("身高");PdfPTable tableTitle = CreateOneRowTable(checkNameList, 15); // 生成一张标题表格checkNameList = new List<string>();checkNameList.Add("小明");checkNameList.Add("游泳");checkNameList.Add("擅长蛙泳");checkNameList.Add("170cm");checkNameList.Add("小红");checkNameList.Add("跳舞");checkNameList.Add("街舞鼻祖");checkNameList.Add("165cm");checkNameList.Add("小黄");checkNameList.Add("跑步");checkNameList.Add("短跑小王子");checkNameList.Add("172cm");PdfPTable tableMess = CreateMultRowMultColumnTable(4, checkNameList); // 根据数据创建多行多列表格PdfPTable tableOverall = MergeTwoTable(tableTitle, tableMess); // 将两张表合并成一张表// 新建一个表格,一行两列,第一列写入参数一数据,第二列放入参数二表格PdfPTable table = CreateRowTitleRowDataTable("详细信息", tableOverall, 3);return table;
}
也就是这样的:
D. Main函数中调用创建
private static void Main() {// 创建PDF文件FileStream pdfFs = new FileStream("MyText.pdf", FileMode.Create);// 获取实例Document doc = new Document();PdfWriter.GetInstance(doc, pdfFs);// 打开pdfdoc.Open();// 合并多个表格List<PdfPTable> allTable = new List<PdfPTable>();allTable.Add(SetTitlePDf());allTable.Add(SetMessPDF());allTable.Add(SetInfoPDF());PdfPTable table = MergeMultTable(allTable);doc.Add(table); // 添加表格// 关闭doc.Close();pdfFs.Close();}
运行结果就是最终效果了:
四、总结
C#操作pdf文件就是如此,其实貌似不是很难。无非就是表格类PdfPTable与单元格类PdfPCell互相配合使用而已!
而且,根据自己的需求封装函数创建表格返回就行。然后在进行调用进行。
C# 写pdf文件(写入表格)相关推荐
- 零代码编程:用ChatGPT将PDF文件的表格批量转为Excel表格
电脑中有几百个PDF文件,文件内容格式一致,每个PDF文件第一页是一个表格.想把这几百个PDF文件里面的表格都提取出来,转为excel表,该怎么办? 打开ChatGPT(一定要用GPT4,编程能力很强 ...
- Python办公自动化——提取pdf文件中表格并到Excel
Python办公自动化--提取pdf文件中表格合并到Excel 需求描述 现有一 pdf 文件内容如下,文件中内容主要是表格形式的获奖名单,共158页.现要读取这些表格信息并保存到 excel 文件中 ...
- itext7 对pdf文件添加表格水印
1.pom.xml中添加依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7 ...
- fpdf fpdi 操作pdf文件 写入中文汉字
今天给公司做一个线上合同签约功能,用户签约后 生成pdf版的文件 .网上搜了搜大概都是用fpdf进行操作的 , 通过fpdi 可以进行读取pdf模板. 在通过继承fpdf 操作现有的pdf文档 ...
- itextpdf导出pdf流,写入表格 ,以及生成水印
导出PDF流 设置响应参数HttpServletResponse response.setCharacterEncoding("utf-8");response.setConten ...
- python读取dat文件写入表格_Pandas:外部文件数据导入/ 读取 (如 :csv、txt、tsv、dat、excel文件)、文件存储(to_csv、to_excel)...
一.文本文件读取 文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件. csv是一种逗号分隔的文件格式,因为其分隔符不一定是逗号,又被称为字符分隔文件,文件以纯文本形式存储表格数据(数 ...
- python读取dat文件写入表格_在python中从.dat文件读取和执行计算
我需要用python读取一个.dat文件,它总共有12列,数百万行.我需要把第2.3和4栏和第1栏分开计算.所以在加载.dat文件之前,是否需要删除所有其他不需要的列?如果没有,如何有选择地声明列并要 ...
- python读取pdf并写入excel_Python读取pdf表格写入excel代码方法
本篇文章小编给大家分享一下Python读取pdf表格写入excel代码方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 避免CV大法 pdf 文件的 ...
- 8、【办公自动化】Python实现PDF文件的批量操作
说明 平时工作中,经常会和 PDF 文件打交道,比如,合并.拆分.加解密.添加和去除水印.提取指定内容.转换成其他文件格式等操作.如果只是处理单个 PDF 文件的话,有些操作是比较简单的,而如果需要批 ...
最新文章
- MongoDB 基础教程CURD帮助类
- Python爬虫自学之第(⑤)篇——爬取某宝商品信息
- oracle类似sqlcmd工具,Oracle:是否有跟踪查询的工具,例如用于SQL Server的Profiler?...
- 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层
- heart ultrasound from american society of echocardiography
- mysql queries 很大,mysql优化通常使用的几种方法
- SpringBoot整合Selenium
- 如何把word默认新建文档的格式样式更改为常用的格式样式呢
- 愿你不会像我一样,活成狗一般的生活!
- Stimulsoft Reports报告工具,Stimulsoft创建和构建报告
- 阿里大数据平台MaxCompute初窥
- 加拿大综合类大学排名获关注,盘点高校对雅思要求
- 圈圈教你玩USB学习总结
- hostname命令的使用
- IT人员必须知道的14个学习网站
- 炫技:拼接列表、破碎二维数组——Python sum()函数隐藏技能花式玩法
- 承接外协电气自控工程
- YOLOV8-gradcam 热力图可视化 即插即用 不需要对源码做任何修改!
- 三相半波可控整流电路matlab仿真,三相桥式可控整流电路的MATLAB仿真
- FPGA/数字IC手撕代码8——秒表计数器