在Asp.Net中操作PDF – iTextSharp - 使用表格

使用Asp.Net生成PDF最常用的元素应该是表格,表格可以帮助比如订单或者发票类型的文档更加格式化和美观。本篇文章并不会深入探讨表格,仅仅是提供一个使用iTextSharp生成表格的方法介绍

使用iTextSharp来操作表格是一件简单的事,尤其是iTextSharp中表格元素的命名方式和HTML与CSS中非常类似。iTextSharp提供了多个类用于创建表格,为了不让读者产生混淆,这里我使用PdfPTable这个专门为在PDF中创建表格的类,下面代码展示了如何创建一个表格并将其加入PDF中:

PdfPTable table = new PdfPTable(3);

PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));

cell.Colspan = 3;

cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right

table.AddCell(cell);

table.AddCell("Col 1 Row 1");

table.AddCell("Col 2 Row 1");

table.AddCell("Col 3 Row 1");

table.AddCell("Col 1 Row 2");

table.AddCell("Col 2 Row 2");

table.AddCell("Col 3 Row 2");

doc.Add(table);

通过为pdfpTable的构造函数传入整数3,pdfpTable被初始化为一个三列的表格.为pdfpTabled添加单元格有多种方式,第一个单元格是通过PdfPCell对象添加进去的,PdfPCell的构造函数接受一个Phrase对象作为参数,然后将Cell的colspan设置为3,这样这个单元格占了整个一行.就像HTML中表格那样,单元格的水平对齐方式使用了三个值中的一个(译者:左对齐,居中,右对齐),这三个值我加在了注释中。后面的单元格我都通过AddCell方法加入,最后文档的效果如下:

下面代码从数据库抽取值,并将数据插入到iTextSharp生成的表格中,下面代码还设置了一些表格的展现方式:

PdfPTable table = new PdfPTable(2);

//actual width of table in points

table.TotalWidth = 216f;

//fix the absolute width of the table

table.LockedWidth = true;

//relative col widths in proportions - 1/3 and 2/3

float[] widths = new float[] { 1f, 2f };

table.SetWidths(widths);

table.HorizontalAlignment = 0;

//leave a gap before and after the table

table.SpacingBefore = 20f;

table.SpacingAfter = 30f;

PdfPCell cell = new PdfPCell(new Phrase("Products"));

cell.Colspan = 2;

cell.Border = 0;

cell.HorizontalAlignment = 1;

table.AddCell(cell);

string connect = "Server=.\\SQLEXPRESS;Database=Northwind;Trusted_Connection=True;";

using (SqlConnection conn = new SqlConnection(connect))

{

  string query = "SELECT ProductID, ProductName FROM Products";

  SqlCommand cmd = new SqlCommand(query, conn);

  try

  {

    conn.Open();

    using (SqlDataReader rdr = cmd.ExecuteReader())

    {

      while (rdr.Read())

      {

        table.AddCell(rdr[0].ToString());

        table.AddCell(rdr[1].ToString());

      }

    }

  }

  catch(Exception ex)

  {

    Response.Write(ex.Message);

  }

  doc.Add(table);

}

这个表格一开始被初始化为两列的表格,然后设置了表格的固定宽度,然后对每一列设置相对宽度为别为整个表格的三分之一和三分之二。如果你想将宽度设置为5分之一和是5分之四,只需要将参数分别改为1f和4f.如果你想设置每列的绝对宽度,只需要将列宽度和表格的总宽度传入,例如:

float[] widths = new float[] { 100f, 116f };

通过设置表格的SpacingBefore和SpacingAfter属性,可以分别设置表格头部离上一个元素的距离以及表格结束离下一个元素的距离.在文档中有几个表格紧挨着时,这个功能尤其有效。如果不设置上述属性,那表格之间的距离就像在word中一个回车的距离一样,那会和针一样细。接下来我们通过设置第一个单元格的边框为0,colspan为列数,居中使其像表格的标题一样。接下来就是我们用编程的方式将从SqlDataReader读取到的数据动态的添加到单元格中最后加入表格:

接下来的代码展示了格式化单元格的一些选项,正如你所见,iTextSharp的作者遵循CSS的命名规则来设置单元格的选项使格式化单元格更加容易(当然,我假设你了解CSS。。。):

PdfPTable table = new PdfPTable(3);

table.AddCell("Cell 1");

PdfPCell cell = new PdfPCell(new Phrase("Cell 2", new Font(Font.HELVETICA, 8f, Font.NORMAL, Color.YELLOW)));

cell.BackgroundColor = new Color(0, 150, 0);

cell.BorderColor = new Color(255,242,0);

cell.Border = Rectangle.BOTTOM_BORDER | Rectangle.TOP_BORDER;

cell.BorderWidthBottom = 3f;

cell.BorderWidthTop = 3f;

cell.PaddingBottom = 10f;

cell.PaddingLeft = 20f;

cell.PaddingTop = 4f;

table.AddCell(cell);

table.AddCell("Cell 3");

doc.Add(table);

上面代码中不难看出,通过设置colspan来让一个单元格在水平上跨多行十分容易。那如果是在垂直上使单元格跨越多行呢?在HTML中,你可以使用Rowspan属性,但是在iTextSharp中并没有Rowspan属性。所以达到这个目的的方法只有嵌套表格。下面代码创建了一个四列的表格,右下的表格横跨三列,竖跨三行。当然,这是表面看起来这样,但实际上是通过在表格左下角的单元格中嵌套一个三行一列的子表格,我们将左下角嵌套子表格的单元格的padding全部设置为0使被嵌入的子表格占据了整个左下单元格:

PdfPTable table = new PdfPTable(4);

table.TotalWidth = 400f;

table.LockedWidth = true;

PdfPCell header = new PdfPCell(new Phrase("Header"));

header.Colspan = 4;

table.AddCell(header);

table.AddCell("Cell 1");

table.AddCell("Cell 2");

table.AddCell("Cell 3");

table.AddCell("Cell 4");

PdfPTable nested = new PdfPTable(1);

nested.AddCell("Nested Row 1");

nested.AddCell("Nested Row 2");

nested.AddCell("Nested Row 3");

PdfPCell nesthousing = new PdfPCell(nested);

nesthousing.Padding = 0f;

table.AddCell(nesthousing);

PdfPCell bottom = new PdfPCell(new Phrase("bottom"));

bottom.Colspan = 3;

table.AddCell(bottom);

doc.Add(table);

最后,在这篇阐述使用表格的文章末尾,我们来看看如何将一个单元格中的文本进行旋转:

PdfPTable table = new PdfPTable(3);

table.TotalWidth = 144f;

table.LockedWidth = true;

table.HorizontalAlignment = 0;

PdfPCell left = new PdfPCell(new Paragraph("Rotated"));

left.Rotation = 90;

table.AddCell(left);

PdfPCell middle = new PdfPCell(new Paragraph("Rotated"));

middle.Rotation = -90;

table.AddCell(middle);

table.AddCell("Not Rotated");

doc.Add(table);

Rotation属性必须设置成90的倍数,否则就会引发错误,middle单元格的Rotation在这里设置成-90和270效果一样,这个度数默认是按逆时针算的:

实际上iTextSharp可以操作表格的功能非常强大,在未来的文章中我会更加详细的阐述。于此同时,大家可以使用Visual Studio的智能感知和对象浏览器充分挖掘iTextSharp的潜力,并看看最终生成的结果如何.

时间: 2024-08-01 16:31:03

在Asp.Net中操作PDF – iTextSharp - 使用表格的相关文章

在asp.net 中生成PDF的方法

近期要用asp.net 2.0生成PDF,看了下书,查了下资料,发现可以有组件帮得上忙,可以下载itextsharp(https://sourceforge.net/projects/itextsharp)下载,然后在工程中引用该控件,举例子如下 1  datatable 的内容转换为PDF      首先,建立一个datatable转换为pdf的方法如下 using iTextSharp;using iTextSharp.text;using iTextSharp.text.pdf;using

Asp.net中操作Excel的代码解析

一 . 使用Excel对象模型创建Excel文档: 1.创建简单的文档 1 try 2 { 3 //创建Excel程序对象 4 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 5 //设置创建WorkBook时,WorkBook包含表单个数 6 excel.SheetsInNewWorkbook = 1; 7 //创建WorkBook 8 ex

在asp.net中显示PDF的方法:

来源:http://www.cnblogs.com/tengs2000/archive/2009/02/23/1396646.html 一.直接显示,使用的还是原页面的URL 1 Response.ContentType = "application/pdf"; 2 Response.Clear(); 3 Response.TransmitFile(@"SharePoint.pdf"); 4 Response.End(); C# Code 二.以PDF文件做为URL

vue项目中操作PDF文件

官方文档参考:https://www.npmjs.com/package/vue-pdf 1. cnpm install --save vue-pdf 2.components.vue <template> <pdf src="./static/relativity.pdf"></pdf> </template> <script> import pdf from 'vue-pdf' export default { compo

C#使用ITextSharp操作pdf

在.NET中没有很好操作pdf的类库,如果你需要对pdf进行编辑,加密,模板打印等等都可以选择使用ITextSharp来实现. 第一步:可以点击这里下载,新版本的插件升级和之前对比主要做了这几项重大改变 1.初始化对汉字的支持 2.对页眉页脚的加载形式 第二步:制作pdf模板 可以下载Adobe Acrobat DC等任意一款pdf编辑工具,视图--工具--准备表单,可以在需要赋值的地方放上一个文本框,可以把名称修改为有意义的名称,后面在赋值时要用到. 第三步:建项目引入各个操作类 介于前段时间

C#工具类:使用iTextSharp操作PDF文档

iTextSharp是一个用于操作PDF文件的组件DLL程序,在C#程序中可以引用iTextSharp组件,用于开发与PDF文件相关的报表等功能,利用iTextSharp组件提供出来的方法接口,我们可以实现很多与PDF文档有关的操作,如打开PDF文档对象.往PDF文档中添加段落.添加图片链接等等,功能非常的强大.这边简单对iTextSharp类进行了封装,提供一些常用的PDF操作方法. iTextSharp官网:http://www.itextpdf.com/ (英文好的建议直接查看原始文档).

2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET Framework版本与位数所对应的压缩包,里面就会有该文件了). 在所在cs文件中加入using System.Data.SQLite; 定义两个string变量:ConStr.SqlStr,分别用于SQLite的连接字符串与SQL语句. 定义SQLiteConnection变量Conn,用于连

pdf怎样转换成word格式如何在电脑中操作?

如何在电脑中转换文件格式?PDF格式转换word应该如何进行操作?在你使用电脑打开一份文件的时候,打开一看它是一份PDF格式的文件.此刻需要将其转换成word,那该怎么弄呢? 1.由于小编 解决的方法可能和大家有所不同,操作步骤可能会不一样,在这里仅供大家参考.可以在浏览器搜索迅捷PDF转换器借助它来进行操作,然后点击下载软件电脑桌面上. 2.进入到PDF转换器的操作页面,移动鼠标到左侧的栏目列表中.选中PDF转成其他文件.打开它的下拉框会发现它分为了多种PDF文件转换的子类目,这里需要点击的是

ASP.NET—016:ASP.NET中保存文件对话框

本想在asp.net中使用savediallog保存文件,结果提示:当应用程序不是以 UserInteractive 模式执行时显示模式对话框或窗口是无效操作. 在ASP.NET中使用例如以下方式.保存文件.以下样例,保存一个excel文件. Response.ContentType = @"application/x-xls"; Response.AppendHeader("Content-Disposition", "attachment; filen