Home arrow Samples arrow Combine Documents Make Text BiggerMake Text SmallerReset Text Size
Combine Documents

Updated! This samples shows how to create a new document from two existing PDF files.
The pages are inserted alternately from two documents. This may be useful for visual comparision.

/// <summary>
/// Imports pages from an external document.
/// Note that this technique imports the whole page including the hyperlinks.
/// </summary>
static void Variant1()
{
  // Get two fresh copies of the sample PDF files
  // (Note: The input files are not modified in this sample.)
  string filename1 = "Portable Document Format.pdf";
  File.Copy(Path.Combine("../../../../PDFs/", filename1),
    Path.Combine(Directory.GetCurrentDirectory(), filename1), true);
  string filename2 = "Portable Document Format.pdf";  // use other file here
  File.Copy(Path.Combine("../../../../PDFs/", filename2),
    Path.Combine(Directory.GetCurrentDirectory(), filename2), true);
 
  // Open the input files
  PdfDocument inputDocument1 = PdfReader.Open(filename1, PdfDocumentOpenMode.Import);
  PdfDocument inputDocument2 = PdfReader.Open(filename2, PdfDocumentOpenMode.Import);
 
  // Create the output document
  PdfDocument outputDocument = new PdfDocument();
 
  // Show consecutive pages facing. Requires Acrobat 5 or higher.
  outputDocument.PageLayout = PdfPageLayout.TwoColumnLeft;
 
  XFont font = new XFont("Verdana", 10, XFontStyle.Bold);
  XStringFormat format = new XStringFormat();
  format.Alignment = XStringAlignment.Center;
  format.LineAlignment = XLineAlignment.Far;
  XGraphics gfx;
  XRect box;
  int count = Math.Max(inputDocument1.PageCount, inputDocument2.PageCount);
  for (int idx = 0; idx < count; idx++)
  {
    // Get page from 1st document
    PdfPage page1 = inputDocument1.PageCount > idx ?
      inputDocument1.Pages[idx] : new PdfPage();
 
    // Get page from 2nd document
    PdfPage page2 = inputDocument2.PageCount > idx ?
      inputDocument2.Pages[idx] : new PdfPage();
 
    // Add both pages to the output document
    page1 = outputDocument.AddPage(page1);
    page2 = outputDocument.AddPage(page2);
 
    // Write document file name and page number on each page
    gfx = XGraphics.FromPdfPage(page1);
    box = page1.MediaBox.ToXRect();
    box.Inflate(0, -10);
    gfx.DrawString(String.Format("{0} • {1}", filename1, idx + 1),
      font, XBrushes.Red, box, format);
 
    gfx = XGraphics.FromPdfPage(page2);
    box = page2.MediaBox.ToXRect();
    box.Inflate(0, -10);
    gfx.DrawString(String.Format("{0} • {1}", filename2, idx + 1),
      font, XBrushes.Red, box, format);
  }
 
  // Save the document...
  string filename = "CompareDocument1.pdf";
  outputDocument.Save(filename);
  // ...and start a viewer.
  Process.Start(filename);
}
 
/// <summary>
/// Imports the pages as form X objects.
/// Note that this technique copies only the visual content and the
/// hyperlinks do not work.
/// </summary>
static void Variant2()
{
  // Get fresh copies of the sample PDF files
  string filename1 = "Portable Document Format.pdf";
  File.Copy(Path.Combine("../../../../PDFs/", filename1),
    Path.Combine(Directory.GetCurrentDirectory(), filename1), true);
  string filename2 = "Portable Document Format.pdf";
  File.Copy(Path.Combine("../../../../PDFs/", filename2),
    Path.Combine(Directory.GetCurrentDirectory(), filename2), true);
 
  // Create the output document
  PdfDocument outputDocument = new PdfDocument();
 
  // Show consecutive pages facing
  outputDocument.PageLayout = PdfPageLayout.TwoPageLeft;
 
  XFont font = new XFont("Verdana", 10, XFontStyle.Bold);
  XStringFormat format = new XStringFormat();
  format.Alignment = XStringAlignment.Center;
  format.LineAlignment = XLineAlignment.Far;
  XGraphics gfx;
  XRect box;
 
  // Open the external documents as XPdfForm objects. Such objects are
  // treated like images. By default the first page of the document is
  // referenced by a new XPdfForm.
  XPdfForm form1 = XPdfForm.FromFile(filename1);
  XPdfForm form2 = XPdfForm.FromFile(filename2);
 
  int count = Math.Max(form1.PageCount, form2.PageCount);
  for (int idx = 0; idx < count; idx++)
  {
    // Add two new pages to the output document
    PdfPage page1 = outputDocument.AddPage();
    PdfPage page2 = outputDocument.AddPage();
 
    if (form1.PageCount > idx)
    {
      // Get a graphics object for page1
      gfx = XGraphics.FromPdfPage(page1);
 
      // Set page number (which is one-based)
      form1.PageNumber = idx + 1;
 
      // Draw the page identified by the page number like an image
      gfx.DrawImage(form1, new XRect(0, 0, form1.Width, form1.Height));
 
      // Write document file name and page number on each page
      box = page1.MediaBox.ToXRect();
      box.Inflate(0, -10);
      gfx.DrawString(String.Format("{0} • {1}", filename1, idx + 1),
        font, XBrushes.Red, box, format);
    }
 
    // Same as above for second page
    if (form2.PageCount > idx)
    {
      gfx = XGraphics.FromPdfPage(page2);
 
      form2.PageNumber = idx + 1;
      gfx.DrawImage(form2, new XRect(0, 0, form2.Width, form2.Height));
 
      box = page2.MediaBox.ToXRect();
      box.Inflate(0, -10);
      gfx.DrawString(String.Format("{0} • {1}", filename2, idx + 1),
        font, XBrushes.Red, box, format);
    }
  }
 
< Prev   Next >
New! We no longer maintain this site. Visit the new PDFsharp and MigraDoc Foundation Homepage. © 2009 empira Software GmbH | Impressum | Created with Joomla!