iText中文文档.docx
- 文档编号:5298063
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:36
- 大小:97.39KB
iText中文文档.docx
《iText中文文档.docx》由会员分享,可在线阅读,更多相关《iText中文文档.docx(36页珍藏版)》请在冰豆网上搜索。
iText中文文档
正在处理中,请稍后……
窗体顶端
第一部分iText的简单应用
第一章创建一个Document
利用iText五步创建一个PDF文件:
helloword。
第一步,创建一个iTextSharp.text.Document对象的实例:
Documentdocument=newDocument();
第二步,为该Document创建一个Writer实例:
PdfWriter.getInstance(document,newFileStream("Chap0101.pdf",FileMode.Create));
第三步,打开当前Document
document.Open();
第四步,为当前Document添加内容:
document.Add(newParagraph("HelloWorld"));
第五步,关闭Document
document.Close();
完整的代码见示例代码0101。
在例中,不难看出,制作一个PDF文件是非常简单的。
注:
如果你将例中“document.Add(newParagraph("HelloWorld"));”中的字符串“HelloWord”换成中文,如“这是我的第一个PDF文件”,产生的结果一定让你大失所望,因为生成的PDF文件中并没有将中文显示出来,不要担心,在第9章中要专门讲解字体问题,中文显示也就迎刃而解了,如果不能正确显示中文,也就没有必要翻译本文了。
下面对这几步做详细介绍。
第一步创建一个Document实例:
iTextSharp.text.Document-object共有三个构造函数:
publicDocument();
publicDocument(RectanglepageSize);
publicDocument(RectanglepageSize,
intmarginLeft,
intmarginRight,
intmarginTop,
intmarginBottom);
第一个构造函数以A4页面作为参数调用第二个构造函数,第二个构造函数以每边36磅页边距为参数调用第三个构造函数
◆ 页面尺寸:
你可以通过指定的颜色和大小创建你自己的页面,示例代码0102创建一个细长的浅黄色背景的页面:
RectanglepageSize=newRectangle(144,720);
//pageSize.BackgroundColor=newColor(0xFF,0xFF,0xDE);
pageSize.setBorderColor(newBaseColor(0xFF,0xFF,0xDE));
Documentdocument=newDocument(pageSize);
通常,你不必创建这样的页面,而可以从下面页面尺寸中选择:
A0-A10,LEGAL,LETTER,HALFLETTER,_11x17,LEDGER,NOTE,B0-B5,ARCH_A-ARCH_E,FLSA和FLSE
大多数情况下使用纵向页面,如果希望使用横向页面,你只须使用rotate()函数:
Documentdocument=newDocument(PageSize.A4.rotate());
详细代码见示例代码0103。
◆ 页边距:
当创建一个文件时,你还可以定义上、下、左、右页边距:
Documentdocument=newDocument(PageSize.A5,36,72,108,180);
在示例代码0104中你可以看到该文档有一个0.5英寸的左边距和1英寸的右边距,上边距为1.5英寸,下边距为2.5英寸。
说明:
当创建一个矩形或设置边距时,你可能希望知道该用什么度量单位:
厘米、英寸或象素,事实上,默认的度量系统以排版单位磅为基础得出其他单位的近似值,如1英寸=72磅,如果你想在A4页面的PDF中创建一个矩形,你需要计算以下数据:
21厘米/2.54=8.2677英寸
8.2677英寸*72=595磅
29.7厘米/2.54=11.6929英寸
11.6929英寸*72=842磅
默认边距为36磅即半英寸。
如果你修改了页面尺寸,仅仅影响到下一页,如果你修改了页边距,则影响到全部,故慎用。
关于页面的初始值,请参考第三步。
第二步创建Writer实例
一旦创建了document,我们可以创建该文档的多个Writer的实例,所有这些Writer实例均继承自抽象类“iTextSharp.text.DocWriter”。
同时还有另外一种情况,你可以用iTextSharp.text.pdf.PdfWriter产生文档PDF文件,如果你想创建一个TeX文档,你可以使用iTextSharp.text.TeX.TeXWriter包。
Writer类的构造函数是私有的,你只能通过下面的方法创建一个实例:
publicstaticxxxWritergetInstance(Documentdocument,Streamos);(xxx是Pdf或Xml)
你可以通过下面的方法创建一个实例:
PdfWriterwriter=PdfWriter.getInstance(document,newFileStream("Chap01xx.pdf"));
但是你几乎永远不会用到Writer实例(除非你想创建高级PDF或者希望用一些非常特殊的函数,如ViewerPreferences或Encryption)。
所以通过下面的办法得到实例已经足够了:
PdfWriter.getInstance(document,newFileStream("Chap01xx.pdf"));
在第一步中创建一个文档时,第一个参数意义不大,第二个参数可以是任何一种流,到目前为止我们一直使用System.IO.FileStream将Document写入文件中,示例代码0105用到了System.IO.MemoryStream(这不是一个独立的例子,你必须在ServletEngine中测试这些代码。
第三步打开Document
◆ 摘要
在你写入任何实际数据之前,你可能希望通过以下几种方法写入一些关于本文档的摘要:
publicbooleanaddTitle(Stringtitle)
publicbooleanaddSubject(Stringsubject)
publicbooleanaddKeywords(Stringkeywords)
publicbooleanaddAuthor(Stringauthor)
publicbooleanaddCreator(Stringcreator)
publicbooleanaddProducer()
publicbooleanaddCreationDate()
publicbooleanaddHeader(Stringname,Stringcontent)
你可以选择自己的标题、主题、关键字、作者、创建程序,但以下产品信息将始终被添加:
iTextSharp(或者iTextSharp的引用)和创建时间(实际上这两种方法是自动调用的)。
你还可以将自定义的名称添加为“报头信息”,但是这对于PdfWriter没有任何作用,如果看看实例代码0101产生的pdf文件的“文档属性”,我们可以看到仅仅有PDF创建程序和产品日期,而示例代码0106的“文档属性”框中有更多的信息。
打开document前要做的事:
你只能在Open方法调用之前添加摘要,这是iText开发工具提供的一个选择。
在HTML中,报头信息被放在文档前面报头标识中间,调用Open方法将导致报头信息写入流,因而在Document被打开后无法更改这些数据。
PDF报头信息不包括摘要,看起来有类似于:
%PDF-1.2
该行显示生成的文档是一个版本为1.2的PDF格式的文件,在PDF中,摘要保存在PdfInfo对象中,当文档关闭时已经写入PdfWriter中了,因此,没有关于为什么不能修改库来满足任何时候添加或更改摘要的技术原因
◆ 页面初始化
Open方法在不同的Witer中同时会产生初始化事件,举例来说,如果你需要一个水印或者页眉页角对象出现在文档第一页的开始处,你需要在打开文档前添加这些,同样的用于设置该文档其他页水印、页眉、页角、页数和尺寸。
当调用下列方法:
publicboolsetPageSize(RectanglepageSize)
publicboolAdd(Watermarkwatermark)
publicvoidremoveWatermark()
settingHeaderproperty
publicvoidresetHeader()
settingFooterproperty
publicvoidresetFooter()
publicvoidresetPageCount()
settingPageCountproperty
产生的结果只能在下一个新页中看到(当在本页调用初始化方法时),代码见示例代码0107,你必须要准备一张名为watermark.jpg的图片,如下图:
◆ 阅读器参数:
你可以通过下面的办法为PDF文件指定一些阅读器(如AdobeReader)参数:
publicvoidsetViewerPreferences(intpreferences)
在示例代码0108中,指定了下面一些参数:
writerA.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);
writerB.setViewerPreferences(PdfWriter.HideMenubar|PdfWriter.HideToolbar);
writerC.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft|PdfWriter.PageModeFullScreen|PdfWriter.NonFullScreenPageModeUseThumbs);
正如你所看到的,参数可以使用以下一些常量:
● 文件被打开时,页面布局用到下面的其中一个:
oPdfWriter.PageLayoutSinglePage–同时只显示一个页面
oPdfWriter.PageLayoutOneColumn–单列显示
oPdfWriter.PageLayoutTwoColumnLeft–双列显示,奇数页在左
oPdfWriter.PageLayoutTwoColumnRight-双列显示,奇数页在右
● 文件打开时,页面模式用到下面其中之一:
oPdfWriter.PageModeUseNone–既不显示大钢也不显示缩略图
oPdfWriter.PageModeUseOutlines–显示大纲
oPdfWriter.PageModeUseThumbs–显示缩略图
oPdfWriter.PageModeFullScreen–全屏模式,没有菜单、windows控件或者其他任何windows可见控件
● PdfWriter.HideToolbar–当文档激活时,是否隐藏阅读程序(如AdobeReader)的工具条
● PdfWriter.HideMenubar-当文档激活时,是否隐藏阅读程序的菜单.
● PdfWriter.HideWindowUI-当文档激活时,是否隐藏阅读程序的界面元素,如滚动条、导航条等,而仅仅保留文档显示
● PdfWriter.FitWindow–是否调整文档窗口尺寸以适合显示第一页。
● PdfWriter.CenterWindow–是否将文档窗口放到屏幕中央
● 在全屏模式下,指定如何显示界面元素(选择一个)
oPdfWriter.NonFullScreenPageModeUseNone-既不显示大钢也不显示缩略图
oPdfWriter.NonFullScreenPageModeUseOutlines–显示大钢
oPdfWriter.NonFullScreenPageModeUseThumbs–显示缩略图
说明:
你只能在类PdfWriter中调用这些方法。
◆ 加密
打开文档之前还要做的一件事情就是加密(如果你希望该文档加密),要达到这个目的,你可以使用下面的方法:
publicvoidsetEncryption(booleanstrength,StringuserPassword,StringownerPassword,intpermissions);
∙strength是下面两个常量之一:
oPdfWriter.STRENGTH40BITS:
40位
oPdfWriter.STRENGTH128BITS:
128位(AcrobatReader5.0及以上版本支持)
∙UserPassword和ownerPassword可以为空或零长度,这种情况下,ownerPassword将被随机的字符串代替
∙Permissions为下列常量之一:
oPdfWriter.AllowPrinting
oPdfWriter.AllowModifyContents
oPdfWriter.AllowCopy
oPdfWriter.AllowModifyAnnotations
oPdfWriter.AllowFillIn
oPdfWriter.AllowScreenReaders
oPdfWriter.AllowAssembly
oPdfWriter.AllowDegradedPrinting
该功能参见示例代码0109和示例代码0110。
writer.setEncryption(PdfWriter.STRENGTH40BITS,null,null,PdfWriter.AllowCopy);
示例代码0109产生的文件能够被打开而无须密码,但用户不能打印、修改本文档。
writer.setEncryption(PdfWriter.STRENGTH128BITS,"userpass","ownerpass",PdfWriter.AllowCopy|PdfWriter.AllowPrinting);
打你试图打开示例代码0110产生的文件时,将要求输入密码('userpass'),因为添加了AllowPrinting参数,你可以打印该文档而不会发生任何问题。
第四步添加内容
在解释第一步到第三步的不同示例中,你可能已经遇到了一些对象如Phrase,Paragraph等在接下来的几章中,所有这些问题都将得到详细解释。
有时你可能想一个writer故意忽略document产生的行为,如示例代码0111:
当我们创建了两个writer:
writerA和writerB:
PdfWriterwriterA=PdfWriter.getInstance(document,newFileStream("Chap0111a.pdf",FileMode.Create));
PdfWriterwriterB=PdfWriter.getInstance(document,newFileStream("Chap0111b.pdf",FileMode.Create));
我们可以创建两个有细微差别的文档:
writerA.Pause();
document.add(newParagraph("ThisparagraphwillonlybeaddedtoChap0111b.pdf,nottoChap0111a.pdf"));
writerA.resume();
你可以比较文件:
Chap0111a.pdf和Chap0111b.pdf的区别
第五步,关闭document
关闭document非常重要,因为它将关闭正在运行的Writer并将内容写入文件,该方法在最后被调用,你应该总是要关闭文档。
高级话题:
阅读PDF文件
该部分内容介绍了iText只能产生PDF格式的文件而不能解析PDF格式文件,不再翻译。
第二章块、短句和段落
块
块(Chunk)是能被添加到文档的文本的最小单位,块可以用于构建其他基础元素如短句、段落、锚点等,块是一个有确定字体的字符串,要添加块到文档中时,其他所有布局变量均要被定义。
下面一行中,我们创建了一个内容为“helloWorld”、红色、斜体、COURIER字体、尺寸20的一个块:
Chunkchunk=newChunk("Helloworld",FontFactory.getFont(FontFactory.COURIER,20,Font.ITALIC,newColor(255,0,0)));
◆ 典型字体1:
在本指南中,除了第九章外(你可以在这里学会使用其他字体),我们将始终使用典型字体1,这些是不同的典型字体1:
∙ Courier(该字体定宽)
∙ Helvetica
∙ TimesRoman
∙ Symbol
∙ ZapfDingbats
◆ 下划线/删除线
如果你希望一些块有下划线或删除线,你可以通过改变字体风格简单做到:
Chunkchunk1=newChunk("Thistextisunderlined",FontFactory.getFont(FontFactory.HELVETICA,12,Font.UNDERLINE));
Chunkchunk2=newChunk("ThisfontisoftypeITALIC|STRIKETHRU",FontFactory.getFont(FontFactory.HELVETICA,12,Font.ITALIC|Font.STRIKETHRU));
◆ 上标/下标
在块中有几个方法可以调用,其中大部分将在接下来的章节中介绍,本章中只介绍一个方法setTextRise(floatf).你可以使用该方法在上标或下标中写块。
◆ 块的背景
如果你想改变块的背景,你可以使用方法setBackground(Colorcolor).这将在块文本的下面添加一个彩色矩形:
ck.setBackground(newColor(0xFF,0xFF,0x00));
在示例代码0101中,你可以概览典型字体1和一个使用setTextRise,setBackground等方法的的例子。
短句
短句(Phrases)是一系列以特定间距(两行之间的距离)作为参数的块,一个短句有一个主字体,但短句中的一些块具有不同于主字体的字体,你有更多的选择去创建短句,一些具体使用参见代码0202。
◆ 古希腊语
因为古希腊语经常使用,在类Phrase的构造函数中有一个特征:
将一个字符串作为参数(如果你想避免这种情况,你只能使用块工作而不能使用字符串),正如你在示例代码0203中看到的,这个特征自动地将913至937(除903)和945至969(古希腊的ASCII值)范围内的所有字体改为希腊符号。
◆ 非主要性
与其说这是一个特征,不如说是一个缺陷,但无论如何,这使创建一个非主要性的短句或段落成为可能,这将产生一个由下向上书写的临时作用(参见示例代码0204)。
如果你想在一页中将一些位置移动到上面时可能有用。
说明,当你穿越上边届时无法检查,也没有办法让你回到前一页。
段落
段落是一系列块和(或)短句。
同短句一样,段落有确定的间距。
用户还可以指定缩排;在边和(或)右边保留一定空白,段落可以左对齐、右对齐和居中对齐。
添加到文档中的每一个段落将自动另起一行。
有几种办法建立一个段落,如:
Paragraphp1=newParagraph(newChunk("Thisismyfirstparagraph.",FontFactory.getFont(FontFactory.HELVETICA,12)));
Paragraphp2=newParagraph(newPhrase("Thisismysecondparagraph.",FontFactory.getFont(FontFactory.HELVETICA,12)));
Paragraphp3=newParagraph("Thisismythirdparagraph.",FontFactory.getFont(FontFactory.HELVETICA,12));
所有有些对象将被添加到段落中:
p1.add("youcanaddstrings,");p1.add(newChunk("youcanaddchunks"));p1.add(newPhrase("oryoucanaddphrases."));
说明:
一个段落有一个且仅有一个间距,如果你添加了一个不同字体的短句或块,原来的间距仍然有效,你可以通过SetLeading来改变间距,但是段落中所有内容将使用新的中的间距。
见示例代码0205。
◆ 保持段落的整体性
在示例代码0206中,我们使用了setKeepTogether(true)方法来试图将一个段落放在同一页中,该方法并不是始终有效,举个例子,第一段不能刚好在一页中,于是被分成了两部分。
第二段被放置在第二页,但第三段顺沿到了第三页上。
字体的延续
你应该掌握字体延续的一些规则,这些规则的应用见示例代码0207,当我们将一些内容用指定的字体(非默认字体)创建一个短句或者段落后再添加更多内容时,初始对象的字体风格将被延续,请看“Hello1!
”和“Hello2”:
PhrasemyPhrase=newPhrase("Hello2!
",newFont(Font.TIMES_NEW_ROMAN,8,Font.BOLD));
myPhrase.Add(newPhrase("someotherfont",newFont(Font.HELVETICA,8,Font.ITALIC)));
myPhrase.Add(newPhrase("Thisistheendofthesentence.\n",newFont(Font.TIMES_NEW_ROMAN,8,Font.ITALIC)));
document.Add(myPhrase);
我们由TimesNewRoman粗体字开始,添加一些文本使用Helvetica字体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iText 中文 文档