使用PDFsharp在同一PDF报告中的多个页面

时间:2014-10-28 13:01:47

标签: pdfsharp multipage migradoc

我从数据库获取值,所有值的集合都大于单个页面。页数未知,报告可能会有所不同。目前,只打印了多页的1页,但每页都有相同的信息。我希望页面中的连续信息与每页中的信息不同。我怎么能用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();
            }

2 个答案:

答案 0 :(得分:1)

你可以让MigraDoc在没有for循环的情况下创建整个文档:

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

你的for循环有一个变量i,代码中没有使用它。如果您想以复杂的方式执行此操作,请使用RenderPage代替RenderObject

另见:
http://www.pdfsharp.net/wiki/MixMigraDocAndPdfSharp-sample.ashx

答案 1 :(得分:-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;
    }
相关问题