' ' PDFNet Copyright (c) 2001-2008 by PDFTron Systems Inc. All Rights Reserved. ' Imports System Imports pdftron Imports pdftron.Common Imports pdftron.Filters Imports pdftron.SDF Imports pdftron.PDF '----------------------------------------------------------------------------------- ' The sample illustrates how multiple pages can be combined/imposed ' using PDFNet. Page imposition can be used to arrange/order pages ' prior to printing or to assemble a 'master' page from several 'source' ' pages. Using PDFNet API it is possible to write applications that can ' re-order the pages such that they will display in the correct order ' when the hard copy pages are compiled and folded correctly. '----------------------------------------------------------------------------------- Module Module1 Sub Main() PDFNet.Initialize() PDFNet.SetResourcesPath("../../../../resources") ' Relative path to the folder containing test files. Dim input_path As String = "../../../TestFiles/" Dim output_path As String = "../../../TestFiles/Output/" Try Console.WriteLine("_______________________________________________") Console.WriteLine("Opening the input pdf...") Dim in_doc As PDFDoc = New PDFDoc(input_path + "newsletter.pdf") in_doc.InitSecurityHandler() Dim new_doc As PDFDoc = New PDFDoc ' Paper dimension for A3 format in points. Because one inch has ' 72 points, 11.69 inch 72 = 841.69 points Dim media_box As Rect = New Rect(0, 0, 1190.88, 841.69) Dim mid_point As Double = media_box.Width() / 2 Dim builder As ElementBuilder = New ElementBuilder Dim writer As ElementWriter = New ElementWriter Dim itr As PageIterator = in_doc.GetPageIterator() While itr.HasNext() ' Create a blank new A3 page and place on it two pages from the input document. Dim new_page As Page = new_doc.PageCreate(media_box) writer.Begin(new_page) ' Place the first page Dim src_page As Page = itr.Current() Dim element As Element = builder.CreateForm(src_page, new_doc) Dim sc_x As Double = mid_point / src_page.GetPageWidth() Dim sc_y As Double = media_box.Height() / src_page.GetPageHeight() Dim scale As Double = Math.Min(sc_x, sc_y) element.GetGState().SetTransform(scale, 0, 0, scale, 0, 0) writer.WritePlacedElement(element) ' Place the second page itr.Next() If itr.HasNext() Then src_page = itr.Current() element = builder.CreateForm(src_page, new_doc) sc_x = mid_point / src_page.GetPageWidth() sc_y = media_box.Height() / src_page.GetPageHeight() scale = Math.Min(sc_x, sc_y) element.GetGState().SetTransform(scale, 0, 0, scale, mid_point, 0) writer.WritePlacedElement(element) itr.Next() End If writer.End() new_doc.PagePushBack(new_page) End While ' new_doc.Save(output_path + "newsletter_booklet.pdf", 0) new_doc.Save(output_path + "newsletter_booklet.pdf", SDFDoc.SaveOptions.e_linearized) new_doc.Close() in_doc.Close() Console.WriteLine("Done.") Catch e As Exception Console.WriteLine("Exception caught:\n{0}", e) End Try PDFNet.Terminate() End Sub End Module