2016-11-16 2 views
0

У меня есть 4 содержимого HTML, где 2-й HTML содержит большие таблицы данных. После того, как PDF создал второй контент, связанный с HTML, был распространен на 3 страницы в формате PDF. Но номера страниц не отображаются для первого 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

Мне кажется, что вы слишком поздно установили 'Storage.rotationPage', добавив много контента (возможно, заполнив много страниц) с помощью' hw.Parse'. Возможно, вы захотите установить «Storage.rotationPage» в обоих случаях непосредственно после вызова 'document.NewPage()'. – mkl

+0

Спасибо MKL. я просто переместил свой Storage.rotationPage = "false"; до одной линии и работает! – anilvardhan

ответ

1

Просто перестроена система хранения. Спасибо 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)); 

      } 
Смежные вопросы