2014-10-28 121 views
0

我从数据库获取值,并且所有值的集合均大于单个页面。页数不详,可能会因报告而有所不同。目前,只有1页的多页正在打印,但每页都有相同的信息。我想要连续的信息在页面中不是每页都有相同的信息。我怎样才能用PDFsharp来做到这一点?使用PDFsharp进行同一PDF报告中的多个页面

在这里,我给我的代码,以了解...

 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'的来源,这个答案是没有用的。 – 2016-03-17 12:04:11

+1

请详细说明此代码如何回答问题。 – JAL 2016-03-20 02:45:16

相关问题