private async void Button_Click(object sender, RoutedEventArgs e)
{
float borderWidth = 1f; // 1-px black border around image
PdfDocument pdfDoc = new PdfDocument();
pdfDoc.PageSettings = new PdfPageSettings()
{
Orientation = PdfPageOrientation.Portrait,
Width = 850,
Height = 600
};
PdfPage page = pdfDoc.Pages.Add();
PdfGraphics graphics = page.Graphics;
PointF diagramOrigin = new PointF(10f, 10f);
float diagramRenderWidth = pdfDoc.PageSettings.Width - (diagramOrigin.X + (pdfDoc.PageSettings.Margins.Left + pdfDoc.PageSettings.Margins.Right));//795
float diagramRenderHeight = pdfDoc.PageSettings.Height - (diagramOrigin.Y + (pdfDoc.PageSettings.Margins.Top + pdfDoc.PageSettings.Margins.Bottom)); // 302
//Instead of passing Border, we can directly pass the UIElement chart.
Stream imageFileStream = await this.GetStreamFromUIElement(this.chartPanel);
PdfBrush blackBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));
PdfImage img = PdfImage.FromStream(imageFileStream);
graphics.DrawRectangle(blackBrush, new RectangleF(diagramOrigin.X - borderWidth, diagramOrigin.Y - borderWidth, diagramRenderWidth + (2 * borderWidth), diagramRenderHeight + (2 * borderWidth)));
graphics.DrawImage(img, diagramOrigin.X, diagramOrigin.Y, diagramRenderWidth, diagramRenderHeight);
string filename = string.Format("PdfWithChart-{0}.pdf", DateTime.Now.ToString("yyyyMMddHHmmss"));
await this.SavePdf(pdfDoc, filename);
} |
<StackPanel>
<Grid x:Name="chartPanel" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<syncfusion:SfChart Background="LightPink"/>
<syncfusion:SfChart Background="Yellow" Grid.Column="1"/>
</Grid>
<Button Margin="0,20,0,0" Click="Button_Click" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Click to Print"/>
</StackPanel> |