2014-10-28 10 views
0

데이터베이스에서 값을 가져 오는 중이고 모든 값의 컬렉션이 단일 페이지보다 큽니다. 페이지 수는 알려지지 않았으며 보고서별로 다를 수 있습니다. 현재, 여러 페이지 중 단 하나의 페이지 만 인쇄되지만 모든 페이지에서 동일한 정보가 인쇄됩니다. 나는 모든 페이지에서 동일한 정보가 아닌 페이지의 연속적인 정보를 원한다. PDFsharp로 어떻게하면됩니까? 여기PDFsharp로보고되는 동일한 PDF의 여러 페이지

나는 당신이 MigraDoc가 for 루프없이 전체 문서를 작성할 수 있습니다

 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

... 이해하는 내 코드를 제공하고있다 :

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

귀하의 변수 i를 가지 귀하의 코드에서 사용되지 않습니다. 복잡한 방법으로 수행하려면 RenderObject 대신 RenderPage을 사용하십시오.

은 참조 :
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