2014-10-28 52 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

相關問題