Render PDF page to Skia surface

Render PDF page to Skia surface

Starting with version 4.0, we use the <a https:="">Skia 2D graphics library</a> to render PDF pages. Methods Page.Saveand Document.ConvertToTiff can be used to render pages or documents directly to single- or multipage raster images. It is however also possible to render to a Skia surface. This is demonstrated by the following code sample.

Open PDF and select the first page

var pdf = new Document(stream);
var page = pdf.Pages[0];

Calculate the size of the image

const float scale = 1.0f; // 72 dpi
var pageBox = page.CropBox ?? page.MediaBox;
int width = (int)Math.Round(pageBox.Width * scale);
int height = (int)Math.Round(pageBox.Height * scale);
if (page.Rotation % 180 != 0)
{
  int tmp = width;
  width = height;
  height = tmp;
}

Render page into Skia surface

var info = new SKImageInfo(width, height);
using (var surface = SKSurface.Create(info))
{
  page.Draw(surface, info, scale);
  // ...
}

Save rendering buffer to raster image

using (var pixmap = surface.PeekPixels())
using (var imagegStream = new SKFileWStream(file))
{
  pixmap.Encode(imageStream, SKEncodedImageFormat.Jpeg, 90);
  imageStream.Flush();
}