How to scale content of PDF
How to scale content of PDF
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:
Scaled PDF: