【问题标题】:Can someone explain what are iTextEvents in ItextSharp?有人可以解释一下 ItextSharp 中的 iTextEvents 是什么吗?
【发布时间】:2018-04-16 08:28:05
【问题描述】:

谁能解释一下ItextSharp中的iTextEvents是什么? 我发现了一堆使用它的代码,但我不明白它们是如何工作的.. 我问你是否有人可以向我解释这些:

OnOpenDocument

OnEndPage

OnCloseDocument

【问题讨论】:

  • “我找到了一堆代码”听起来你正试图从代码示例而不是教程中了解 iText。就好像你没有去the official web site,也没有读过free books,比如iText 7 jump-start tutorial。如果您阅读过这些书籍中的任何一本书,您就不会看到旧的 iText 版本,也不必问这个问题。你想学吗?阅读教程!
  • code sn-p in code 格式

标签: events itext


【解决方案1】:

如果您希望开始使用 iText,那么您的问题已经过时。您指的是在 .NET 的 iText 版本 5 和更早版本中使用的概念(我们很久以前就放弃了 iTextSharp 的名称)。如果你想开始使用 iText for .NET,你应该从 version 7 开始,not 使用 iText 5 或更早版本,因为我们停止了这些版本的开发。我们现在发布的任何版本都只不过是一个维护 版本(维护版本不包含新功能,它们有错误修复,旨在为无法立即迁移到 iText 7 的付费用户)。

名称页面事件具有误导性,因为这些事件最初用于允许开发人员在创建或完成新页面时执行代码,但随着代码的有机增长,我们也开始将页面事件功能用于其他事情,例如:添加Chunk (OnGenericTag()) 的特殊行为或在添加Paragraph 之前或之后执行代码。这是一个糟糕设计的例子。

我们在 iText 7 中修复了这个糟糕的设计,我们在其中引入了渲染器和事件处理程序。请参阅标题为使用渲染器和事件处理程序的快速入门教程的chapter 3

在 iText 7 中,我们可以创建一个事件处理程序,例如:

protected internal class MyEventHandler : IEventHandler {
    public virtual void HandleEvent(Event @event) {
        PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
        PdfDocument pdfDoc = docEvent.GetDocument();
        PdfPage page = docEvent.GetPage();
        int pageNumber = pdfDoc.GetPageNumber(page);
        Rectangle pageSize = page.GetPageSize();
        PdfCanvas pdfCanvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
        //Set background
        Color limeColor = new DeviceCmyk(0.208f, 0, 0.584f, 0);
        Color blueColor = new DeviceCmyk(0.445f, 0.0546f, 0, 0.0667f);
        pdfCanvas.SaveState()
                    .SetFillColor(pageNumber % 2 == 1 ? limeColor : blueColor)
                    .Rectangle(pageSize.GetLeft(), pageSize.GetBottom(), pageSize.GetWidth(), pageSize.GetHeight())
                    .Fill()
                    .RestoreState();
        //Add header and footer
        pdfCanvas.BeginText()
                    .SetFontAndSize(C03E03_UFO.helvetica, 9)
                    .MoveText(pageSize.GetWidth() / 2 - 60, pageSize.GetTop() - 20)
                    .ShowText("THE TRUTH IS OUT THERE")
                    .MoveText(60, -pageSize.GetTop() + 30)
                    .ShowText(pageNumber.ToString())
                    .EndText();
        //Add watermark
        iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pdfDoc, page.GetPageSize());
        canvas.SetProperty(Property.FONT_COLOR, Color.WHITE);
        canvas.SetProperty(Property.FONT_SIZE, 60);
        canvas.SetProperty(Property.FONT, C03E03_UFO.helveticaBold);
        canvas.ShowTextAligned(new Paragraph("CONFIDENTIAL"), 298, 421, pdfDoc.GetPageNumber(page), TextAlignment.
            CENTER, VerticalAlignment.MIDDLE, 45);
        pdfCanvas.Release();
    }
}

事件处理程序在代码中是这样引入的:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new C03E03_UFO.MyEventHandler(this));
// Initialize document
Document document = new Document(pdf);
Paragraph p = new Paragraph("List of reported UFO sightings in 20th century").SetTextAlignment(TextAlignment
    .CENTER).SetFont(helveticaBold).SetFontSize(14);
document.Add(p);
Table table = new Table(new float[] { 3, 5, 7, 4 });
table.SetWidth(UnitValue.CreatePercentValue(100));
StreamReader sr = File.OpenText(DATA);
String line = sr.ReadLine();
Process(table, line, helveticaBold, true);
while ((line = sr.ReadLine()) != null) {
    Process(table, line, helvetica, false);
}
sr.Close();
document.Add(table);
document.Close();

这段代码添加了背景、水印、页眉和页脚,如下图所示:

“iTextSharp”中的页面事件具有类似的目的,但您不应再使用它们。它们已经过时了。您应该改用 iText 7。

如果您出于对历史的好奇而发布您的问题,您应该在 Stack Overflow 上搜索旧问题,例如:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 2016-05-10
    • 2018-12-17
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多