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

摘要:
解决方法是使用完全引用:iTextSharp.text.ListItemli=newiTextSharp.text.ListItem();但是使用完全引用又臭又长,所以这里使用了简洁引用:usingit=iTextSharp.text;现在,你就可以使用别名了.回到讲述我们实际代码的作用,第一件事是创建一个List对象,并传入一个布尔类型的参数告诉List生成的是有序或无序列表.默认是False,然后为List加入了5个项。但iTextSharp提供了多种方法允许设置列表使其更加美观:it.Listlist=newit.List;list.SetListSymbol;list.IndentationLeft=30f;上面第二个参数传入List的构造函数,用于将每一个列表项的缩进设置成10(也就是列表符号和列表项第一个字符的距离。

在前文中,我们已经知道了如何利用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

免责声明:文章转载自《【译】在Asp.Net中操作PDF – iTextSharp列表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【基于python实现UI自动化】3.0 seleniumQString和string互转中文字符下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis list结构

一个功能肯定有其应用场景: PUSH和POP操作,其实是队列的基本操作。Redis的list就是一个极其强大的队列系统。我们在哪些地方会用到队列呢?下面,我们说两个例子: a,评论系统 逛过微博的筒子们应该都对评论系统有了解。我们在看完一条微博之后,常常会评论一番,或者看看其他人的吐槽。每条评论的记录都是按照时间顺序排序的。我们读的时候也是这个顺序。这时,...

python数组操作

python中的数组其实就是list,但它更像是java的arraylist,而且功能比arraylist更强大。因为python的list其实是个对象,所以对于他的操作和删除比较有讲究。 创建列表sample_list = ['a',1,('a','b')]Python 列表操作sample_list = ['a','b',0,1,3]得到列表中的某一个...

【c#搬砖记】用Docx导出word格式的docx文件

DocX开源网址:http://docx.codeplex.com/ 1、引入DocX.dll 调用ReplaceText()方法替换模板中的字符。只支持docx格式的word文档 using (DocX docx = DocX.Load(fileDemo)) { docx.ReplaceText...

phpCB 批量格式化php文件 经典方法

发现phpCB整理php文档非常好,但有个缺点是不能批量处理,使用过程中发现phpCB是一个CMD程 序。于是想到php的system函数调用cmd。将phpCB放到 系统文件夹 system下。 下面是phpCB批量转换的php程序: <? header ( "Content-type: text/html; charset=gb2312" ) ;...

Lucene中对document(记录)的CURD操作~为分布式全文检索设计

Lucene.net是.net环境中比较强的全文检索工具,它是从JAVA中转过来的,.net版本的lucene在功能上也豪不逊色于java版的lucene。今天主要来说一下lucene索引文件在更新时的一些方式。 一 整个索引文件 (cfs文件)覆盖更新;优点:简单,缺点:与服务器没有交互,但在生成索引文件时对IO影响比较大,前台lucene信息显示与数据...

spider爬虫练习,爬取顶点小说网,小说内容。

------------恢复内容开始------------ 我这里练习爬虫的网站是顶点小说网,地址如下: https://www.booktxt.net/ 我这里以爬取顶点小说网里面的凡人修仙传为例子: 首先观察界面: 第一章: 第二章: 由上面可得出规律,每点一次下一章,url后面的数字就会自动加1。 爬虫主要分为3步: 第一步:构建url列表...