使用itextsharp在pdf文件中到达如何识别页面结尾

时间:2010-12-27 11:33:06

标签: c# pdf itextsharp background-image

您好 我正在使用itextsharp生成一个pdf文件。我正在其上放置一个背景图像,并希望在所有页面上显示该图像。但是当第一页完成时,文本会自动移动到下一页,因此图像不会出现在新页面上页。

有没有办法识别页面结尾,以便我们可以添加新页面,然后先设置图像,这样就会显示在背景中,然后可以添加剩余的文本。

所有我想在pdf文件的所有页面上都有背景图像。

2 个答案:

答案 0 :(得分:3)

我建议您使用页面事件:

myWriter.setPageEvent(new BackgroundPageEvent(backgroundImage));

class BackgroundPageEvent extends PdfPageEventHelper {
  Image backgroundImage = null;
  public BackgroundPageEvent( Image img ) {
    backgroundImage = img;
  }
  public void onStartPage(PdfWriter writer, Document doc) {
    PdfContentByte underContent = writer.getDirectContentUnder();
    underContent.addImage(backgroundImage);
  }
}

使用上面的代码,backgroundImage将在创建每个页面时添加到“内容下”。无需担心何时自己添加... iText将为您解决这个问题,并且每个页面的underContent中的第一件事就是您的图像。您可能需要使用addImage的各种覆盖来获得所需的大小。

我相信如果您的程序有所不同,您还可以查询doc当前页面大小。如果没有,您应该能够以绝对位置/比例创建您传入的图像(这可能就是您已经在做的事情)。


PdfPageEvent还有许多其他可以覆盖的事件。 PdfPageEventHelper覆盖了所有带“no ops”的基础,因此你可以覆盖你想要的事件:

  • 的OnStartPage
  • 的OnEndPage
  • OnCloseDocument
  • OnParagraph
  • OnParagraphEnd
  • OnChapter
  • OnChapterEnd
  • OnSection
  • OnSectionEnd
  • OnGenericTag

通用标签实际上非常方便。您可以为文档中的任何内容提供通用标记(字符串),并使用用于绘制标记内容的rect调用OnGenericTag覆盖。各种各样的可能性。

答案 1 :(得分:1)

只需检查PdfWriter.PageNumber属性,如下所示:

        using (FileStream fs = File.Create("test.pdf"))
        {
            Document document = new Document(PageSize.A4, 72, 72, 72, 72);
            PdfWriter writer = PdfWriter.GetInstance(document, fs);

            document.Open();
            int pageNumber = -1;

            for (int i = 0; i < 20; i++)
            {
                if (pageNumber != writer.PageNumber)
                {
                    // Add image
                    pageNumber = writer.PageNumber;
                }

                // Add something else
            }

            document.Close();
        }