【译】在Asp.Net中操作PDF – iTextSharp-列表

简介:
    在前文中,我们已经知道了如何利用iTextSharp创建PDF文档,设置字体样式和风格.本文开始讲述iTextSharp中的有序列表和无需列表.如果你还没阅读我前面的文章,那么地址是:

    在ASP.NET中创建PDF-iTextSharp起步

    在Asp.Net中操作PDF - iTextSharp - 使用字体

    在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本

 

    在iTextSharp中列表的创建是通过iTextSharp.text.List对象实现的。列表实质上是iTextSharp.text.ListItem的集合.也就是由ListItem组成的数组.ListItem继承了Paragraph对象(而Paragraph对象继承于Phrase,Phrase又继承于Arraylist),所以生成的每一个List都会自动换行.就如同List在HTML分为<ul>和<ol>一样,iTextSharp中列表同样分为有序列表和无序列表.下面我们来直接看如何生成列表的代码:

    

string path = Server.MapPath("PDFs");
 
it.Document doc = new it.Document();
 
try
 
{
 
    PdfWriter.GetInstance(doc, new FileStream(path + "/Lists.pdf", FileMode.Create));
 
    doc.Open();
 
    it.List list = new it.List(it.List.UNORDERED);
 
    list.Add(new it.ListItem("One"));
 
    list.Add("Two");
 
    list.Add("Three");
 
    list.Add("Four");
 
    list.Add("Five");
 
    it.Paragraph paragraph = new it.Paragraph();
 
    string text = "Lists";
 
    paragraph.Add(text);
 
    doc.Add(paragraph);
 
    doc.Add(list);
 
}
 
catch (it.DocumentException dex)
 
{
 
    Response.Write(dex.Message);
 
}
 
catch (IOException ioex)
 
{
 
    Response.Write(ioex.Message);
 
}
 
finally
 
{
 
    doc.Close();
 
}
 

   如果你对上面代码的意思并不了解.那么为什么要用”it"引用List的确需要解释一下.正如代码所示,it作为引用某些类,因为如果你直接在ASP.Net code-behind模式下工作,你会发现visual studio在引用iTextSharp的ListItem时和也包含ListItem的System.Web.UI.WebControls发生命名空间冲突.这意味着如果仅仅是用如下代码:

 

ListItem li = new ListItem();
    则会报不明确引用的警告。解决方法是使用完全引用:

iTextSharp.text.ListItem li = new iTextSharp.text.ListItem();
 

   但是使用完全引用又臭又长,所以这里使用了简洁引用:

using it = iTextSharp.text;
 

   现在,你就可以使用别名了.

   回到讲述我们实际代码的作用,第一件事是创建一个List对象,并传入一个布尔类型的参数告诉List生成的是有序或无序列表.默认是False(也就是无序列表),然后为List加入了5个项。第一个项是通过匿名函数传入String参数类型来创建ListItem并传入,从第二个开始,则是直接传入String类型的参数.最后是创建一个Paragraph对象和list对象共同传入document.

    1

    如上图所见,每一个列表项都像Paragraph那样自己单占一行.还有列表是无序列表,每一个列表项之前都用一个横杠作为修饰,并且列表没有缩进。但iTextSharp提供了多种方法允许设置列表使其更加美观:

it.List list = new it.List(it.List.UNORDERED, 10f);
 
list.SetListSymbol("\u2022");
 
list.IndentationLeft = 30f;
   

    上面第二个参数(float类型)传入List的构造函数,用于将每一个列表项的缩进设置成10(也就是列表符号和列表项第一个字符的距离。).然后我通过SetListSymbol方法将列表项符号改成更传统的”.”,最后我将整个列表向右缩进30,现在列表看起来就好多了:

      2

 

   如果你使用有序列表并将罗马数字作为标识,你可以使用RomanList类:

 

RomanList romanlist = new RomanList(true, 20);
 
romanlist.IndentationLeft = 30f;
 
romanlist.Add("One");
 
romanlist.Add("Two");
 
romanlist.Add("Three");
 
romanlist.Add("Four");
 
romanlist.Add("Five");
 
doc.Add(romanlist);
  

    由于某些奇怪的理由,传入RomanList构造函数的第二个参数是一个Int类型的值,第一个参数告诉RomanList究竟使用大写还是小写作为行项目标识:

 

    3

 

     还有一个GreekList类支持使用希腊字符作为列表项目的标识,还有其它两个类ZapfDingbatsList 和ZapfDingbatsNumberList,由于他们使用了ZapfDingBats字体,所以这两个类对列表项符号提供了更多丰富的选项,希腊和罗马字符作为行项目标识时,分别不能超过24和26个行项目,而ZapfDingBatsNumberList最多只能处理10个字符,当字符超出范围后,列表又会从0开始.

ZapfDingbatsList zlist = new it.ZapfDingbatsList(49, 15);
 
zlist.Add("One");
 
zlist.Add("Two");
 
zlist.Add("Three");
 
zlist.Add("Four");
 
zlist.Add("Five");
 
doc.Add(zlist);
 

   4

 

    列表之间还可以相互嵌套,因为List.Add()方法接受一个Object类型的参数,所以你只要传入一个有效的List对象就行。下面代码首先创建了一个RomanList对象,然后再创建一个有序列表.我们将RomanList对象添加到有序列表上,则RomanList会相对于父有序列表自动向后缩进:

 

RomanList romanlist = new RomanList(true, 20);
 
romanlist.IndentationLeft = 10f;
 
romanlist.Add("One");
 
romanlist.Add("Two");
 
romanlist.Add("Three");
 
romanlist.Add("Four");
 
romanlist.Add("Five");
 
 
 
List list = new List(List.ORDERED, 20f);
 
list.SetListSymbol("\u2022");
 
list.IndentationLeft = 20f;
 
list.Add("One");
 
list.Add("Two");
 
list.Add("Three");
 
list.Add("Roman List");
 
list.Add(romanlist);
 
list.Add("Four");
 
list.Add("Five");
 
 
 
doc.Add(paragraph);
 
doc.Add(list);
 

     5


----------------- 
原文链接:Lists with iTextSharp 
translated by CareySon
分类: iTextSharp
标签: iTextSharp, Pdf, Asp.net创建PDF




本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/archive/2011/11/04/2235834.html,如需转载请自行联系原作者


相关文章
|
7月前
|
Java API Apache
使用 Apache PDFBox 操作PDF文件
Apache PDFBox库是一个开源的Java工具,专门用于处理PDF文档。它允许用户创建全新的PDF文件,编辑现有的PDF文档,以及从PDF文件中提取内容。此外,Apache PDFBox还提供了一些命令行实用工具。
664 6
|
18天前
|
数据挖掘 BI
.net8 Syncfusion生成pdf/doc/xls/ppt最新版本
通过使用 Syncfusion,您可以高效地生成各种文档,满足不同的业务需求。这些工具不仅易于使用,还具有高性能和高度可扩展性,是处理文档的理想选择。
42 16
|
1月前
|
API C#
在.NET中使用QuestPDF高效地生成PDF文档
在.NET中使用QuestPDF高效地生成PDF文档
|
6月前
|
编解码 文字识别
印刷文字识别操作报错合集之在尝试将PDF文件转换为图片时出现了问题,具体的错误代码是415,该怎么处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
6月前
|
XML Java 数据处理
视觉智能开放平台操作报错合集之pdf识别报503,是什么导致的
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
7月前
|
数据采集 数据安全/隐私保护 Python
2024年最新【Python】如何用Python来操作PDF文件,收藏(2),2024年最新阿里p7Python面试题
2024年最新【Python】如何用Python来操作PDF文件,收藏(2),2024年最新阿里p7Python面试题
2024年最新【Python】如何用Python来操作PDF文件,收藏(2),2024年最新阿里p7Python面试题
|
7月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
82 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
7月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
124 0
|
人工智能 API 数据安全/隐私保护
Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。
Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。
108 0
|
开发框架 前端开发 .NET
ASP.NET Core MVC从入门到精通[PDF版]
ASP.NET Core MVC从入门到精通[PDF版]
388 0