【问题标题】:How to identify end of page is reached in pdf file using itextsharp如何使用 itextsharp 在 pdf 文件中识别页尾
【发布时间】:2010-12-27 11:33:06
【问题描述】:

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

有没有办法识别页面的结尾,以便我们可以添加一个新页面,然后先设置图像,以便出现在背景中,然后可以添加剩余的文本。

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

【问题讨论】:

    标签: c# pdf itextsharp background-image


    【解决方案1】:

    我建议你使用页面事件:

    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 将在创建每个页面时添加到“内容下”。不用担心什么时候自己添加...您可能需要使用 addImage 的各种覆盖来获得所需的大小。

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


    PdfPageEvent 有许多您可以覆盖的其他事件。 PdfPageEventHelper 涵盖了“无操作”的所有基础,因此您可以覆盖所需的事件:

    • OnStartPage
    • OnEndPage
    • 关闭文档
    • 关于段落
    • OnParagraphEnd
    • 开章
    • OnChapterEnd
    • OnSection
    • OnSectionEnd
    • OnGenericTag

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

    【讨论】:

      【解决方案2】:

      只需像这样检查 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();
              }
      

      【讨论】:

      • 如果您在“添加其他内容”中添加 Big 内容,您实际上可以跳过一页。如果有些东西在下一页上有点悬,你可能会用你的“背景”图像覆盖它的一部分(取决于你如何添加图像)
      • 感谢 AS-CII 提供解决方案。我可以使用您的解决方案在我的所有 pdf 页面上设置背景图像。
      猜你喜欢
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2018-05-25
      相关资源
      最近更新 更多