Welcome GuestLogin

PDFsharp and MigraDoc Wiki

RSS RSS

Navigation




Quick Search
»

PoweredBy

Visit the new Website for PDFsharp & MigraDoc Foundation 6.0 for .NET 6 and find information about the new version for Windows, Linux, and other platforms.

<< Previous^UpNext >>
This sample shows how to place two pages of an existing document on one landscape orientated page of a new document.

PDF Output File

See the PDF file created by this sample: output.pdf (37 kB)

Screen Shots

Here is a sample screen shot:

Two Pages on One screen shot

Source Code

This is the whole source code needed to create the PDF file:
// Get a fresh copy of the sample PDF file
string filename = "Portable Document Format.pdf";
File.Copy(Path.Combine("../../../../../PDFs/", filename), 
  Path.Combine(Directory.GetCurrentDirectory(), filename), true);
 
// Create the output document
PdfDocument outputDocument = new PdfDocument();
 
// Show single pages
// (Note: one page contains two pages from the source document)
outputDocument.PageLayout = PdfPageLayout.SinglePage;
 
XFont font = new XFont("Verdana", 8, XFontStyle.Bold);
XStringFormat format = new XStringFormat();
format.Alignment = XStringAlignment.Center;
format.LineAlignment = XLineAlignment.Far;
XGraphics gfx;
XRect box;
 
// Open the external document as XPdfForm object
XPdfForm form = XPdfForm.FromFile(filename);
 
for (int idx = 0; idx < form.PageCount; idx += 2)
{
  // Add a new page to the output document
  PdfPage page = outputDocument.AddPage();
  page.Orientation = PageOrientation.Landscape;
  double width  = page.Width;
  double height = page.Height;
 
  int rotate = page.Elements.GetInteger("/Rotate");
 
  gfx = XGraphics.FromPdfPage(page);
 
  // Set page number (which is one-based)
  form.PageNumber = idx + 1;
 
  box = new XRect(0, 0, width / 2, height);
  // Draw the page identified by the page number like an image
  gfx.DrawImage(form, box);
 
  // Write document file name and page number on each page
  box.Inflate(0, -10);
  gfx.DrawString(String.Format("- {1} -", filename, idx + 1),
    font, XBrushes.Red, box, format);
 
  if (idx + 1 < form.PageCount)
  {
    // Set page number (which is one-based)
    form.PageNumber = idx + 2;
 
    box = new XRect(width / 2, 0, width / 2, height);
    // Draw the page identified by the page number like an image
    gfx.DrawImage(form, box);
 
    // Write document file name and page number on each page
    box.Inflate(0, -10);
    gfx.DrawString(String.Format("- {1} -", filename, idx + 2),
      font, XBrushes.Red, box, format);
  }
}
 
// Save the document...
filename = "TwoPagesOnOne_tempfile.pdf";
outputDocument.Save(filename);
// ...and start a viewer.
Process.Start(filename);

Note: The samples on this site usually show and discuss code snippets only. The complete source code of the samples with solutions for Visual Studio is available from the download area on CodePlex.


Visit the new Website for PDFsharp & MigraDoc Foundation 6.0 for .NET 6 and find information about the new version for Windows, Linux, and other platforms.



Miscellaneous
Home
PDFsharp
FAQ
Samples
Articles
MigraDoc
FAQ
Samples
Articles

ScrewTurn Wiki version 3.0.5.600. Some of the icons created by FamFamFam.

Impressum - Privacy Policy, Data Protection Declaration, Legal Notice