Rendering Custom Content

The DrawingElement event allows you to customize the output generated by the DrawElement method. The event fires once for each FrameworkElement rendered after calls to the DrawElementmethod. It allows you to override the built-in rendering behavior and to render custom content for specific elements.

The code below shows how you can use the DrawingElement event to provide custom rendering for elements of type 'RichTextBox':

 

 // create C1PdfDocument
var pdf = new C1PdfDocument(PaperKind.Letter);

// use DrawingElement event to render RichTextBox elements
pdf.DrawingElement += (s, e) =>
{
if (e.Element is RichTextBox)
{
// get element image
#if SILVERLIGHT
var bmp = new WriteableBitmap(e.Element, e.DocumentTransform);
#else // WPF
var sz = e.Element.RenderSize;
var rtBmp = new RenderTargetBitmap((int)sz.Width, (int)sz.Height, 96, 96, PixelFormats.Pbgra32);
rtBmp.Render(e.Element);
var bmp = new WriteableBitmap(rtBmp);
#endif

// render it into the document
pdf.DrawImage(bmp, e.Bounds);

// done rendering this element
e.Handled = true;
}
};

// render LayoutRoot element into C1PdfDocument
var rc = pdf.PageRectangle;
rc.Inflate(-20, -20);
pdf.DrawElement(LayoutRoot, rc, ContentAlignment.TopLeft, Stretch.None);

 

This example is quite general. You can use it to render any elements that do not expose their child elements as primitives such as TextBlock, Border, Rectangle, etc. The drawback associated with rendering elements as images is that the output will contain raster images, which can be quite large and may look rough when you zoom in on the PDF.


Send us comments about this topic.
Copyright © GrapeCity, inc. All rights reserved.