2014-10-28 4 views
0

Я получаю значения из базы данных, и коллекция всех значений больше одной страницы. Количество страниц неизвестно и может отличаться от отчета по отчету. В настоящее время печатается только одна страница нескольких страниц, но одинаковая информация на всех страницах. Я хочу, чтобы непрерывная информация на страницах не была одинаковой информацией на каждой странице. Как я могу сделать это с помощью PDFsharp?Несколько страниц в одной и той же отчетности в формате PDF с помощью PDFsharp

Здесь я даю свои коды, чтобы понять ...

 Document doc = new Document(); 

     //Create table 
     var sec = doc.AddSection(); 
     var table = sec.AddTable(); 
     table.Format.Font.Size = 6; 
     table.Borders.Distance = 0; 
     table.Borders.Color = MigraDoc.DocumentObjectModel.Colors.DarkGray; 
     var renderer = new DocumentRenderer(doc); 
     renderer.PrepareDocument(); 
     int totalPage = renderer.FormattedDocument.PageCount; 

      for (int i = 1; i <= totalPage; ++i) 
      { 

       PdfPage pdfPage = pdf.AddPage(); 
       XGraphics gfx = XGraphics.FromPdfPage(pdfPage); 
       renderer.RenderObject(gfx, XUnit.FromMillimeter(10), XUnit.FromMillimeter(10), XUnit.FromMillimeter(double.MaxValue), table); 
       gfx.Dispose(); 
      } 

ответ

1

Вы можете MigraDoc создать весь документ без цикла:

PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always); 
renderer.Document = document; 
renderer.RenderDocument(); 

Вашего цикла имеет переменную i что не используется в вашем коде. Если вы хотите сделать это сложным способом, используйте RenderPage вместо RenderObject.

Смотрите также:
http://www.pdfsharp.net/wiki/MixMigraDocAndPdfSharp-sample.ashx

-2

Я не уверен, если это может оказаться полезным для тех, кто, но если вы хотите, чтобы разбить таблицу на несколько страниц, которые вы можете использовать этот метод:

public Document MultiplePagesPerDocument(Document document, DocumentForm documentForm, Section section, DocumentPage page, DataTable dt, int maxTableRows) 
    { 
     _document = document; 

     if (dt.Rows.Count > maxTableRows) 
     { 
      for (int i = 1; i <= dt.Rows.Count; i++) 
      { 
       // Break the table onto next page for maxTableRows 
       if (i % maxTableRows == 0) 
       { 
        section = _document.LastSection; 
        section.AddPageBreak(); 

        Paragraph paragraph = section.AddParagraph(); 
        paragraph.Format.SpaceAfter = "3cm"; 

        _position = new PageItemPosition() 
        { 
         Height = "3.0cm", 
         Width = "8.0cm", 
         Top = "3.0cm", 
         LeftPosition = ShapePosition.Left, 
         TopPosition = ShapePosition.Top 
        }; 

        object tableSection = page.AddPageTextFrame(section, _position, string.Empty); 

        documentForm.GenerateSection(section, tableSection, 170, "Table", dt); 
       } 
      } 
     } 

     return this._document; 
    } 
+1

Это не похоже на ответ на вопрос. Это не значит, что MigraDoc следует использовать - MigraDoc автоматически добавляет разрывы страниц при использовании по назначению. Пока вы не раскрываете источник для 'AddPageTextFrame' и' GenerateSection', этот ответ бесполезен. –

+1

Просьба уточнить, как этот код отвечает на вопрос. – JAL