Пример #1
0
        public byte[] ToPdf()
        {
            var doc = new PdfDocument();

            doc.Info.Author  = Author ?? string.Empty;
            doc.Info.Title   = Title ?? string.Empty;
            doc.Info.Creator = "Scriber " + typeof(Document).Assembly.GetName().Version?.ToString();

            var renderContext = new PdfDrawingContext
            {
                Document = doc
            };

            foreach (var page in Pages)
            {
                if (page is MeasuredDocumentPage)
                {
                    var pdfPage  = doc.AddPage();
                    var graphics = XGraphics.FromPdfPage(pdfPage);
                    renderContext.Graphics = graphics;
                }
                page.OnRender(renderContext);
            }

            if (doc.PageCount == 0)
            {
                doc.AddPage();
            }

            Outline.AddPdf(Outlines, doc);

            using var ms = new MemoryStream();
            doc.Save(ms);
            return(ms.ToArray());
        }
Пример #2
0
    public static void ExportToPDF(this IRenderer renderer, String title, Stream stream)
    {
        var root = renderer.SkiaTree.Root;

        PdfDocument document = new PdfDocument();

        document.Info.Title = title;

        PdfPage page = document.AddPage();

        page.Size = PdfSharp.PageSize.A4;

        XGraphics gfx = XGraphics.FromPdfPage(page);

        PdfDrawingContext context = new PdfDrawingContext(gfx);

        context.Rendering += (sender, bounds) =>
        {
            if (bounds.Bottom > page.Height.Value * (double)document.PageCount && bounds.Height < page.Height)
            {
                page      = document.AddPage();
                page.Size = PdfSharp.PageSize.A4;
                gfx.Dispose();
                gfx = XGraphics.FromPdfPage(page);
                context.Reset(gfx, (page.Height.Value * (document.PageCount - 1)));
            }
        };

        root.Render(context, root.Bounds, root.Bounds, 1);

        document.Save(stream, false);

        gfx.Dispose();
    }
Пример #3
0
        public byte[] ToPdf()
        {
            var doc           = new PdfDocument();
            var renderContext = new PdfDrawingContext();

            foreach (var page in Pages)
            {
                var pdfPage  = doc.AddPage();
                var graphics = XGraphics.FromPdfPage(pdfPage);
                renderContext.Graphics = graphics;
                page.OnRender(renderContext);
            }

            using var ms = new MemoryStream();
            doc.Save(ms);
            return(ms.ToArray());
        }