How to scale content of PDF

Shapes
2/6/2014

Downloads

This code sample creates a copy of a PDF document but the content in the output PDF is scaled.

using (FileStream inFile = new FileStream(@"..\..\input.pdf", FileMode.Open, FileAccess.Read))
{
   const double scale = 0.5;

   // open the source document
   Document documentIn = new Document(inFile);

   // create the target document
   Document documentOut = new Document();

   // enumerate the pages in the source document
   for (int i = 0; i < documentIn.Pages.Count; i++)
   {
      Page inPage = documentIn.Pages[i];
            
      //append a page that has the SAME size as the original page
      Page outPage = new Page(inPage.Width, inPage.Height);
      documentOut.Pages.Add(outPage);

      //calculate a new position for the content within the page
      double left = (inPage.Width * (1 - scale)) / 2.0;
      double bottom = (inPage.Height * (1 - scale)) / 2.0;

      //calculate a new size of the content
      double width = inPage.Width * scale;
      double height = inPage.Height * scale;

      //scale the box and translate it to the center of the page 
      PageShape pageShape = new PageShape(inPage, left, bottom, width, height);

      outPage.VisualOverlay.Add(pageShape);
   }

   // write the target document to disk
   using (FileStream outFile = new FileStream(@"..\..\output.pdf", FileMode.Create, FileAccess.Write))
   {
      documentOut.Write(outFile);
   }
}
Using inFile As New FileStream("..\..\input.pdf", FileMode.Open, FileAccess.Read)
    Const scale As Double = 0.5

    ' open the source document
    Dim documentIn As New Document(inFile)

    ' create the target document
    Dim documentOut As New Document()

    ' enumerate the pages in the source document
    For i As Integer = 0 To documentIn.Pages.Count - 1
        Dim inPage As Page = documentIn.Pages(i)

        'append a page that has the SAME size as the original page
        Dim outPage As New Page(inPage.Width, inPage.Height)
        documentOut.Pages.Add(outPage)

        'calculate a new position for the content within the page
        Dim left As Double = (inPage.Width * (1 - scale)) / 2.0
        Dim bottom As Double = (inPage.Height * (1 - scale)) / 2.0

        'calculate a new size of the content
        Dim width As Double = inPage.Width * scale
        Dim height As Double = inPage.Height * scale

        'scale the box and translate it to the center of the page 
        Dim pageShape As New PageShape(inPage, left, bottom, width, height)

        outPage.VisualOverlay.Add(pageShape)
    Next

    ' write the target document to disk
    Using outFile As New FileStream("..\..\output.pdf", FileMode.Create, FileAccess.Write)
        documentOut.Write(outFile)
    End Using
End Using

Below you can see the screenshots of an original PDF and the output. Note that the size of the page remains the same while the content is scaled down.

Original PDF:

original_pdf.png

Scaled PDF:

scaled_pdf.png