




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(1)在ASP.NET中创建PDF.Net framework 中自身并不包含可以和Pdf打交道的方法。所以,当你需要你的ASP.Net Web应用程序中包含创建或与PDF文件交互的部分时,就不得不去找可用的第三方组件。使用谷歌可以搜索到在你预算之内的收费组件,当然同时也有一些开源组件。其中之一就是iTextSharp,这个程序是著名的JAVA工具iText的.Net版本. 但是iTextSharp最大问题是缺少文档.虽然官网上有一些起步教程,但大多数程序员还是选择去看JAVA版本的文档,也就是iText的文档。或者是去买市面上唯一一本关于这方面的书iText in Action.然而,这本书是针对Java版本的iText的书。iText in Action中大多数代码仅仅需要少量修改就可以在.Net下使用,但如果你的C#水平还是相对比较菜时,Java和.Net两个版本类库命名的差别和.Net版本下缺少文档,往往会让你抓狂。最终无奈之下,你只能用Reflector来查看某些方法到底是干什么用的.所以,作为”How to”系列文章,本文将讲述如何开始使用C#版的iTextSharp。 第一件事是在这里下载iTextSharp,下载完成后解压zip文件得到itextsharp.dll文件,在Visual Studio或Web Developer中创建一个新的网站,通过添加A文件夹选项添加bin目录,在bin目录下右键选择添加引用选项,在浏览选项卡中,选择itextsharp.dll: 然后点击OK,这个dll随后会被加到bin目录下,现在你可以在你的网站或项目中使用iTextSharp了. 我还添加了一个用于存放生成的PDF的文件夹命名为PDFs.,为了避免每次使用iTextSharp类时都使用完全路径,我还添加了几个using语句:using iTextSharp.text;using iTextSharp.text.pdf; 另外,你还需要引用System.IO命名控件,因为你需要创建,打开和关闭文件,这个命名空间中的一些Class也必不可少. iTextSharp的核心对象是Document对象,你需要通过Document对象的实例来操作内存中的Pdf文件,所以首先需要实例化一个Document对象:var doc1 = new Document(); 上述代码在在内存中使用默认设置来实例化一个Document对象,默认的文档大小是A4(也就是210毫米x297毫米,或是8.26英尺x11.69英尺),页边距默认都是半英尺.下一步要做的就是将内存中的Document对象保存到硬盘中,使用iTextSharp.text.pdf.PdfWriter类来实现这个功能:string path = Server.MapPath(PDFs);PdfWriter.GetInstance(doc1, new FileStream(path + /Doc1.pdf, FileMode.Create); 现在就可以对文档进行操作了,首先打开文档,往里写一段内容,最后关闭文档doc1.Open(); doc1.Add(new Paragraph(My first PDF);doc1.Close(); 就是这么简单,下面刷新PDFS文件夹,你就会发现一个新的文件-Doc1.pdf,打开这个文件,刚才添加的段落已经成功显示. 很多时候,你并不希望通过默认设置创建默认大小,默认边距的PDF文档,所以iTextSharp允许你自定义这些设置,所以Document对象还提供了其他三个构造函数Public Document();public Document(iTextSharp.text.Rectangle pageSize);public Document(iTextSharp.text.Rectangle pageSize, float marginLeft, float marginRight, float marginTop, float marginBottom); 第一个构造函数默认为A4页面 第二个构造函数可以这样使用:var doc = new Document(PageSize.A5); PageSize类包含了一系列Rectangle对象代表了大多数纸张的大小,从A0到A10,B0到B10,legal,分类账,信封,明信片,剪报等,如果PageSize类内的纸张大小无法满足你的需求,你可以自定义一个Rectangle对象,对其设置值后作为参数传给Document构造函数:var doc = new Document(new Rectangle(100f, 300f); PdfWriter.GetInstance(doc, new FileStream(path + /Doc2.pdf, FileMode.Create); doc.Open(); doc.Add(new Paragraph(This is a custom size);doc.Close(); 上面代码中,创建的PDF文档为100像素宽,300像素长,因为是72像素/英尺,所以这个文档并不大,实际上为1.39 英尺 x 4.17 英尺(). 第二个构造函数以Rectangle和四个float类型的数字作为参数允许你通过float类型的变量自定义页边距,同样,单位是像素,默认半英尺的像素为36像素.如果你使用PageSize类的构造函数,或者是自定义Rectangle,你还可以为文档设置背景色,这个设置可以通过RGB颜色值,或是CMYK值。如果你生成的PDF文档将会在专业的平板印刷机中印刷,你必须通过CMYK来设置.但对于大多数数码打印机来说,使用RGB更容易被接受,当然,如果你的PDF用于WEB,则优先使用RGB,设置文档的背景色,通过Rectangle对象的BackgroundColorproperty进行设置:Rectangle pageSize=new Rectangle(114,720);pageSize.BackgroundColor = new CMYKColor(25, 90, 25, 0);或pageSize.BackgroundColor = new Color(191, 64, 124);Document document=new Document(pageSize); 上面两行代码都会设置文档的背景色 本文简单介绍了iTextSharp,也是你学习iTextSharp的入口,后续文章将会详细介绍这个敏捷的组件的一系列功能.(2)在Asp.Net中操作PDF 使用字体本篇文章讲述如何在你创建的PDF文档中使用各种字体。 iTextSharp默认支持14种字体,分别为:Courier, Courier Bold, Courier Italic, Courier Bold and Italic, Helvetica, Helvetica Bold, Helvetica Italic, Helvetica Bold and Italic, Times Roman, Times Roman Bold, Times Roman Italic, Times Roman Bold and Italic, Symbol, ZapfDingBats.因为Times Roman已经有了替代品Times New Roman,所以iTextSharp的默认字体为Helvetica, 12pt,黑色,也就是所谓的正常(Normal)字体。 iTextSharp提供了3种主要方式来设置字体:一种是使用BaseFont.CreateFont()方法,第二种方法是使用FontFactory.GetFont()方法。第三种方法是直接生成一个新的Font对象。BaseFont.CreateFont()有很多局限性,表现在仅仅是生成一个新的字体定义。new Font()允许FontFactory.GetFont()返回一个你可以直接操作的Font对象。并且提供了14种不同的重载来给你提供更多选项,所以通常来说你可能会使用这个方法,但是开始这个方法之前,让我们先来看一看BaseFont.CreateFont()方法:BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);Font times = new Font(bfTimes, 12, Font.ITALIC, BaseColor.RED); 上面的代码创建了一个BaseFont对象并且使用内置的constant值来设置字体类型和编码类型。在是否将字体嵌入PDF中选择了False以减少PDF的大小.但是如果你的字体在大多数用户的电脑中都没有时,亦或是你打算在专业的印刷设备中印刷出你的Pdf时,这项你必须选择为True.使用BaseFont来创建一个新的Font对象,下一行代码进一步从字体大小,字体风格,颜色来设置字体,当然,我们依然使用内置的constant类型值,下面,将上述风格字体加入段落:string path = Server.MapPath(PDFs); Document doc = new Document(); PdfWriter.GetInstance(doc, new FileStream(path + /Font.pdf, FileMode.Create);doc.Open(); doc.Add(new Paragraph(This is a Red Font Test using Times Roman, times); doc.Close(); 结果如下: 现在开始说FontFactory.GetFont()方法,这个方法提供了14种不同的重载来让你对字体的任何方面进行设置,包括:字体,颜色, 风格,是否嵌入,编码以及缓存等.每次你调用FontFactory.GetFont()时都会返回一个新的对象.这个方法对于字体的设置可以对任何在iTextSharp中注册的字体进行生效。在iTextSharp中注册的字体包括windows字体的默认目录,在WIN XP下,这个目录一般为”C:/WINDOWS/Fonts”,如果你想知道哪些字体在iTextSharp中已注册,FontFactory.RegisteredFonts将会告诉你答案,查看这个列表对于我们想获得确切的字体名称尤为重要: int totalfonts = FontFactory.RegisterDirectory(C:WINDOWSFonts);StringBuilder sb = new StringBuilder(); foreach (string fontname in FontFactory.RegisteredFonts) sb.Append(fontname + n); doc.Add(new Paragraph(All Fonts:n + sb.ToString();Font arial = FontFactory.GetFont(Arial, 28, Color.GRAY);Font verdana = FontFactory.GetFont(Verdana, 16, Font.BOLDITALIC, new Color(125, 88, 15); Font palatino = FontFactory.GetFont( palatino linotype italique, BaseFont.CP1252, BaseFont.EMBEDDED, 10, Font.ITALIC, Color.GREEN );Font smallfont = FontFactory.GetFont(Arial, 7); Font x = FontFactory.GetFont(nina fett);x.Size = 10; x.SetStyle(Italic); x.SetColor(100, 50, 200); 如你所见,上面的一些方法使用iTextSharp的Color对象的constant值来设置字体颜色,还有诸如使用SetColor()方法传入RGB值或是New一个Color对象传入。通常情况下,我们都可以传入int值作为字体风格参数,或者使用SetStyle()方法传入一个字符串。当然,生成Font还有很多种参数传入方式,使用Intellisense或是对象浏览器来查看更确切的参数使用方法.注册字体 有时候你会遇到在WEB服务器上你没有权限安装字体,这时你必须显示在iTextSharp中注册字体了:string fontpath = Server.MapPath(.); BaseFont customfont = BaseFont.CreateFont(fontpath + myspecial.ttf, BaseFont.CP1252, BaseFont.EMBEDDED);Font font = new Font(customfont, 12); string s = My expensive custom font.; doc.Add(new Paragraph(s, font); 上面代码中你也许会注意到字体文件是嵌入PDF中的(BaseFont.EMBEDDED),因为很多情况下你创建的PDF中的字体在用户的电脑上并不存在。(3)在Asp.Net中操作PDF 块,短语,段落添加文本iTextSharp可以通过Asp.Net创建PDFs,就像HTML和ASP.Net为文本提供了多种容器一样,iTextSharp提供了Chunk,Phrase和Paragraph这三个类作为容器。Chunks 块(Chunks)是容纳文本的最小容器,就像ASP.Net中的一样。就像使用Label一样,对于块的使用需要小心.下面代码展示如何为块设置文本,然后将其写入PDF 3次.string path = Server.MapPath(PDFs); Rectangle r = new Rectangle(400, 300); Document doc = new Document(r); PdfWriter.GetInstance(doc, new FileStream(path + /Blocks.pdf, FileMode.Create); doc.Open(); Chunk c1 = new Chunk(A chunk represents an isolated string. ); for (int i = 1; i 4; i+) doc.Add(c1); 接下来的一段你要格外注意,我们后面还要用到 结果如下,可以看出文本已经被加入文档,但显示出来却是一团乱麻.Chunk并不知道文本长度何时超过文档宽度并自动换行。你可以使用”n”或者Environment.NewLine,甚至是Chunk.NEWLINE作为给Chunk对象赋值的一部分. Chunk有一系列方法允许你为文本设置样式,比如setUnderLine(), setBackGround(), 和 setTextRise()以及一些构造函数来设置字体类型以及风格.Chunk chunk = new Chunk(Setting the Font, FontFactory.GetFont(dax-black); chunk.SetUnderline(0.5f, -1.5f); PHRASE Phrase是比Chunk大一级的容器,Phrase可以理解为一组Chunk,并且会在长度超过文档宽度后自动换行,每一行之间的行距(测量方法其实是每行底部之间的距离)是字体大小的1.5倍,因为在iTextSharp行距之间的举例是12pt,所以下面代码之间的行距为16pt.你可以在Phrase初始化的时候设置字体和行距.当然也可以通过其多种构造函数重载来在初始化时为Phrase添加内容. 下面代码展示了前面3个chunk加入Phrase后展示的结果:Phrase phrase = new Phrase(); for (int i = 1; i 4; i+) phrase.Add(c1); Paragraphs 目前为止,我们已经看到了如何在PDF中添加最基本的文本块.而事实上你应该用的最多的类是Paragraphs.Paragraph其实是一组有序Phrase和Chunk的集合。Paragraph派生于Phrase,所以和Phrase一样,Paragraph也会在长度超过文档长度时自动换行.不仅如此,Paragraph和Paragraph之间也会自动空一行(就像文字处理软件那样),在本文前面Chunk部分对部分文字设置格式是我们日常经常需要的,所以下面代码中,我会将格式化的文本通过Chunk和Phrase来添加到Paragraphs中: string path = Server.MapPath(PDFs); Rectangle r = new Rectangle(400, 300); Document doc = new Document(r); try PdfWriter.GetInstance(doc, new FileStream(path + /Blocks2.pdf, FileMode.Create); doc.Open(); string text = The result can be seen below, which shows the text having been written to the document but it looks a mess. Chunks have no concept of how to force a new line when the length exceeds the available width in the document. Really, all they should be used for is to change or set the style of a word or phrase inline. ; text = text.Replace(Environment.NewLine, String.Empty).Replace( , String.Empty); Font brown = new Font(Font.COURIER, 9f, Font.NORMAL, new Color(163, 21, 21); Font lightblue = new Font(Font.COURIER, 9f, Font.NORMAL, new Color(43, 145, 175); Font courier = new Font(Font.COURIER, 9f); Font georgia = FontFactory.GetFont(georgia, 10f); georgia.Color = Color.GRAY; Chunk beginning = new Chunk(text, georgia); Phrase p1 = new Phrase(beginning); Chunk c1 = new Chunk(You can of course force a newline using , georgia); Chunk c2 = new Chunk(n, brown); Chunk c3 = new Chunk( or , georgia); Chunk c4 = new Chunk(Environment, lightblue); Chunk c5 = new Chunk(.NewLine, courier); Chunk c6 = new Chunk(, or even , georgia); Chunk c7 = new Chunk(Chunk, lightblue); Chunk c8 = new Chunk(.NEWLINE, courier); Chunk c9 = new Chunk( as part of the string you give a chunk., georgia); Phrase p2 = new Phrase(); p2.Add(c1); p2.Add(c2); p2.Add(c3); p2.Add(c4); p2.Add(c5); p2.Add(c6); p2.Add(c7); p2.Add(c8); p2.Add(c9); Paragraph p = new Paragraph(); p.Add(p1); p.Add(p2); doc.Add(p); catch (DocumentException dex) throw (dex); catch (IOException ioex) throw (ioex); finally doc.Close(); 首先,来看结果,然后我再解释代码: 在代码中添加异常处理并不是一件复杂的事,当然,每次遇到关于IO的操作时,最好都要使用trycatch。对于iTextSharp的Document对象来说,还有DocumentException这个异常需要处理.我还在iTextSharp发现了其他几个猥琐的异常,当我写测试代码去生成PDF文件时,我不小心对Font对象的构造函数传了两个参数,我先传入了Font.NORMAL,后传入了文字大小,然后悲剧发生了,字体大小被设置成了0.在代码执行到doc.Close()时抛出异常,我不得不强关了VS来释放在内存中的PDF. 所以,异常处理非常重要,至少在document从内存释放之前,你也需要注意字体类型传入时,都要在后面加个f后缀,来表明编译器它是FLOAT类型,这样能防止你遇到和我同样的错误。 第一块文字,也就是+引号,或者说是纯文本,不允许中间有空格和换行符,否则空格和换行符就会原样在PDF中显示出来。除此之外,每一个设置了风格样式的字体都需要包含在一个Chunk中,然后再将Chunk添加到Phrase来确保文字会自动换行,最后,所有Phrase和Chunk都会被添加到Paragraph对象中。还可以通过Paragraph.setAlignment()设置Paragraph的对齐方式,这个方法接受一个String类型的参数,可以是Left, Center, Justify,和 Right.下面是设置p.setAlignment(Justify);居中的显示效果: Paragraph还有许多其他的方法来设置缩进:Paragraph.FirstLineIndent /allows you to apply a float value to indent the first lineParagraph.IndentationLeft /allows you to add space to the left hand sideParagraph.IndentationRight /allows you to add space to the right hand sideParagraph.setSpacingBefore /adds a specified amount of space above the paragraph Paragraph.setSpacingAfter /adds the specified amount of space after the paragraph(4)在Asp.Net中操作PDF 列表 在iTextSharp中列表的创建是通过iTextSharp.text.List对象实现的。列表实质上是iTextSharp.text.ListItem的集合.也就是由ListItem组成的数组.ListItem继承了Paragraph对象(而Paragraph对象继承于Phrase,Phrase又继承于Arraylist),所以生成的每一个List都会自动换行.就如同List在HTML分为和一样,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. 如上图所见,每一个列表项都像Paragraph那样自己单占一行.还有列表是无序列表,每一个列表项之前都用一个横杠作为修饰,并且列表没有缩进。但iTextSharp提供了多种方法允许设置列表使其更加美观:it.List list = new it.List(it.List.UNORDERED, 10f); list.SetListSymbol(u2022); list.IndentationLeft = 30f; 上面第二个参数(float类型)传入List的构造函数,用于将每一个列表项的缩进设置成10(也就是列表符号和列表项第一个字符的距离。).然后我通过SetListSymbol方法将列表项符号改成更传统的”.”,最后将整个列表向右缩进30,现在列表看起来就好多了: 如果你使用有序列表并将罗马数字作为标识,你可以使用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究竟使用大写还是小写作为行项目标识: 还有一个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); 列表之间还可以相互嵌套,因为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)在Asp.Net中操作PDF 使用链接和书签用户和PDF文档的交互可以通过锚(链接)和书签进行,接着前面iTextSharp的文章,本篇主要讲通过iTextSharp创建的PDF中链接和书签的基础知识。 链接 iTextSharp的Anchor对象和HTML中的锚非常相似,它们都允许创建链接到外部文档或是内部文档的链接。但和HTML中的链接不同的是,iTextSharp的链接默认没有任何样式,有鉴于此,我建议对于链接来说,都应该加下划线并且使用蓝色字体来告诉用户这段文字有着链接的功能:string path = Server.MapPath(PDFs); Document doc = new Document();try PdfWriter.GetInstance(doc, new FileStream(path + /Anchors.pdf, FileMode.Create); doc.Open(); Font link = FontFactory.GetFont(Arial, 12, Font.UNDERLINE, new Color(0, 0, 255); Anchor anchor = new Anchor(, link); /鼠标提示 anchor.Reference = ; doc.Add(anchor); catch (DocumentException dex) Response.Write(dex.Message); catch (IOException ioex) Response.Write(ioex.Message); finally doc.Close(); 上面代码创建了一个外部链接,当点击链接后会打开浏览器并导向指定链接. 内部链接在HTML中是通过为标签添加NAME属性来实现的,iTextSharp也是用的这种方法:Anchor click = new Anchor(Click to go to Target); click.Reference = #target; Paragraph p1 = new Paragraph(); p1.Add(click); doc.Add(p1); Paragraph p2 = new Paragraph(); p2.Add(new Chunk(nnnnnnnn); doc.Add(p2); Anchor target = new Anchor(This is the Target); target.Name = target; Paragraph p3 = new Paragraph(); p3.Add(target); doc.Add(p3); 第一个段落包含一个就像HTML中一样的指向”#target”的锚记,第二个段落包含了多个换行符,第三个段落包含了一个锚记,并设置成和第一个段落引用名一样的Name.结果是当你点击”Click to go to target”时,PDF现在无论读到哪了,都会导向这个锚记,现在”This is target”会出现在PDF顶端. 锚记的一个代替方案是使用Chunk类的SetLocalGoto()和 SetLocalDestination()方法:Paragraph p4 = new Paragraph(); p4.Add(new Chunk(Click ); p4.Add(new Chunk(here, link).SetLocalGoto(GOTO); p4.Add(new Chunk( to find local goto); p4.Add(new Chunk(nnnnnnnnn); Paragraph p5 = new Paragraph(); p5.Add(new Chunk(Local Goto Destination).SetLocalDestination(GOTO); doc.Add(p4); doc.Add(p5); 第一个段落使用的字体传达的意思告诉用户这个是一个超链接,Chunk.SetLocalGoto()接受一个String类型的参数,这个String是锚记的名称。接下来又加入了几个换行符。接下来使用了SetLocalDestination()方法设置当前位置的名称,他和之前定义的SetLocalGoto()方法中的指定的位置名称相对应。当生成PDF时,”Here”有下划线并且是蓝色的,点击后会将PDF导向到”Local Goto Destination”处于最顶端。书签 很多时候你打开一个PDF时,你的PDF浏览程序都会显示一个数状的文档结构,每一个树枝或者叶节点都会链接到一章或者一节,iTextSharp通过Chapter和Section对象提供了生成树状导航的功能. 书签最大的对象是Chapter,每一个Chapter对象都会另起一页,而Section对象必须加在Chapter对象或其他Section对象之中:Chapter chapter1 = new Chapter(new Paragraph(This is Chapter 1),1); Section section1 = chapter1.AddSection(20f, Section 1.1, 2); Section section2 = chapter1.AddSection(20f, Section 1.2, 2); Section subsection1 = section2.AddSection(20f, Subsection 1.2.1, 3); Section subsection2 = section2.AddSection(20f, Subsection 1.2.2, 3); Section subsubsection = subsection2.AddSection(20f, Sub Subsection , 4); Chapter chapter2 = new Chapter(new Paragraph(This is Chapter 2), 1); Section section3 = chapter2.AddSection(Section 2.1, 2); Section subsection3 = section3.AddSection(Subsection 2.1.1, 3); Section section4 = chapter2.AddSection(Section 2.2, 2); chapter1.BookmarkTitle = Changed Title; chapter1.BookmarkOpen = true;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024云南红河州水务产业投资有限公司招聘810人笔试参考题库附带答案详解
- 患难与共-【2022年暑假预习】云名著《世说新语》之“德行”卷
- 五年级品德与社会下册《感受身边的变化》教学设计 新人教版
- 三年级数学下册 第二单元 两位数乘两位数2.2 两位数乘两位数(进位)的乘法教学设计 冀教版
- 房屋及设施设备管理能力提升培训
- 七年级语文上册 第三单元 比较 探究 父母的心教学设计 北师大版
- 九年级化学下册 第九章 现在生活与化学9.2 化学合成材料第1课时 常见的有机合成材料教学设计 (新版)粤教版
- 2024中国联合网络通信有限公司湖南省分公司笔试参考题库附带答案详解
- 三年级英语上册 Unit 3 My friends第4课时教学设计 牛津译林版
- 2024-2025学年六年级下册数学北师大版小升初专题试卷(试题)
- KAIJO焊线机参考教学课件
- 2023年郑州黄河护理职业学院单招职业适应性测试笔试题库及答案解析
- 禁食疗法课件
- 5以内的相邻数课件
- 《学习纵向展开议论》课件
- 政府采购业务知识培训课件(PPT33张)
- 大体积混凝土施工质量控制论文
- 客户退货申请单
- 生活垃圾综合处理厂焚烧发电施工组织设计(201页)
- 苯冷却器设计(共24页)
- 名∶聚乙烯(PE)土工膜防渗工程技术规范
评论
0/150
提交评论