0

我正在使用 PdfPageEventHelper 以便能够自动将页眉和页脚添加到文档的每一页。正如在许多地方提到的那样,我在覆盖 OnEndPage 时这样做了。在我的课堂上,我正在创建:

  1. Pdf文档
  2. 创建文件流
  3. 通过静态 GetInstance 方法获取 PdfWriter
  4. 将我创建的特定 PdfPageEventHelper 类设置为 writer.PageEvent
  5. 将作者添加到文档中
  6. 调用文档打开
  7. 向文档添加一些内容(一个非常小的表格,只有一行)
  8. 调用关闭文档

现在 - 在第 8步调用 OnEndPage,这很好,但不知何故,它被调用了两次!两次它都被调用到第 1 页(正如我在运行时在文档参数中看到的那样),因此我在文档中得到 2 页而不是一个,其中第二页是空的,而第一页实际上是我的页眉和页脚两次(重叠)。我正在使用 iTextSharp 版本 5.5.1.0 ,我在源文件中看到在 Document.Close 方法中他们正在调用 NewPage 函数......这就是我第二次到达 OnEndPage 的原因。有什么建议么?

class MyPdfWriter
{
public MyPdfWriter()
{
//generate doc, file stream etc.
_document = _document = new PdfDocument();
_document.SetMargins(15, 15, 50, 50);
_document.SetPageSize(PageSize.A4);

_fs = new FileStream("myTest.pdf", FileMode.Create);
_writer = PdfWriter.GetInstance(_document, _fs);
_writer.PageEmpty = false;
_writer.PageEvent = new PdfPage(reportDetails.Header,reportDetails.Footer,reportDetails.LogoImage, reportDetails.ReportFileName);            

//open doc
_document.Open();

//add some content
var table = new PdfPTable(1);
table.AddCell("bla bla");
_document.Add(titleTable);

//close doc, stream etc.

if (_document != null && _document.IsOpen())
{
_document.Close();
 _document = null;
}

if (_writer != null)
{
 _writer.Close();
_writer = null;
}

if (_fs != null)
{
 _fs.Close();
 _fs.Dispose();
}
}
}


class PdfPage : PdfPageEventHelper
{
public override void OnEndPage(PdfWriter writer, Document document)
    {
        var footer = new PdfPTable(2);

        //Write some cells to footer
        //....


        //init the width
        footer.TotalWidth = (footer.TotalWidth.CompareTo(0f) != 0) ? footer.TotalWidth : document.PageSize.Width;
        //write the table with WriteSelectedRows
        footer.WriteSelectedRows(0, -1, document.LeftMargin, footer.TotalHeight + 10f, writer.DirectContent);


        var Header = new PdfPTable(2);

        //Write some cells to Header
        //....

        //init the width
        Header.TotalWidth = (Header.TotalWidth.CompareTo(0f) != 0) ? Header.TotalWidth : document.PageSize.Width;
        //write the table with WriteSelectedRows
        Header.WriteSelectedRows(0, -1, document.LeftMargin, document.PageSize.Height - 10,
                                     writer.DirectContent);
    }
}
4

0 回答 0