How to: Extract a Part of the PDF Page as an Image
- 4 minutes to read
The following example demonstrates how to use the PdfDocumentProcessor and DXGraphics classes to extract a part of the PDF page as an image.
In this example, the search result is exported as a Bitmap image. Call the PdfDocumentProcessor.FindText to find a specific phrase.
The DXGraphics.DrawImage(DXImage, RectangleF, RectangleF) method overload allows you to to export a part of the PDF page as an image. This method requires the following parameters:
- An image from which to extract a portion.
- The size and location of the resulting image.
- An image area to extract.
The sections below describe how to calculate each parameter.
Convert a Page to an Image
Call the PdfDocumentProcessor.CreateDXBitmap method to export a page to a bitmap image. You can declare an optional scale
parameter to scale the page.
Calculate the Extraction Area
The FindText
method returns a PdfTextSearchResults instance. The PdfTextSearchResults.Rectangles property returns a list of areas occupied by the result entries. These areas is measured in PDF page units (each point is 1/72 of an inch). Call the Units.PointsToPixelsF method to convert the rectangle coordinates to pixels. Multiply the coordinates by the scale
parameter declared earlier to calculate the coordinates correctly.
Calculate The Resulting Image Size
Create a new DevExpress.Drawing.DXBitmap instance to draw a page area into it. Use the width and height calculated earlier so that the extracted portion fits onto the image canvas.
Draw an Image
Pass the exported page and the calculated rectangles as the DXGraphics.DrawImage
method parameters. The code sample below shows a complete code sample:
using DevExpress.Pdf;
using System.Drawing;
using DevExpress.Drawing;
PdfDocumentProcessor processor = new PdfDocumentProcessor();
processor.LoadDocument(@"Demo.pdf");
PdfTextSearchResults searchResults = processor.FindText("The PDF Viewer");
if (searchResults != null)
ConvertRegionToImage(processor, searchResults.Rectangles[0], searchResults.PageNumber);
static void ConvertRegionToImage(PdfDocumentProcessor processor, PdfOrientedRectangle area,
int pageNumber, float scale = 1f) {
// Export a page to a bitmap image
float dpi = 72f;
PdfPage page = processor.Document.Pages[0];
DXBitmap pageBitmap = processor.CreateDXBitmap(pageNumber,
(int)Math.Max(page.CropBox.Height * scale, page.CropBox.Width * scale));
pageBitmap.Save("source.png", DXImageFormat.Png);
// Calculate the area width and height in pixels
float widthInPixels = Units.PointsToPixelsF((float)area.Width * scale, dpi);
float heightInPixels = Units.PointsToPixelsF((float)area.Height * scale, dpi);
// Calculate the area's top left coordinates
int x = Convert.ToInt32(Units.PointsToPixelsF((float)area.Left * scale, dpi));
int y = Convert.ToInt32(Units.PointsToPixelsF((float)(page.CropBox.Height - area.Top)
* scale, dpi));
using (DXBitmap bitmap = new DXBitmap((int)widthInPixels, (int)heightInPixels))
{
// Declare an area into which the extracted portion
// should be drawn
Rectangle destRect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
// Declare an area to extract from the page
Rectangle sourceRect = new Rectangle(x, y, bitmap.Width, bitmap.Height);
using (DXGraphics graphics = DXGraphics.FromImage(bitmap))
{
// Export a page area to a bitmap
graphics.DrawImage(pageBitmap, destRect, sourceRect);
}
bitmap.Save("result.png", DXImageFormat.Png);
}
}