Welcome GuestLogin

PDFsharp and MigraDoc Wiki

RSS RSS

Navigation




Quick Search
»

PoweredBy
<< Previous^UpNext >>
This sample demonstrates how to mix MigraDoc and PDFsharp.

PDF Output File

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

Screen Shots

Here is a sample screen shot (showing page 2 with 6 pages from MigraDoc, scaled down to fit on one page):

Mix MigraDoc and PDFsharp screen shot

Source Code

Creating the Document

We create a PdfDocument, not a (MigraDoc) Document:
static void Main()
{
  DateTime now = DateTime.Now;
  string filename = "MixMigraDocAndPdfSharp.pdf";
  filename = Guid.NewGuid().ToString("D").ToUpper() + ".pdf";
  PdfDocument document = new PdfDocument();
  document.Info.Title = "PDFsharp XGraphic Sample";
  document.Info.Author = "Stefan Lange";
  document.Info.Subject = "Created with code snippets that show the use of graphical functions";
  document.Info.Keywords = "PDFsharp, XGraphics";
 
  SamplePage1(document);
 
  SamplePage2(document);
 
  Debug.WriteLine("seconds=" + (DateTime.Now - now).TotalSeconds.ToString());
 
  // Save the document...
  document.Save(filename);
  // ...and start a viewer
  Process.Start(filename);
}

The First Page

Here we create a MigraDoc Document object to draw the content of this page:
static void SamplePage1(PdfDocument document)
{
  PdfPage page = document.AddPage();
  XGraphics gfx = XGraphics.FromPdfPage(page);
  // HACK²
  gfx.MUH = PdfFontEncoding.Unicode;
  gfx.MFEH = PdfFontEmbedding.Default;
 
  XFont font = new XFont("Verdana", 13, XFontStyle.Bold);
 
  gfx.DrawString("The following paragraph was rendered using MigraDoc:", font, XBrushes.Black,
    new XRect(100, 100, page.Width - 200, 300), XStringFormats.Center);
 
  // You always need a MigraDoc document for rendering.
  Document doc = new Document();
  Section sec = doc.AddSection();
  // Add a single paragraph with some text and format information.
  Paragraph para = sec.AddParagraph();
  para.Format.Alignment = ParagraphAlignment.Justify;
  para.Format.Font.Name = "Times New Roman";
  para.Format.Font.Size = 12;
  para.Format.Font.Color = MigraDoc.DocumentObjectModel.Colors.DarkGray;
  para.Format.Font.Color = MigraDoc.DocumentObjectModel.Colors.DarkGray;
  para.AddText("Duisism odigna acipsum delesenisl ");
  para.AddFormattedText("ullum in velenit", TextFormat.Bold);
  para.AddText(" ipit iurero dolum zzriliquisis nit wis dolore vel et nonsequipit, velendigna "+
    "auguercilit lor se dipisl duismod tatem zzrit at laore magna feummod oloborting ea con vel "+
    "essit augiati onsequat luptat nos diatum vel ullum illummy nonsent nit ipis et nonsequis "+
    "niation utpat. Odolobor augait et non etueril landre min ut ulla feugiam commodo lortie ex "+
    "essent augait el ing eumsan hendre feugait prat augiatem amconul laoreet. ≤≥≈≠");
  para.Format.Borders.Distance = "5pt";
  para.Format.Borders.Color = Colors.Gold;
 
  // Create a renderer and prepare (=layout) the document
  MigraDoc.Rendering.DocumentRenderer docRenderer = new DocumentRenderer(doc);
  docRenderer.PrepareDocument();
 
  // Render the paragraph. You can render tables or shapes the same way.
  docRenderer.RenderObject(gfx, XUnit.FromCentimeter(5), XUnit.FromCentimeter(10), "12cm", para);
}

Creating Page Two

This page contains six pages, created with MigraDoc and scaled down to fit on one page:
static void SamplePage2(PdfDocument document)
{
  PdfPage page = document.AddPage();
  XGraphics gfx = XGraphics.FromPdfPage(page);
  // HACK²
  gfx.MUH = PdfFontEncoding.Unicode;
  gfx.MFEH = PdfFontEmbedding.Default;
 
  // Create document from HalloMigraDoc sample
  Document doc = HelloMigraDoc.Documents.CreateDocument();
 
  // Create a renderer and prepare (=layout) the document
  MigraDoc.Rendering.DocumentRenderer docRenderer = new DocumentRenderer(doc);
  docRenderer.PrepareDocument();
 
  // For clarity we use point as unit of measure in this sample.
  // A4 is the standard letter size in Germany (21cm x 29.7cm).
  XRect A4Rect = new XRect(0, 0, A4Width, A4Height);
 
  int pageCount = docRenderer.FormattedDocument.PageCount;
  for (int idx = 0; idx < pageCount; idx++)
  {
    XRect rect = GetRect(idx);
 
    // Use BeginContainer / EndContainer for simplicity only. You can naturaly use you own transformations.
    XGraphicsContainer container = gfx.BeginContainer(rect, A4Rect, XGraphicsUnit.Point);
 
    // Draw page border for better visual representation
    gfx.DrawRectangle(XPens.LightGray, A4Rect);
 
    // Render the page. Note that page numbers start with 1.
    docRenderer.RenderPage(gfx, idx + 1);
 
    // Note: The outline and the hyperlinks (table of content) does not work in the produced PDF document.
 
    // Pop the previous graphical state
    gfx.EndContainer(container);
  }
}

Helper Routine GetRect

Calculates the area of a scaled down page:
static XRect GetRect(int index)
{
  XRect rect = new XRect(0, 0, A4Width / 3 * 0.9, A4Height / 3 * 0.9);
  rect.X = (index % 3) * A4Width / 3 + A4Width * 0.05 / 3;
  rect.Y = (index / 3) * A4Height / 3 + A4Height * 0.05 / 3;
  return rect;
}
static double A4Width = XUnit.FromCentimeter(21).Point;
static double A4Height = XUnit.FromCentimeter(29.7).Point;

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.


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 - Legal Notice