Welcome
Guest
•
Login
PDFsharp and MigraDoc Wiki
Navigation
¶
Main Page
Random Page
Create a new Page
All Pages
Categories
Navigation Paths
File Management
Create Account
Quick Search
»
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.
Back
MigraDoc Sample: Mix MigraDoc and PDFsharp
Modified on 2015/09/14 10:15
by
Thomas Hövel
Categorized as
MigraDoc Samples
,
Samples
{s:navigationPrevUp|Invoice-sample|MigraDocSamples} This sample demonstrates how to mix MigraDoc and PDFsharp. {TOC} ==PDF Output File== See the PDF file created by this sample: {s:PdfLink|MixMigraDocAndPdfSharp-sample%2fMixMigraDocAndPdfSharp_output.pdf|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): {s:ImageThumbLink|Mix MigraDoc and PDFsharp screen shot|MixMigraDocAndPdfSharp-sample%2fMixMigraDocAndPdfSharpth.png|MixMigraDocAndPdfSharp-sample%2fMixMigraDocAndPdfSharp.png} ==Source Code== ===Creating the Document=== We create a {s:className|PdfDocument}, not a (MigraDoc) {s:className|Document}: {s:beginCsharp} 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); } {s:endCsharp} ===The First Page=== Here we create a MigraDoc {s:className|Document} object to draw the content of this page: {s:beginCsharp} 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); } {s:endCsharp} ===Creating Page Two=== This page contains six pages, created with MigraDoc and scaled down to fit on one page: {s:beginCsharp} 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); } } {s:endCsharp} ===Helper Routine GetRect=== Calculates the area of a scaled down page: {s:beginCsharp} 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; {s:endCsharp} {s:sampleSourceCode}
Meta Keywords:
Meta Description:
Change Comment:
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