iTextSharp文档关闭导致额外的空白页面

时间:2014-07-14 15:45:51

标签: pdf itextsharp document-class pdfpage

我正在使用PdfPageEventHelper,以便能够自动将Header和Footer添加到我的文档的每个页面。正如在很多地方提到的那样,我在覆盖OnEndPage时这样做。 在我的课上我正在创作:

  1. PdfDocument
  2. 创建FileStream
  3. 获取静态GetInstance方法的PdfWriter
  4. 将我创建的特定PdfPageEventHelper类设置为writer.PageEvent
  5. 将作者添加到文档
  6. 调用文档
  7. 在文档中添加一些内容(一个非常小的表有一行)
  8. 调用关闭文档
  9. 现在 - 在步骤#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);
        }
    }
    

0 个答案:

没有答案