一步一步 ITextSharp Anchor Image Chapter Section使用
上一篇对块,语句、段落、列表进行了演示,本篇将对更高级的对象Anchor、Image、Chapter、Section的使用方法进行演示。
一、Anchor
Anchor对象可以在文档内部或向外部跳转。内部跳转常见的应用就是目录,外部跳转就是跳转到指定的文件或网页。下面代码演示文档内部跳转和跳转到博客园点。
1: public class AnchorDemo : TestBase
2: {
3: protected override void WriteDocument(Document document, PdfWriter writer)
4: {
5: Paragraph p = new Paragraph();
6: p.Add("这是一个Anchor测试演示示例:");
7:
8: Anchor anchor = new Anchor("首页",Normal);
9: anchor.Name = "first";
10: var anchor2 = new Anchor("第二页", Normal);
11: anchor2.Reference = "#second";
12: var anchor3 = new Anchor("第三页", Normal);
13: anchor3.Reference = "#third";
14: p.Add(anchor);
15: p.Add(anchor2);
16: p.Add(anchor3);
17:
18: var anchor10 = new Anchor("博客园-学无止境", Normal);
19: anchor10.Reference = "http://www.cnblogs.com/LifelongLearning/";
20: document.Add(p);
21: document.Add(anchor10);
22:
23: document.NewPage();
24: var anchor1 = new Anchor("第二页", Normal);
25: anchor1.Name = "second";
26: document.Add(anchor1);
27:
28: var anchor4 = new Anchor("回到首页", Normal);
29: anchor4.Reference = "#first";
30: document.Add(anchor4);
31:
32: document.NewPage();
33: var anchor5 = new Anchor("第三页", Normal);
34: anchor5.Name = "third";
35: document.Add(anchor5);
36:
37: var anchor6 = new Anchor("回到首页", Normal);
38: anchor6.Reference = "#first";
39: document.Add(anchor6);
40: }
41: }
本节对演示代码进行了重构,基类代码请查看:一步一步 IText.Sharp
上面的代码演示结果如下:
Chunk也可以创建跳转链接,
Chunk.SetLocalDestination 设置本地描述名称,可以说它是当前锚点的名称
Chunk.SetLocalGoto 设置本地跳转到锚点
Chunk.SetRemoteGoto 设置远程跳转,如url
示例代码如下:
1: public class GoTopDemo : TestBase
2: {
3: protected override void WriteDocument(Document document, PdfWriter writer)
4: {
5: Paragraph p = new Paragraph();
6: Chunk top = new Chunk("Country List", Bolditalic);
7: top.SetLocalDestination("top");
8: p.Add(top);
9: document.Add(p);
10: Chunk imdb =
11: new Chunk("博客园", Bolditalic);
12: imdb.SetAnchor(new Uri("http://www.cnblogs.com/"));
13: p = new Paragraph("点击每页的返回首页,将返回到第一页,",Normal);
14: p.Add(imdb);
15: p.Add(".");
16: document.Add(p);
17: p = new Paragraph("This list can be found in a ");
18: Chunk page1 = new Chunk("分割文档(本地文档跳转)", Normal);
19: page1.SetRemoteGoto("helloworld2.pdf", 1);
20: p.Add(page1);
21: p.Add(".");
22: document.Add(p);
23:
24: document.NewPage();
25: p = new Paragraph("返回", Normal);
26: top = new Chunk("首页", Normal);
27: top.SetLocalGoto("top");
28: p.Add(top);
29: p.Add(".");
30: document.Add(p);
31: document.NewPage();
32: p = new Paragraph("返回", Normal);
33: top = new Chunk("首页", Normal);
34: top.SetLocalGoto("top");
35: p.Add(top);
36: p.Add(".");
37: document.Add(p);
38:
39: document.NewPage();
40: p = new Paragraph("返回", Normal);
41: top = new Chunk("首页", Normal);
42: top.SetLocalGoto("top");
43: p.Add(top);
44: p.Add(".");
45: document.Add(p);
46:
47: document.NewPage();
48: p = new Paragraph("返回");
49: top = new Chunk("首页");
50: top.SetLocalGoto("top");
51: p.Add(top);
52: p.Add(".");
53: document.Add(p);
54:
55: document.NewPage();
56: p = new Paragraph("返回");
57: top = new Chunk("首页");
58: top.SetLocalGoto("top");
59: p.Add(top);
60: p.Add(".");
61: document.Add(p);
62: }
63: }
二、Chapter与Section
Chapter和Section用来创建书签和文档结构非常有用。同时使用PdfOutline也可以创建书签,默认情况下,生成章节和分区使用的是数字标识,如下所示:
代码如下:
1: public class ChapterDemo2 : TestBase
2: {
3: protected override void WriteDocument(Document document, PdfWriter writer)
4: {
5: string[] contries = new string[] { "美国", "英国", "中国", "朝鲜", "日本" };
6:
7: Paragraph title = null;
8: Chapter chapter = null;
9: Section section = null;
10: Section subsection = null;
11: title = new Paragraph("标题一", Normal);
12: chapter = new Chapter(title, 1);
13: title = new Paragraph("区域一", Bolditalic);
14: section = chapter.AddSection(title, 2);
15: title = new Paragraph("子区域一", Normal);
16: subsection = section.AddSection(title);
17:
18: subsection.IndentationLeft = (20);
19: subsection.NumberDepth = (1);
20: subsection.Add(new Paragraph("时间: " + 12, Normal));
21: subsection.Add(new Paragraph("导演(s):", Normal));
22: subsection.Add(GetDirectorList(contries));
23: subsection.Add(new Paragraph("国家:", Normal));
24: subsection.Add(GetDirectorList(contries));
25:
26: document.Add(chapter);
27: }
28:
29: private List GetDirectorList(string[] list)
30: {
31: List result = new List();
32: foreach (var c in list)
33: {
34: result.Add(new ListItem(c, Normal));
35: }
36:
37:
38: return result;
39: }
40: }
三、Image
在ITextSharp中使用Image.getInstance方法创建Image对象,支持的文件类型包括:
Jpeg, PngImage, GifImage,
TiffImage
itextsharp会自动调整图文的内容,以让页面显示更多的内容,如果要禁用这种情况,就要使用如下方法:
1: PdfWriter.GetInstance(document,new FileStream(filename)).StrictImageSequence = true;
强制使用添加顺序。
图像有对象方式,有如下几种:左对齐、右对齐、居中对齐、自动调整,
图像的位置可以通过,上下左右来设置控制,同时可以通过:ScalePercent,ScaleToFit,
ScaleAbsolute,scaleAbsoluteWidth,scaleAbsoluteHeight调整图像显示大小,对于布局的控制非常方便。
备注:如果同一个图像创建多次并都添加到文档中,文档的大小就增长很快,如果一个图像要在多个地方使用,只要生成一个Image对象,在添加到文档前,设置其属性就可以了,没有必要创建多份。
图像还支持旋转:
RotationDegrees,这个是设置旋转的角度,可以设置正负数。
演示示例效果如下:
代码如下:
1: public class ImageDemo : TestBase
2: {
3: protected override void WriteDocument(Document document, PdfWriter writer)
4: {
5: writer.StrictImageSequence = true;
6: document.Add(new Paragraph("左对齐:", Normal));
7: Image image = CreateImageObject();
8: image.Alignment = Image.ALIGN_LEFT;
9: image.ScalePercent(30);
10: document.Add(image);
11:
12: document.Add(new Paragraph("右对齐:", Normal));
13: //image = CreateImageObject();
14: image.ScalePercent(30);
15: image.Alignment = Image.ALIGN_RIGHT;
16: document.Add(image);
17:
18: document.Add(new Paragraph("居中对齐:", Normal));
19: //image = CreateImageObject();
20: image.Alignment = Image.ALIGN_MIDDLE;
21: image.ScaleToFit(150,300);
22: document.Add(image);
23:
24: document.Add(new Paragraph("适合页面对齐:", Normal));
25: //image = CreateImageObject();
26: image.Alignment = Image.ALIGN_JUSTIFIED_ALL;
27: image.ScalePercent(30);
28: document.Add(image);
29: document.NewPage();
30: var p = new Paragraph("旋转一:", Normal);
31: p.Add(Chunk.NEWLINE);
32:
33: p.Add(Chunk.NEWLINE);
34: p.Add(Chunk.NEWLINE);
35: p.Add(Chunk.NEWLINE);
36: p.Add(Chunk.NEWLINE);
37: p.Add(Chunk.NEWLINE);
38: p.Add(Chunk.NEWLINE);
39: p.Add(Chunk.NEWLINE);
40: p.Add(Chunk.NEWLINE);
41: p.Add(Chunk.NEWLINE);
42: p.Add(Chunk.NEWLINE);
43: p.Add(Chunk.NEWLINE);
44: p.Add(Chunk.NEWLINE);
45: image.Alignment = Image.ALIGN_JUSTIFIED_ALL;
46: image.ScalePercent(30);
47: image.RotationDegrees = 30;
48: p.Add(new Chunk(image, 0, -30));
49: document.Add(p);
50:
51: p = new Paragraph("旋转二:", Normal);
52: p.Add(Chunk.NEWLINE);
53: p.Add(Chunk.NEWLINE);
54: p.Add(Chunk.NEWLINE);
55: p.Add(Chunk.NEWLINE);
56: p.Add(Chunk.NEWLINE);
57: p.Add(Chunk.NEWLINE);
58: p.Add(Chunk.NEWLINE);
59: p.Add(Chunk.NEWLINE);
60: p.Add(Chunk.NEWLINE);
61: p.Add(Chunk.NEWLINE);
62: p.Add(Chunk.NEWLINE);
63: p.Add(Chunk.NEWLINE);
64: p.Add(Chunk.NEWLINE);
65: image.Alignment = Image.ALIGN_JUSTIFIED_ALL;
66: image.ScalePercent(30);
67: image.RotationDegrees = -30;
68: p.Add(new Chunk(image, 0, -15));
69: document.Add(p);
70: }
71:
72: private Image CreateImageObject()
73: {
74: return Image.GetInstance(@"C:\Users\Public\Pictures\Sample Pictures\123.jpg");
75: }
76: }
转载于:https://www.cnblogs.com/LifelongLearning/archive/2011/03/31/2001196.html
一步一步 ITextSharp Anchor Image Chapter Section使用相关推荐
- 从0开始一步一步用Laravel5.2集成原生微信支付
目前微信支付集成到框架里面有太多的坑了,项目中刚好遇到一个,把经验和重要的坑写出来,一步一步从0开始,大家有什么不会的可以留言. 1.首先,我们要去官方下载人家做好的DEMO,链接是https://p ...
- android 分时图x轴宽度,一步一步教你写股票走势图——分时图二(自定义xy轴)...
目录 一步一步教你写股票走势图--分时图一(概述) 一步一步教你写股票走势图--分时图二(自定义xy轴) 一步一步教你写股票走势图--分时图三(对齐图表.自定义柱状图高亮) 一步一步教你写股票走势图- ...
- 一步一步教你写股票走势图——分时图二(自定义xy轴)
目录 一步一步教你写股票走势图--分时图一(概述) 一步一步教你写股票走势图--分时图二(自定义xy轴) 一步一步教你写股票走势图--分时图三(对齐图表.自定义柱状图高亮) 一步一步教你写股票走势图- ...
- 调试JDK源码-一步一步看HashMap怎么Hash和扩容
调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...
- 一步一步指引你在Windows7上配置编译使用Caffe(https://github.com/fengbingchun/Caffe_Test)
之前写过几篇关于Caffe源码在Windows764位上配置编译及使用过程,只是没有把整个工程放到网上,最近把整个工程整理清理了下,把它放到了GitHub上.下面对这个工程的使用作几点说明: 1. ...
- 一步一步实现扫雷游戏(C语言实现)(三)
使用WIN32API连接窗口 此项目相关博文链接 一步一步实现扫雷游戏(C语言实现)(一) 一步一步实现扫雷游戏(C语言实现)(二) 一步一步实现扫雷游戏(C语言实现)(三) 一步一步实现扫雷游戏(C ...
- 一步一步学Silverlight 2系列(3):界面布局
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步写算法(之图结构)
原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...
- 融合应用11.1.8安装,一步一步的引导
融合应用11.1.8安装,一步一步的引导 融合应用11.1.8 安装并不是简单的与电子商务套件11 i / R12安装. 所以我们需要安装划分为许多步骤. 请注意,11.1.8 11.1.7总统发布供 ...
最新文章
- 技术图文:如何在leetcode上进行算法刻意练习?
- Python爬虫入门:爬取某个网页的小说内容
- npm和yarn的区别,我们该如何选择?
- blob html 预览_本地图片预览+blob使用
- zabbix 监控配置1
- 如何处理CRM_ORGMAN 300 error message
- Python 执行代码的两种方式
- Mybatis常用总结:参数,返回,执行sql,include等
- MySQL最早版本源码_MySQL旧版本升级为新版本
- mysql系统自带示例数据库_MySQL系统自带的数据库information schema
- Spring IOC扫描器与注册器
- 互联网日报 | 2月4日 星期四 | 阿里云首次实现盈亏平衡;百度“2021好运中国年”春节活动上线;谷歌放弃自研游戏计划...
- Java连接Access数据库的那些坑
- 只显示小方格_魔力科学小实验 | 只能剪一刀,如何将图片中的红白方块分开?...
- 【报告分享】2020中国股民图鉴.pdf(附下载链接)
- CCF201903-2 二十四点(100分)【表达式计算】
- 福彩3D Matlab统计分析,基于ANSYS和遗传算法的3D打印桨叶结构优化设计的制作方法...
- python给pdf加图片签名_如何在PDF中添加文本和图像(例如签名)?
- mysql 改列定义_如何更改MySQL列定义?
- 放松跑、间歇跑、节奏跑和LSD
热门文章
- Windows Mobile 5.0新增API介绍(转自MSDN)
- SMS动态查询部署安装XPSP3补丁
- 删除Flex中TREE组建里的文件夹图标.
- /etc/udev/rules.d/10-usbstorage.rules
- 使用GDAL打开裸数据(RAW)
- 如何在 OpenResty 中使用 websocket
- Kubernetes支持有状态服务的部署
- linux window nginx性能,KVM虚拟机 Nginx性能测试
- 文档服务器备份吗,本地资料和云服务器备份吗
- sparkstreaming自定义kafka