博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 写pdf文件(写入表格)
阅读量:2165 次
发布时间:2019-05-01

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

最近在公司接手了一个检测软件的项目,其中里面就包含了一个模块是需要将检测出来的数据写入pdf文件中保存!

为此,参考了公司前辈的一些代码,自己在项目中写了一边,懂得了一些心得,现将代码过程记录下来,分享!


一、准备工作

首先C#代码操作pdf文件,需要引用一个pdf官方提供的两个dll,去网上下载,并将其添加引用到项目即可!

如下:
可以在官网下载:

或者點擊下面百度網盤鏈接進行下載:

链接:
提取码: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);// 打开pdfdoc.Open();// 关闭doc.Close();pdfFs.Close();

通过上面代码可以创建一个空白的pdf文件!

2. 一些辅助函数

a. 设置字号与字体颜色

不用理解其含义是什么,只需知道他有什么作用就行,怎么使用就行。

最终函数返回的是Font对象

/// /// 设置字号与字体颜色/// /// 
private static Font SetFontSizeColor(int size, Color color) {
BaseFont bfchinese = BaseFont.CreateFont(@"c:\windows\fonts\simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//simkai.ttf Font ChFont = new iTextSharp.text.Font(bfchinese, size, Font.BOLD, color); return ChFont;}

b. 创建一行N列表格

/// /// 创建一行N列表格/// /// 列的元素/// 字号大小/// 
private static PdfPTable CreateOneRowTable(List
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;}

创建的表格效果如下:

  1. 一行一列的表格
    在这里插入图片描述
  2. 一行N列的表格在这里插入图片描述

c. 合并两个表格

将两张表上下合并

/// /// 合并两个表格/// /// /// /// 
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: // 单元格中添加表格1 cell = 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;}

创建的表格效果如下:

  1. 上下合并
    在这里插入图片描述
  2. 上下合并
    在这里插入图片描述

d. 合并多个表格

就是将多个表格进行上下合并(“合并两个表格”的升级版)

/// /// 合并多个表格/// /// /// 
public static PdfPTable MergeMultTable(List
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. 创建多行多列表格

就是创建一个表格有很多列和很多行单元格。

这里需要注意,他实现多行多列创建表格的方式是:

多列实现方式:定义表格对象时就指定了列数,这就是多列的实现方式;
多行实现方式:循环定义多个单元格,然后将单元格添加到表格中,当添加单元格的数量大于列数时,下一次添加单元格就会自动换行进行添加,以此方式达到多行效果!

/// /// 创建多行多列表格/// /// 表格列数/// 表格中的数据/// 
private static PdfPTable CreateMultRowMultColumnTable(int column, List
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. 创建带行标题和一组数据的表格

也就是左边是一个标题,右边是内容的表格,看下面图片就知道啦!

/// /// 创建带行标题和一组数据的表格/// /// 行标题/// 数据表格/// 数据表的比例/// 
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
text = new List
(); text.Add("C#往PDF格式写入表格教程"); PdfPTable tableMain = CreateOneRowTable(text, 20); // 创建一张仅有一行一列的表格 text = new List
(); 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
checkNameList = new List
(); checkNameList.Add("姓名"); checkNameList.Add("性别"); checkNameList.Add("年龄"); PdfPTable tableTitle = CreateOneRowTable(checkNameList, 15); // 生成一张表格 checkNameList = new List
(); 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
checkNameList = new List
(); checkNameList.Add("姓名"); checkNameList.Add("爱好"); checkNameList.Add("特点"); checkNameList.Add("身高"); PdfPTable tableTitle = CreateOneRowTable(checkNameList, 15); // 生成一张标题表格 checkNameList = new List
(); 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); // 打开pdf doc.Open(); // 合并多个表格 List
allTable = new List
(); allTable.Add(SetTitlePDf()); allTable.Add(SetMessPDF()); allTable.Add(SetInfoPDF()); PdfPTable table = MergeMultTable(allTable); doc.Add(table); // 添加表格 // 关闭 doc.Close(); pdfFs.Close();}

运行结果就是最终效果了:

在这里插入图片描述


四、总结

C#操作pdf文件就是如此,其实貌似不是很难。无非就是表格类PdfPTable与单元格类PdfPCell互相配合使用而已!

而且,根据自己的需求封装函数创建表格返回就行。然后在进行调用进行。

转载地址:http://zmjzb.baihongyu.com/

你可能感兴趣的文章
微信小程序-调用-腾讯视频-解决方案
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>