iTextharp - 添加带有块,短语和段落的文本

这是一系列文章中的第三个,它看起来使用开源组件,ItextSharp从ASP.NET中生成PDF。正如HTML和ASP.NET为文本内容的不同AMPOUNT提供的容器一样,ITextSharp提供块,短语和段落类。继续前,如果您想阅读早期文章,它们是:

在ASP.NET中创建PDF - iTextSharp入门
iTextharp - 使用字体

A 是您可以使用的最小重要文本。它是ASP.NET等同的是 <asp.:标签>。与标签一样,您需要小心如何使用块。以下代码段显示如何设置块的文本,然后将其写入PDF文档3次:

 

细绳 path = server.mappath(“pdfs”);

长方形 r = 新的 长方形(400,300);

文档 doc = 新的 文档(r);

pdfwriter..getInstance(Doc, 新的 filestream(路径+ “/blocks.pdf”, filemode.。创造));

doc.Open();

c1 = 新的 (“一块代表一个孤立的字符串。”);

为了 ( i = 1; i < 4; i++)

{

    doc.Add(c1);

}

 

[关注以下段落 - 我们会回到它]
结果可以在下面看到,它显示了已写入文档的文本,但它看起来很乱。当长度超过文档中的可用宽度时,块在如何强制新行的概念。真的,应该使用它们是改变或设置内联单词或短语的样式。您当然可以使用纽诺 "\ n" 或者 环境。新队, 甚至 .新队 作为您给出块的字符串的一部分。

""

块有许多方法允许您执行此操作,例如 setunderline() , SetBackground(), 和settextrise()以及许多构造函数允许您设置字体及其样式。

 

块= 新的 (“设置字体”, fontfactory..getfont(“Dax-Black”));

块.SetWerderLine(0.5f,-1.5f);

 

""

短语

短语 是层次结构中的下一个容器。短语是一系列块,并且当其内容的长度超过文档的垂直边缘时,将强制换行符。每行之间的空间(实际上在每条线的基线之间采取的测量,或"leading")是字体大小的1.5倍。由于ItextSharp(12pt)应用了默认字体大小,因此下面的代码将导致16pt的前导。您可以将前导或字体设置为启动新短语的一部分,以及将其传递一个字符串或块以通过短语的各种重载的构造函数设置其内容。以下代码段显示了早期的块如何添加到短语3次,结果。

 

短语 短语= 新的 短语();

为了 ( i = 1; i < 4; i++)

{

      phrase.Add(c1);

}

 

""

到目前为止,我们所看到的是PDF中的文本的基本构建块。您最常使用的对象是一个段落,它是一系列短语和块在一起。段落导出了短语,因此它们在文档的水平边界内传递文本,但它们也强制了每个段落的新行(就像任何文字处理应用程序一样)。本文块部分前面的段落与尝试一样好。它有许多句子和一些格式的内联文本,因此我们可以使用它来从块和短语中构建段落:

 

细绳 path = server.mappath(“pdfs”);

长方形 r = 新的 长方形(400,300);

文档 doc = 新的 文档(r);

 

尝试

{

    pdfwriter..getInstance(Doc, 新的 filestream(路径+ “/blocks2.pdf”, filemode.。创造));

    doc.Open();

 

    细绳 文字= @“结果可以在下面看到,显示文本

                 写给了文件,但它看起来是一个

                  混乱。块没有如何强迫新的概念

                   长度超过可用宽度时的线

                 该文件。真的,他们应该使用的只是

                 更改或设置内联单词或短语的样式。 “;

    text = text.Replace(环境。新队, 细绳..空白).Replace("  ", 细绳。空的);

    字体 棕色= 新的 字体(字体.courier,9f, 字体。普通的, 新的 颜色(163,21,21));

    字体 LightBlue =. 新的 字体(字体.courier,9f, 字体。普通的, 新的 颜色(43,145,175));

    字体 快递= 新的 字体(字体.courier,9f);

    字体 格鲁吉亚= fontfactory..getfont(“乔治亚州”,10f);

    georgia.Color = 颜色。灰色的;

     开始= 新的 (文字,佐治亚州);

    短语 p1 = 新的 短语(开始);

     c1 = 新的 (“你可以使用”媒体队“, 乔治亚州);

     c2 = 新的 (@“\ n”, 棕色的);

     c3 = 新的 (“ 或者 ”, 乔治亚州);

     c4 = 新的 (“环境”, 浅蓝);

     c5 = 新的 (“。新队”, 信使);

     c6 = 新的 (“, 甚至 ”, 乔治亚州);

     c7 = 新的 (“块”, 浅蓝);

     c8 = 新的 (“。新队”, 信使);

     c9 = 新的 (“作为你给出一块块的字符串的一部分。”, 乔治亚州);

    短语 p2 = 新的 短语();

    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);

    段落 P = 新的 段落();

    p.Add(p1);

    p.Add(p2);

    doc.Add(p);

}

抓住 (domecodException. dex)

{

     (dex);

}

抓住 (IoException. ioex)

{

     (ioex);

}

最后

{

    doc.Close();

}

 

首先,结果,那么有关代码的一些说明:

""

它不需要长时间开始向代码添加异常处理。当然,您应该始终使用尝试...捕获IO操作时,并使用ItextSharp文档对象,还有一个 domecodException. 要管理的对象。还有另一种例外情况来源,我发现相当偷偷摸摸。在测试代​​码生成PDF文件时,我无意中转换了构造函数中的两个参数,用于我调用的字体 浅蓝,在我经过价值 字体。普通的 在大小之前。这具有将字体大小设置为0的效果,这是常量设置为的值。试图打电话时抛出异常 doc.close(), 和I have to shut down VS to release its hold on the document object.

因此,异常处理开始制作其外观,从而至少发布文档对象。您还会注意到字体大小值现在使用 F后缀 跟着他们。这明确地告诉编译器,该值将被视为浮点数,并防止我经历的错误再次发生。

第一个文本块是@ -Quoted,或逐字字符串文字,需要拥有它的所有空格和纽单,否则会在结果的PDF中保留它们。除此之外,每个单独样式的字符串都会应用于自己的块对象,然后添加到短语以确保在PDF中包装该行。最后,两个短语都被添加到单个段落对象中。还可以使用段落文本的对齐方式来使用 段落。章程() 方法。这接受了一个字符串"Left", "Center", "Justify", and "Right"有效值。以下显示了前面的示例 P.SetAlignment("Justify");

""

段落类有许多用于样式的其他有用属性,包括:

段落.FirstlineIndent.  //允许您将浮点值应用于缩进第一行
段.IndentationLeft.  //允许您向左侧添加空间
段.IndentationRight. //允许您向右侧添加空间
段落.PacingBefore. //指定段落上方的空间量
段落.PacingAfter.  //指定段落后的空间量

下一篇文章将看出基于文本的功能,特别是在列表区域中。