65.9K
CodeProject 正在变化。 阅读更多。
Home

itextsharp 辅助类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (30投票s)

2010年5月13日

CPOL

5分钟阅读

viewsIcon

206471

downloadIcon

13886

ITextSharp 辅助类提供了一种使用 ITextSharp 5.* 生成 PDF 文档的简单方法。

引言

ITextSharp 是一个用于创建 PDF 文档的库。它提供了创建 PDF 文档所需的所有基本功能。但是,由于所有方法都基于基本操作,因此很容易混淆文档的外观和感觉,而又不强制执行某些标准。此辅助类提供了两个主要好处。首先,它简化了 PDF 文档的创建。其次,它有助于强制执行文档外观和感觉方面的标准。

此类通过提供一个坚实的基础来构建您的文档,从而简化了创建过程。这里已经进行了大量的研究,并包含在一个可以即时使用、可继承的类中。实现动态页脚、表格、段落和图像所需的代码包含在该类中。

此类还有助于强制执行提供 PDF 文档统一外观和感觉的标准。由于 ITextSharp 使用基本操作来构建文档,因此每个段落和表格单元格都需要大量的装饰才能以所需的格式显示。这些调用通过提供标准的段落、表格单元格和短语工厂方法来提供帮助,这些方法将有助于确保您的文档始终具有相同的段落间距、相同的字体和其他有助于构建专业外观文档的因素。

背景

辅助类中举例说明的功能之一是页脚支持。在 ITextSharp 5.0 中,开发人员删除了一个提供页眉和页脚的头脚类。使用 OnPageEndOnPageStart 可以获得相同的功能;但是,它不像 5.0 版本之前的解决方案那样容易实现。

Using the Code

此解决方案的核心是 ITextLetterBase 类。此类旨在由将生成信函的工作类继承。此类将成为任何使用 ITextSharp 的商店框架的绝佳选择。

方法

NewParagraph()

提供标准段落样式。

NewParagraph(string text)

提供一个带有 text 的标准段落样式。

NewBoldParagraph()

用于创建粗体段落或标题段落。

NewBoldParagraph(string text)

用于创建带有 text 的粗体段落或标题段落。

ParaLine(string Text)

用于使用标准字体创建可以添加到段落中的短语。

REBlock(Paragraph para)

用于生成包含 RE: 信息的短表。第一个单元格包含“RE:”,第二个单元格可能包含一个包含多行的段落。使用 Environment.NewLine 插入换行符。

第一个单元格包含“RE:”并且第二个单元格可能包含一个包含多行的段落。使用 Environment.NewLine 插入换行符。

AddAddressFooter()

返回一个地址页脚模板。此模板右对齐,位于页面底部。它使用 FooterLines 属性(一个列表)来填充页脚内容。

AddPageFooter(int PageNumber)

返回一个带有“Page x”的页脚模板。

HeaderLogo()

返回一个 Itextsharp 图像。该图像从 Resource1.resx 中提取,需要为您的应用程序进行自定义。

CellDataNoBorder(string text)

此方法创建一个没有边框且带有 text 的表格单元格。

CellDataNoBorder(Paragraph text)

此方法创建一个没有边框且带有段落的表格单元格。

CellData(string text)

创建一个带有黑色边框且带有 text 的标准单元格。

CellHeader(string text)

创建一个带有黑色边框、灰色背景、粗体文本的标准单元格,并填充 text

DateLine(string LetterDate)

创建一个右对齐的段落,显示“LetterDate”(这可能是一个日期或任何其他内容)。

DateLine()

创建一个右对齐的段落,显示今天的短日期。

SalutationLine()

创建一个用于称呼行的段落。例如:“Dear John:”。这使用了 Salutation 属性。

Closing()

此方法创建几个段落,用于标准的信函结束语。

它使用以下属性:ClosingFinalLineClosingSalutationFromPersonFromTitle

GenerateLetterBase()

此方法生成创建 PDF 文档所需的标准对象。最重要的对象称为 l1。这是所有段落和其他对象将被添加到的文档对象。

OnEndPage(PdfWriter writer, Document document)

事件

这会在页面结束时触发。这是添加页脚的方式。

OnStartPage(PdfWriter writer, Document document)

事件

这会在页面开始时触发。如果您要添加页眉,可以在此处添加。

OnParagraph(PdfWriter writer, Document document, float paragraphPosition)

事件

这会在新段落开始时触发。

构造函数

这会设置流和文档。这也是我添加页脚行列表内容的地方。

buildFonts()

创建类中使用的字体定义。如果您想添加字体样式或更改现有字体样式,应该修改此方法。

属性和对象

MemoryStream PDFStream

这包含 PDF 类的输出。

byte[] DocumentBytes

这包含输出的字节数组。这适用于写入文件或通过 ASP.NET 响应流发送。

string Salutation

“Dear Person”行的内容。

string FromPerson

写信人的姓名。

string FromTitle

写信人的头衔。

List<string> FooterLines

页脚行作为一个列表。每个条目都是一行。

string ClosingFinalLine

这是信函结束语的最后一句/段落。

string ClosingSalutation

“Sincerely”或“Regards”等…

Document l1

对象 – PDF 文档对象。

如何使用此代码

步骤 1。为了演示方便,我将创建一个控制台应用程序。请确保包含对 ITextsharpSystem.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 月 - 更新了源代码
© . All rights reserved.