itextsharp 辅助类






4.88/5 (30投票s)
ITextSharp 辅助类提供了一种使用 ITextSharp 5.* 生成 PDF 文档的简单方法。
引言
ITextSharp 是一个用于创建 PDF 文档的库。它提供了创建 PDF 文档所需的所有基本功能。但是,由于所有方法都基于基本操作,因此很容易混淆文档的外观和感觉,而又不强制执行某些标准。此辅助类提供了两个主要好处。首先,它简化了 PDF 文档的创建。其次,它有助于强制执行文档外观和感觉方面的标准。
此类通过提供一个坚实的基础来构建您的文档,从而简化了创建过程。这里已经进行了大量的研究,并包含在一个可以即时使用、可继承的类中。实现动态页脚、表格、段落和图像所需的代码包含在该类中。
此类还有助于强制执行提供 PDF 文档统一外观和感觉的标准。由于 ITextSharp 使用基本操作来构建文档,因此每个段落和表格单元格都需要大量的装饰才能以所需的格式显示。这些调用通过提供标准的段落、表格单元格和短语工厂方法来提供帮助,这些方法将有助于确保您的文档始终具有相同的段落间距、相同的字体和其他有助于构建专业外观文档的因素。
背景
辅助类中举例说明的功能之一是页脚支持。在 ITextSharp 5.0 中,开发人员删除了一个提供页眉和页脚的头脚类。使用 OnPageEnd
和 OnPageStart
可以获得相同的功能;但是,它不像 5.0 版本之前的解决方案那样容易实现。
Using the Code
此解决方案的核心是 ITextLetterBase
类。此类旨在由将生成信函的工作类继承。此类将成为任何使用 ITextSharp 的商店框架的绝佳选择。
方法
|
提供标准段落样式。 |
|
提供一个带有 |
|
用于创建粗体段落或标题段落。 |
|
用于创建带有 |
|
用于使用标准字体创建可以添加到段落中的短语。 |
|
用于生成包含 RE: 信息的短表。第一个单元格包含“RE:”,第二个单元格可能包含一个包含多行的段落。使用 第一个单元格包含“RE:”并且第二个单元格可能包含一个包含多行的段落。使用 |
|
返回一个地址页脚模板。此模板右对齐,位于页面底部。它使用 |
|
返回一个带有“Page x”的页脚模板。 |
|
返回一个 |
|
此方法创建一个没有边框且带有 |
|
此方法创建一个没有边框且带有段落的表格单元格。 |
|
创建一个带有黑色边框且带有 |
|
创建一个带有黑色边框、灰色背景、粗体文本的标准单元格,并填充 |
|
创建一个右对齐的段落,显示“LetterDate”(这可能是一个日期或任何其他内容)。 |
|
创建一个右对齐的段落,显示今天的短日期。 |
|
创建一个用于称呼行的段落。例如:“Dear John:”。这使用了 |
|
此方法创建几个段落,用于标准的信函结束语。 它使用以下属性: |
|
此方法生成创建 PDF 文档所需的标准对象。最重要的对象称为 |
|
事件 这会在页面结束时触发。这是添加页脚的方式。 |
|
事件 这会在页面开始时触发。如果您要添加页眉,可以在此处添加。 |
|
事件 这会在新段落开始时触发。 |
|
这会设置流和文档。这也是我添加页脚行列表内容的地方。 |
|
创建类中使用的字体定义。如果您想添加字体样式或更改现有字体样式,应该修改此方法。 |
属性和对象
|
这包含 PDF 类的输出。 |
|
这包含输出的字节数组。这适用于写入文件或通过 ASP.NET 响应流发送。 |
|
“Dear Person”行的内容。 |
|
写信人的姓名。 |
|
写信人的头衔。 |
|
页脚行作为一个列表。每个条目都是一行。 |
|
这是信函结束语的最后一句/段落。 |
|
“Sincerely”或“Regards”等… |
|
对象 – PDF 文档对象。 |
如何使用此代码
步骤 1。为了演示方便,我将创建一个控制台应用程序。请确保包含对 ITextsharp
和 System.Drawing
的引用。
步骤 2。创建一个新类来构建文档。例如,Letter1
。此类需要继承 ITextLetterBase
类。
public class Letter1 : ITextLetterBase
{
public Letter1()
{}
}
步骤 3。添加 GenerateLetter
方法。此方法将包含创建信函的说明。此方法中的第一个调用应该是 GenerateLetterBase()
。然后,添加创建信函所需的对象和段落。
public void GenerateLetter()
{
// Create ITextSharp Objects
GenerateLetterBase();
l1.Add(HeaderLogo());
l1.Add(WriteAddress(new AddressType("John Q. Public",
string.Empty, "Suite 401", "123 Rose Street",
"Pasadena", "CA", "11111")));
l1.Add(DateLine());
l1.Add(REBlock(new Paragraph("A New Beginning")));
l1.Add(SalutationLine());
Paragraph p = NewParagraph();
p.Add(ParaLine("Greetings! This letter was created using the" +
"ITextLetterBase class. It makes creating PDF's relatively” +
"simple and provides automatic footer operations. "));
l1.Add(p);
l1.Add(NewParagraph("This class was created to help standardize " +
"the look and feel of a pdf generated by a .Net " +
"applications. Before this helper class existed, the " +
"developer would have to apply styles separately to each “ +
"paragraph. ));
Phrase ph = new Phrase("I really hope you find the class and " +
" this ", fontGeneralText);
Phrase ph2 = new Phrase("example ",fontBoldText );
Phrase ph3 = new Phrase("to be useful.", fontGeneralText);
Paragraph p2 = NewParagraph();
p2.Add(ph);
p2.Add(ph2);
p2.Add(ph3);
l1.Add(p2);
Closing();
步骤 4。添加完内容后,您需要关闭文档。
l1.Close(); // closes the pdf document
DocumentBytes = PDFStream.GetBuffer(); // creates a byte array.
}
步骤 5。更改 Main
以使用该类
static void Main(string[] args)
{
Letter1 mydoc = new Letter1();
mydoc.GenerateLetter();
FileStream f = new FileStream("fileout.pdf", FileMode.Create);
f.Write(mydoc.DocumentBytes, 0, mydoc.DocumentBytes.Length);
f.Close();
}
在此示例中,我将 DocumentBytes
的内容写入一个名为 fileout.pdf 的文件。
关注点
请记住更改基类属性以反映您的组织需求。
应根据需要扩展此类,以添加更多标准化类。
页眉和页脚总是更复杂,因为您不能直接写入文档元素。例如,您不能在页面结束时执行“l1.add(footer)
”,因为它会与可用的页面区域冲突。相反,我们将一个“模板”直接写入 PDF 的指定位置。如果您的页脚或页眉太大,这也可能带来挑战。它会覆盖文档的正文区域。为了避免这种情况,您需要调整文档对象的正文边距。
历史
- 2010 年 5 月 – 首次发布
- 2010 年 7 月 - 更新了源代码