Exemplo n.º 1
0
        public void It_should_render_images()
        {
            var redBlue    = CreateBitmap(Brushes.Red, Brushes.Blue, 400, 400);
            var blueYellow = CreateBitmap(Brushes.Blue, Brushes.Yellow, 30, 30);

            var renderer = new PdfRenderer();
            var vBox     = new VBox();
            var hBox     = new HBox();

            AddComponent(hBox, new Image {
                Src = redBlue, Width = 40, Height = 40, Scaling = ImageScaling.Uniform
            });
            AddComponent(hBox, new Image {
                Src = redBlue, Width = 40, Height = 30, Scaling = ImageScaling.Uniform, Alignment = Alignment.Center
            });
            AddComponent(hBox, new Image {
                Src = redBlue, Width = 40, Height = 30, Scaling = ImageScaling.Uniform, Alignment = Alignment.Parse("center left")
            });
            AddComponent(hBox, new Image {
                Src = redBlue, Width = 40, Height = 30, Scaling = ImageScaling.Uniform, Alignment = Alignment.Parse("center right")
            });
            vBox.AddComponent(hBox);
            hBox = new HBox();
            AddComponent(hBox, new Image {
                Src = redBlue, Width = 30, Height = 40, Scaling = ImageScaling.Uniform, Alignment = Alignment.Center
            });
            AddComponent(hBox, new Image {
                Src = redBlue, Width = 30, Height = 40, Scaling = ImageScaling.Uniform, Alignment = Alignment.Parse("top center")
            });
            AddComponent(hBox, new Image {
                Src = redBlue, Width = 30, Height = 40, Scaling = ImageScaling.Uniform, Alignment = Alignment.Parse("bottom center")
            });
            vBox.AddComponent(hBox);
            hBox = new HBox();
            AddComponent(hBox, new Image {
                Src = redBlue, Width = 10, Height = 20, Scaling = ImageScaling.Fill
            });
            AddComponent(hBox, new Image {
                Src = blueYellow, Scaling = ImageScaling.None
            });
            AddComponent(hBox, new Image {
                Src = blueYellow, Width = 20, Height = 20, Alignment = Alignment.Center, Scaling = ImageScaling.None
            });
            AddComponent(hBox, new Image {
                Src = blueYellow, Width = 20, Height = 20, Alignment = Alignment.Parse("top left"), Scaling = ImageScaling.None
            });
            AddComponent(hBox, new Image {
                Src = blueYellow, Width = 20, Height = 20, Alignment = Alignment.Parse("bottom right"), Scaling = ImageScaling.None
            });
            vBox.AddComponent(hBox);
            var form = new Form(vBox);

            var doc  = new PdfDocument();
            var page = doc.AddPage();

            renderer.Render(form, page, new PdfRendererOptions {
                AdjustPageSize = true
            });
            PdfImageComparer.ComparePdfs("bitmaps", doc);
        }
Exemplo n.º 2
0
        public void QueuePage(Page page)
        {
            // Process markers
            PageSequence pageSequence = page.getPageSequence();

            if (pageSequence != currentPageSequence)
            {
                currentPageSequence        = pageSequence;
                currentPageSequenceMarkers = null;
            }
            ArrayList markers = page.getMarkers();

            if (markers != null)
            {
                if (documentMarkers == null)
                {
                    documentMarkers = new ArrayList();
                }
                if (currentPageSequenceMarkers == null)
                {
                    currentPageSequenceMarkers = new ArrayList();
                }
                for (int i = 0; i < markers.Count; i++)
                {
                    Marker marker = (Marker)markers[i];
                    marker.releaseRegistryArea();
                    currentPageSequenceMarkers.Add(marker);
                    documentMarkers.Add(marker);
                }
            }


            // Try to optimise on the common case that there are no pages pending
            // and that all ID references are valid on the current pages. This
            // short-cuts the pipeline and renders the area immediately.
            if ((renderQueue.Count == 0) && idReferences.IsEveryIdValid())
            {
                renderer.Render(page);
            }
            else
            {
                AddToRenderQueue(page);
            }

            pageCount++;
        }
Exemplo n.º 3
0
        private async Task <byte[]> Generate()
        {
            var form = await _loader.LoadForm(new MemoryStream(_formInBytes));

            var pdf = new PdfDocument();

            _renderer.Render(form, pdf.AddPage(), new PdfRendererOptions {
                AdjustPageSize = true
            });
            _renderer.Render(form, pdf.AddPage(), new PdfRendererOptions {
                ConfigureGraphics = x => x.ScaleTransform(0.5, 0.5)
            });
            using (var mem = new MemoryStream())
            {
                pdf.Save(mem);
                return(mem.ToArray());
            }
        }
        public byte[] RenderPdf([FromUri] string id, [FromUri] int dpi = 360, [FromUri] int page = 1)
        {
            var pdfContent = ContentManager.GetInstance().GetExamplePdf(id);
            var image      = PdfRenderer.Render(pdfContent, dpi, page);
            var stream     = new MemoryStream();

            image.Save(stream, ImageFormat.Jpeg);
            return(stream.ToArray());
        }
Exemplo n.º 5
0
        protected void ConvertDocumentToHtmlFile(JupyterDocument document, string fileName, bool openFile = false)
        {
            using (var writer = FileHelper.CreateStream(fileName))
            {
                var renderer = new PdfRenderer(writer);
                renderer.Render(document);
            }

            if (openFile)
            {
                FileHelper.ProcessFile(fileName);
            }
        }
Exemplo n.º 6
0
        public void Render_should_honor_size_transformation_in_measure()
        {
            var renderer = new PdfRenderer();
            var form     = new Form(new Panel {
                Width = SizeUnit.Unlimited, Height = SizeUnit.Unlimited
            });
            var page = new PdfDocument().AddPage();

            page.Width  = 100;
            page.Height = 30;
            renderer.Render(form, page, new PdfRendererOptions
            {
                ConfigureGraphics = g => g.ScaleTransform(2, 0.5)
            });
            form.Content.Layout.ShouldBe(new Rectangle(0, 0, 50, 60));
        }
		private static Bitmap RenderImage (PdfRenderer.Page page)
		{
			var bitmap = Bitmap.CreateBitmap (page.Width, page.Height, Bitmap.Config.Argb8888);

			// Fill with default while color first
			var canvas = new Canvas(bitmap);
			var paint = new Paint ()
			{
				Color = Color.White
			};
			canvas.DrawRect (new Rect (0, 0, page.Width, page.Height), paint);

			// Render content
			page.Render (bitmap, null, null, PdfRenderMode.ForDisplay);
			return bitmap;
		}
Exemplo n.º 8
0
        public void Render_should_adjust_page_size()
        {
            var renderer = new PdfRenderer();
            var form     = new Form(new Panel {
                Width = 200, Height = 100
            });
            var page = new PdfDocument().AddPage();

            page.Width  = 600;
            page.Height = 400;
            renderer.Render(form, page, new PdfRendererOptions {
                AdjustPageSize = true
            });

            page.Width.ShouldBe(200);
            page.Height.ShouldBe(100);
        }
Exemplo n.º 9
0
        public void It_should_render_panels_and_hboxes()
        {
            var renderer = new PdfRenderer();

            var hbox = new HBox {
                Alignment = Alignment.Center
            };

            hbox.AddComponent(new Panel
            {
                BackgroundColor = Color.Yellow,
                Padding         = new Spacer(5),
                Border          = new Border(3, Color.Red),
                Alignment       = new Alignment(VerticalAlignment.Bottom)
            });
            hbox.AddComponent(new Panel
            {
                BackgroundColor = Color.Green,
                Padding         = new Spacer(10, 5),
                Border          = new Border(2, Color.Red),
                Alignment       = new Alignment(VerticalAlignment.Center)
            });
            hbox.AddComponent(new Panel
            {
                BackgroundColor = Color.Blue,
                Padding         = new Spacer(15, 5),
                Border          = new Border(1, Color.Red)
            });
            var panel = new Panel
            {
                Width           = SizeUnit.Unlimited,
                Height          = SizeUnit.Unlimited,
                BackgroundColor = Color.LightSteelBlue,
                Padding         = new Spacer(2),
                Inner           = hbox
            };
            var form = new Form(panel);

            var doc  = new PdfDocument();
            var page = doc.AddPage();

            page.Width  = 50;
            page.Height = 40;
            renderer.Render(form, page);
            PdfImageComparer.ComparePdfs("panels_hbox", doc);
        }
Exemplo n.º 10
0
        public void Render_should_use_page_size()
        {
            var renderer = new PdfRenderer();
            var form     = new Form(new Panel {
                Width = SizeUnit.Unlimited, Height = SizeUnit.Unlimited
            });
            var page = new PdfDocument().AddPage();

            page.Width  = 600;
            page.Height = 400;
            renderer.Render(form, page);

            form.Content.Layout.ShouldBe(new Rectangle(0, 0, 600, 400));

            page.Width.ShouldBe(600);
            page.Height.ShouldBe(400);
        }
Exemplo n.º 11
0
        public void Render_should_adjust_page_size_honoring_transformation()
        {
            var renderer = new PdfRenderer();
            var form     = new Form(new Panel {
                Width = 200, Height = 100
            });
            var page = new PdfDocument().AddPage();

            page.Width  = 600;
            page.Height = 400;
            renderer.Render(form, page, new PdfRendererOptions
            {
                AdjustPageSize    = true,
                ConfigureGraphics = g => g.ScaleTransform(0.5, 0.5)
            });

            page.Width.ShouldBe(100);
            page.Height.ShouldBe(50);
        }
Exemplo n.º 12
0
        public void It_should_render_rounded_panels_with_borders()
        {
            var renderer = new PdfRenderer();

            var vbox = new VBox();

            var borders = new[]
            {
                new [] { "10 0 0 0", "0 10 0 0", "0 0 10 0", "0 0 0 10" },
                new [] { "10 10 0 0", "10 0 10 0", "10 0 0 10", "0 0 10 10" },
                new [] { "10 10 10 0", "10 0 10 10", "10 10 0 10", "10 10 10 10" }
            };

            foreach (var boxLine in borders)
            {
                var hbox = new HBox();
                foreach (var border in boxLine)
                {
                    hbox.AddComponent(new Panel
                    {
                        Margin          = new Spacer(1),
                        BackgroundColor = Color.Orange,
                        Width           = 24,
                        Height          = 24,
                        Border          = Border.Parse("1 black"),
                        BorderRadius    = BorderRadius.Parse(border)
                    });
                }
                vbox.AddComponent(hbox);
            }

            var doc  = new PdfDocument();
            var page = doc.AddPage();

            renderer.Render(new Form(vbox), page, new PdfRendererOptions {
                AdjustPageSize = true
            });
            PdfImageComparer.ComparePdfs("panels_rounded_border", doc);
        }
Exemplo n.º 13
0
        public IActionResult DownloadToPdf(JupyterPreviewModel model)
        {
            var jupyterText = model.PreviewJson;

            if (!string.IsNullOrEmpty(jupyterText))
            {
                //convert to document
                var document = Jupyter.Parse(jupyterText);

                //convert to html
                string fileName  = "jupyterDocument.pdf";
                byte[] fileBytes = null;
                using (var memoryStream = new MemoryStream())
                {
                    var htmlRenderer = new PdfRenderer(memoryStream);
                    htmlRenderer.Render(document);
                    fileBytes = memoryStream.ToArray();
                }

                return(File(fileBytes, "application/force-download", fileName));
            }

            return(RedirectToAction("Index"));
        }
Exemplo n.º 14
0
    public static void Save(Control?control, Size size, string path)
    {
        if (control is null)
        {
            return;
        }

        if (path.EndsWith("png", StringComparison.OrdinalIgnoreCase))
        {
            PngRenderer.Render(control, size, path);
        }

        if (path.EndsWith("svg", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            SvgRenderer.Render(control, size, stream);
        }

        if (path.EndsWith("pdf", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            PdfRenderer.Render(control, size, stream, 96);
        }

        if (path.EndsWith("xps", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            XpsRenderer.Render(control, size, stream, 96);
        }

        if (path.EndsWith("skp", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            SkpRenderer.Render(control, size, stream);
        }
    }
Exemplo n.º 15
0
        public void It_should_render_text()
        {
            var renderer = new PdfRenderer();
            var content  = new HBox {
                Width = SizeUnit.Unlimited
            };

            content.AddComponent(new Panel
            {
                Width           = 100,
                Height          = SizeUnit.Unlimited,
                BackgroundColor = Color.Yellow,
                Margin          = new Spacer(1),
                Border          = new Border(1, Color.Black),
                Padding         = new Spacer(2),
                Inner           = new Label
                {
                    TextColor = Color.Red,
                    Font      = new FontInfo(TestFontFamily.Serif, 10, FontInfoStyle.Underline | FontInfoStyle.Italic),
                    Text      = "Hello my friend!\nIt's nice to see you!\n\nWhat is a nice and sunny day, is not it?"
                }
            });

            content.AddComponent(new Panel
            {
                Width           = 100,
                Height          = SizeUnit.Unlimited,
                BackgroundColor = Color.DarkSeaGreen,
                Margin          = new Spacer(1),
                Border          = new Border(1, Color.Black),
                Padding         = new Spacer(2),
                Inner           = new Link
                {
                    TextColor = Color.Blue,
                    Font      = new FontInfo(TestFontFamily.Serif, 14, FontInfoStyle.Bold),
                    Text      = "How are you doing today?",
                    Uri       = "http://google.com"
                }
            });

            var textBox = new TextBox();

            textBox.AddComponent(new Label {
                Text = "Hello!\n", TextColor = Color.Green, Font = new FontInfo(TestFontFamily.Monospace, 20, FontInfoStyle.Underline)
            });
            textBox.AddComponent(new Label {
                Text = "Hi Bob, nice to see you after", TextColor = Color.Black, Font = new FontInfo(TestFontFamily.SansSerif, 10)
            });
            textBox.AddComponent(new Label {
                Text = "20", TextColor = Color.Red, Font = new FontInfo(TestFontFamily.SansSerif, 10, FontInfoStyle.Bold)
            });
            textBox.AddComponent(new Label {
                Text = "years!\n", TextColor = Color.Black, Font = new FontInfo(TestFontFamily.SansSerif, 10)
            });
            textBox.AddComponent(new Label {
                Text = "I'm sure you'd love to see my new", TextColor = Color.Black, Font = new FontInfo(TestFontFamily.SansSerif, 10)
            });
            textBox.AddComponent(new Link {
                Text = "web", TextColor = Color.Blue, Font = new FontInfo(TestFontFamily.SansSerif, 12, FontInfoStyle.Italic), Uri = "http://google.com"
            });
            textBox.AddComponent(new Link {
                Text = "site", TextColor = Color.Green, TextContinuation = true, Font = new FontInfo(TestFontFamily.SansSerif, 12, FontInfoStyle.Italic), Uri = "http://google.com"
            });
            content.AddComponent(new Panel
            {
                Width           = SizeUnit.Unlimited,
                Height          = SizeUnit.Unlimited,
                BackgroundColor = Color.LightYellow,
                Margin          = new Spacer(1),
                Border          = new Border(1, Color.Black),
                Padding         = new Spacer(2),
                Inner           = textBox
            });

            var form = new Form(content);

            var doc  = new PdfDocument();
            var page = doc.AddPage();

            page.Width  = 320;
            page.Height = 400;
            renderer.Render(form, page);
            PdfImageComparer.ComparePdfs("text_box", doc);
        }
Exemplo n.º 16
0
        public byte[] ToPdf()
        {
            IRenderer renderer = new PdfRenderer();

            return(renderer.Render(_report));
        }
Exemplo n.º 17
0
        public void It_should_render_viewports()
        {
            var renderer = new PdfRenderer();

            var stack = new Stack();

            stack.AddComponent(new Panel
            {
                Width           = 100,
                Height          = 100,
                Border          = Border.Parse("1 #808080"),
                BackgroundColor = Color.LightBlue,
                BorderRadius    = BorderRadius.Parse("25")
            });
            stack.AddComponent(new Viewport
            {
                Alignment = Alignment.Parse("center left"),
                Width     = 10,
                Inner     = new Panel
                {
                    Width           = 40,
                    Height          = 40,
                    Border          = Border.Parse("1 #808080"),
                    BackgroundColor = Color.White,
                    BorderRadius    = BorderRadius.Parse("20")
                },
                ContentAlignment = Alignment.Parse("center right")
            });
            stack.AddComponent(new Viewport
            {
                Alignment = Alignment.Parse("top center"),
                Height    = 10,
                Inner     = new Panel
                {
                    Width           = 40,
                    Height          = 40,
                    Border          = Border.Parse("1 #808080"),
                    BackgroundColor = Color.White,
                    BorderRadius    = BorderRadius.Parse("20")
                },
                ContentAlignment = Alignment.Parse("bottom center")
            });
            stack.AddComponent(new Viewport
            {
                Alignment = Alignment.Parse("center right"),
                Width     = 10,
                Inner     = new Panel
                {
                    Width           = 40,
                    Height          = 40,
                    Border          = Border.Parse("1 #808080"),
                    BackgroundColor = Color.White,
                    BorderRadius    = BorderRadius.Parse("20")
                },
                ContentAlignment = Alignment.Parse("center left")
            });
            stack.AddComponent(new Viewport
            {
                Alignment = Alignment.Parse("bottom center"),
                Height    = 10,
                Inner     = new Panel
                {
                    Width           = 40,
                    Height          = 40,
                    Border          = Border.Parse("1 #808080"),
                    BackgroundColor = Color.White,
                    BorderRadius    = BorderRadius.Parse("20")
                },
                ContentAlignment = Alignment.Parse("top center")
            });
            stack.AddComponent(new Viewport
            {
                Alignment  = Alignment.Parse("center center"),
                ClipMargin = Spacer.Parse("3 1"),
                Inner      = new Panel
                {
                    Width           = 40,
                    Height          = 40,
                    BackgroundColor = Color.White,
                    Border          = Border.Parse("1 #808080"),
                    BorderRadius    = BorderRadius.Parse("20")
                },
                ContentAlignment = Alignment.Parse("center center")
            });
            var form = new Form(stack);

            var doc = new PdfDocument();

            renderer.Render(form, doc.AddPage(), new PdfRendererOptions {
                AdjustPageSize = true
            });
            PdfImageComparer.ComparePdfs("viewport", doc);
        }
Exemplo n.º 18
0
        public void It_should_render_text_with_different_line_heights()
        {
            var renderer = new PdfRenderer();
            var content  = new HBox {
                Width = SizeUnit.Unlimited
            };

            content.AddComponent(new Panel
            {
                Width           = 100,
                Height          = SizeUnit.Unlimited,
                BackgroundColor = Color.Yellow,
                Margin          = new Spacer(1),
                Inner           = new Label
                {
                    TextColor  = Color.Red,
                    Font       = new FontInfo(TestFontFamily.Serif, 10, FontInfoStyle.Underline | FontInfoStyle.Italic),
                    Text       = "Hello my friend!\nIt's nice to see you!\n\nWhat is a nice and sunny day, is not it?",
                    LineHeight = 1.2f
                }
            });

            content.AddComponent(new Panel
            {
                Width           = 100,
                Height          = SizeUnit.Unlimited,
                BackgroundColor = Color.Yellow,
                Margin          = new Spacer(1),
                Inner           = new Label
                {
                    TextColor  = Color.Red,
                    Font       = new FontInfo(TestFontFamily.Serif, 10, FontInfoStyle.Underline | FontInfoStyle.Italic),
                    Text       = "Hello my friend!\nIt's nice to see you!\n\nWhat is a nice and sunny day, is not it?",
                    LineHeight = 2f
                }
            });

            content.AddComponent(new Panel
            {
                Width           = 100,
                Height          = SizeUnit.Unlimited,
                BackgroundColor = Color.Yellow,
                Margin          = new Spacer(1),
                Inner           = new Label
                {
                    TextColor  = Color.Red,
                    Font       = new FontInfo(TestFontFamily.Serif, 10, FontInfoStyle.Underline | FontInfoStyle.Italic),
                    Text       = "Hello my friend!\nIt's nice to see you!\n\nWhat is a nice and sunny day, is not it?",
                    LineHeight = 0.8f
                }
            });

            var form = new Form(content);

            var doc  = new PdfDocument();
            var page = doc.AddPage();

            page.Width  = 300;
            page.Height = 400;
            renderer.Render(form, page);
            PdfImageComparer.ComparePdfs("text_box_line_height", doc);
        }
Exemplo n.º 19
0
        public void It_should_render_text_with_alignments()
        {
            var renderer = new PdfRenderer();

            var labelBox = new HBox {
                Width = SizeUnit.Unlimited
            };

            foreach (var align in new[] { TextAlignment.Left, TextAlignment.Right, TextAlignment.Center, TextAlignment.Justify })
            {
                labelBox.AddComponent(new Panel
                {
                    Width           = 100,
                    Height          = SizeUnit.Unlimited,
                    BackgroundColor = Color.Yellow,
                    Margin          = new Spacer(1),
                    Border          = new Border(1, Color.Black),
                    Padding         = new Spacer(2),
                    Inner           = new Label
                    {
                        Width         = SizeUnit.Unlimited,
                        TextColor     = Color.Red,
                        TextAlignment = align,
                        Font          = new FontInfo(TestFontFamily.Serif, 10, FontInfoStyle.Underline | FontInfoStyle.Italic),
                        Text          = "Hello my friend!\nIt's nice to see you!\n\nWhat is a nice and sunny day, is not it?"
                    }
                });
            }

            var areaBox = new HBox {
                Width = SizeUnit.Unlimited
            };

            foreach (var align in new[] { TextAlignment.Left, TextAlignment.Right, TextAlignment.Center, TextAlignment.Justify })
            {
                var textBox = new TextBox
                {
                    Width         = SizeUnit.Unlimited,
                    TextAlignment = align
                };
                textBox.AddComponent(new Label
                {
                    TextColor = Color.Red,
                    Text      = "Hi Bob!",
                    Font      = new FontInfo(TestFontFamily.Serif, 10, FontInfoStyle.Underline | FontInfoStyle.Italic)
                });

                textBox.AddComponent(new Link
                {
                    TextColor = Color.Black,
                    Text      = "Check out this: ",
                    Font      = new FontInfo(TestFontFamily.Serif, 12, FontInfoStyle.Regular)
                });
                textBox.AddComponent(new Link
                {
                    TextColor = Color.Purple,
                    Text      = "great link!!!",
                    Font      = new FontInfo(TestFontFamily.Serif, 8, FontInfoStyle.Underline),
                    Uri       = "http://google.com"
                });
                areaBox.AddComponent(new Panel
                {
                    Width           = 100,
                    Height          = SizeUnit.Unlimited,
                    BackgroundColor = Color.Green,
                    Margin          = new Spacer(1),
                    Border          = new Border(1, Color.Black),
                    Padding         = new Spacer(2),
                    Inner           = textBox
                });
            }

            var content = new VBox {
                Width = SizeUnit.Unlimited
            };

            content.AddComponent(labelBox);
            content.AddComponent(areaBox);

            var form = new Form(content);

            var doc  = new PdfDocument();
            var page = doc.AddPage();

            page.Width  = 400;
            page.Height = 400;
            renderer.Render(form, page);
            PdfImageComparer.ComparePdfs("text_box_align", doc);
        }