2016-11-16 73 views
0

我有4个HTML内容,其中第2个HTML有大表数据。一旦PDF生成的第二个HTML相关内容扩展到PDF页面的3页。但页码不显示为第一个2.对于第二个HTML,我在旋转页面时生成PDF。itextsharp - 连续页面上缺少页码c#

PDF显示如下:

1 HTML - 页面1 - 1 5

2 HTML

- page 2 - ***...no page number...*** 

    - page 3 - ***...no page number...*** 

    - page 4 - 4 of 5 

3 HTML - 第5页 - 第5的5

public void HTMLToPdfCMC(string[] HTML, string fileName, string folderPath, string physicalApplPath, string requestNumber = "") 
    { 
     try 
     { 
      Document document = new Document(); 
      PdfWriter pdfwriter = PdfWriter.GetInstance(document, new FileStream(physicalApplPath + folderPath + "\\" + fileName + ".pdf", FileMode.Create)); 

      TableHeader tevent = new TableHeader(); 
      tevent.Header = requestNumber; 
      pdfwriter.PageEvent = tevent; 
      document.SetPageSize(PageSize.A4); 
      document.Open(); 
      Storage.rotationPage = ""; 

      iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet(); 
      iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document); 

      foreach (string htmlPage in HTML) 
      { 
       if (!string.IsNullOrEmpty(requestNumber) && requestNumber.Contains("CMC") && HTML[1] != null && HTML[1] == htmlPage) 
       { 
        //do page rotation 
        document.SetPageSize(PageSize.A4.Rotate()); 
        document.NewPage(); 
        hw.Parse(new StringReader(htmlPage)); 
        Storage.rotationPage = "true"; 
       } 
       else 
       { 
        document.SetPageSize(PageSize.A4); 
        document.NewPage(); 
        hw.Parse(new StringReader(htmlPage)); 
        Storage.rotationPage = "false"; 
       } 
      } 

      document.Close(); 
     } 
     catch (Exception ex) 
     { 
      LogUtil.PublishException("Error in HTMLToPdf EmailHelper - " + ex.Message, ex, null, 8); ; 
     } 
    } 

//代码

public override void OnEndPage(PdfWriter writer, Document document) 
    { 
     PdfPTable table = new PdfPTable(3); 
     try 
     { 
      table.SetWidths(new int[] { 24, 24, 2 }); 
      table.TotalWidth = 527; 
      table.LockedWidth = true; 
      table.DefaultCell.FixedHeight = 20; 
      table.DefaultCell.Border = iTextSharp.text.Rectangle.NO_BORDER; 
      iTextSharp.text.Font fontH1 = new iTextSharp.text.Font(FontFactory.GetFont("arial", 8)); 
      PdfPCell headerCell = new PdfPCell(new Phrase(Header, fontH1)); 
      headerCell.Border = iTextSharp.text.Rectangle.NO_BORDER; 
      headerCell.HorizontalAlignment = Element.ALIGN_CENTER; 
      headerCell.PaddingLeft = 180; 

      table.AddCell(headerCell); 



      PdfPCell cell2 = new PdfPCell(new Phrase(string.Format("Page {0} of", writer.PageNumber), fontH1)); 
      cell2.Border = iTextSharp.text.Rectangle.NO_BORDER; 
      cell2.HorizontalAlignment = Element.ALIGN_RIGHT; 

      BaseFont bfTimes = BaseFont.CreateFont(); 
      PdfPCell cell = null; 
      if (Storage.rotationPage == "true") 
      { 
       //totalH.SetFontAndSize(bfTimes, 10); 
       cell = new PdfPCell(iTextSharp.text.Image.GetInstance(total), true); 
      } 
      else 
      { 
       //total.SetFontAndSize(bfTimes, 12); 
       cell = new PdfPCell(iTextSharp.text.Image.GetInstance(total), true); 
      } 
      cell.Border = iTextSharp.text.Rectangle.NO_BORDER; 

      table.AddCell(cell2); 
      table.AddCell(cell); 


      if (Storage.rotationPage == "true") 
      { 
       table.TotalWidth = 790; 
       table.WriteSelectedRows(0, -1, 34, 570, writer.DirectContent); 
      } 
      else 
      { 
       table.WriteSelectedRows(0, -1, 34, 815, writer.DirectContent); 

      } 


      //float floatx = 20; 
      //float floaty = 50; 
      //table.WriteSelectedRows(0, -1, floatx, floaty, writer.DirectContent); 
     } 
     catch (DocumentException de) 
     { 
      throw de; 
     } 
    } 

请提出我缺少的地方。

+0

附注:'throw de',或任何'throw'加上此异常,将失去堆栈跟踪。只需使用'throw;' – TheLethalCoder

+0

在我看来,您在使用'hw.Parse'添加大量内容(可能会填充很多页面)后''Storage.rotationPage'太晚了。您可能希望在两种情况下直接在'document.NewPage()'调用之后设置'Storage.rotationPage'。 – mkl

+0

谢谢MKL。我刚刚移动了我的Storage.rotationPage =“false”;到一个排队,它的工作! – anilvardhan

回答

1

刚刚重新排列了storage.rotation行。 谢谢MKL。

if (!string.IsNullOrEmpty(requestNumber) && requestNumber.Contains("CMC") && HTML[1] != null && HTML[1] == htmlPage) 
      { 
       //do page rotation 
       document.SetPageSize(PageSize.A4.Rotate()); 
       document.NewPage(); 
       Storage.rotationPage = "true"; 
       hw.Parse(new StringReader(htmlPage)); 

      } 
      else 
      { 
       document.SetPageSize(PageSize.A4); 
       document.NewPage(); 
       Storage.rotationPage = "false"; 
       hw.Parse(new StringReader(htmlPage)); 

      }