新闻资讯 | 控件产品 | 技术文章 | 购物车 | 合作伙伴 | 问题解答 | 电子简报 | PDF论坛 | 资源下载
您现在的位置:技术文章>PDF开发篇 首页|PDF应用篇|PDF开发篇|解决方案

循序渐进学习iTextSharp之四十四(模板)

发布日期:2006-6-26 作者:张卫蓬 出处:PDFHome

模板(Form XObjects
当我们在前面的章节中讨论页眉页脚时,我们定义了一个用来添加到每一页的信息块,实际上该信息块写到文件的每个新页上,这不是最经济的解决方案,更好的办法是将该信息作为一个Form Xobject仅在文档中添加一次,在其可见位置重复出现,为了实现这个,我们将使用模板。

创建一个PdfTemplate
调用PdfContentByte对象中的createTemplate方法是用来创建一个PdfTemplate的最好方法。如下例所示:

PdfTemplate template = cb.createTemplate(500, 200);

在这个示例中,模板的宽度被设置为500,高度被设置为200.
 
通过该模板我们可以做象PdfContentByte同样的事情

template.moveTo(0, 200);
template.lineTo(500, 0);
template.stroke();
template.beginText();
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
template.setFontAndSize(bf, 12);
template.setTextMatrix(100, 100);
template.showText("Text at the position 100,100 (relative to the template!)");
template.endText();


向文档中增加一个模板
你可以像下面这样在一个绝对位置增加一个模板

cb.addTemplate(template, 0, 400);
你还可以做一些有趣的事情,如缩放或旋转他们:
//将模板旋转90
cb.addTemplate(template, 0, 1, -1, 0, 500, 200);
// 缩放模板为50
cb.addTemplate(template, .5f, 0, 0, .5f, 100, 400);
//缩放模板为200
cb.addTemplate(template, 2, 0, 0, 2, -200, 400);

Example1中演示了如何向文档中添加一个模板,点击Document1查看例子文件形成的PDF文档。

转换矩阵:
如果你想移动、缩放或旋转图象或文本,你需要使用一个转换矩阵,在代码中用到的转换矩阵的参数abcdef所代表的真实意义是什么?

下面这个是转换矩阵

 

[

a

b

0

]

c

d

0

e

f

1

参数ef,你可以指定一个移动,下面的矩阵将图象或文本向X轴方向移动e个像素向Y轴移动f个像素。

[

1

0

0

]

0

1

0

e

f

1

你可以使用参数ad来缩放,下面的矩阵将图象或文本在X轴方向放大2倍,在Y轴方向放大3倍。

 [

2

0

0

]

0

3

0

0

0

1

如果你想旋转一些东西,你得改变abcd四个参数,角度的值是以弧度为单位的值,像下面这样:

[

Math.cos(angle)

Math.sin(angle)

0

]

-Math.sin(angle)

Math.cos(angle)

0

0

0

1

当你旋转一个对象时这有个严重的警告:旋转坐标是以(0, 0)为支点,如果你旋转一个对象,你得提防它是不会旋转出页面的,你可能执行一个平移来保持一个对象在页面中。当然你可以在一个矩阵中结合translation (tX, tY), scaling (sX, sY) rotation (angle)使用。

 [

sX * Math.cos(angle)

sY * Math.sin(angle)

0

]

-sX * Math.sin(angle)

sY * Math.cos(angle)

0

tX

tY

1

所以你将可能使用到下面这些参数

  • a = sX * Math.cos(angle);
  • b = sY * Math.sin(angle);
  • c = -sX * Math.sin(angle);
  • d = sY * Math.cos(angle)
  • e = tX;
  • f = tY;

第几页共几页

在一些情况下,你希望插入一些你在写本页时外壳无法知道的信息到文本中去,如:在一篇文档的第一页,你并不知道该文档共有几页。只能在完成了整个文档时才知道总的页数。当使用模板时,该问题就不存在了。在Example1中,我们在添加模板到ContentByte前添加了一些信息到模板中,这是没有必要的。我们可以在任何时候添加信息到模板,因为iText添加Form Xobject是在PDF结束的地方(当通过close方法关闭该文档时调用)。在Example2中显示了首先创建4页然后添加总到页数,该例非常简单和有用。点击Document2查看Example2形成的PDF文件

 

发布人:管理员 【报告错误】·【推荐好友】·【打印文章】
相关评论 本文现有 0 条评论 评分人数: 0 平均分: 0
相关评论
用户名: 密  码:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
注意:请不要在评论中含与内容无关的广告链接,违者封ID
文章搜索
推荐文章
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
热门点击
一个简单的PDF文件结构的分析(22465)
PHP的FDF文档支持(16188)
用C#制作PDF文件全攻略(13631)
Word转换PDF格式的C#或(12147)
pdfMaker文章:PDF加(11644)
ITextRenderer学习(11214)
PDF文件加密仿真(11057)
怎样用iReport制作Web(10413)
iText PDF概述(1)(9922)
循序渐进学习iTextShar(9873)
热门评论
从pdf文档中提取出文本(8)
PDFlib开发:创建超文本元(2)
客户端自动打印PDF(Prin(2)
浅谈PDFlib中文输出(一)(2)
xml的转换之pdf 2 ((1)
xml的转换之pdf 1 (x(1)
PDF知识讲座(1)(1)
PDFBox使用简介(1)
使用正则表达式计算PDF文档的(1)
word转pdf(1)