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
»
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:
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