MigraDocXML-WPF 2.9.3

dotnet add package MigraDocXML-WPF --version 2.9.3                
NuGet\Install-Package MigraDocXML-WPF -Version 2.9.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MigraDocXML-WPF" Version="2.9.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MigraDocXML-WPF --version 2.9.3                
#r "nuget: MigraDocXML-WPF, 2.9.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install MigraDocXML-WPF as a Cake Addin
#addin nuget:?package=MigraDocXML-WPF&version=2.9.3

// Install MigraDocXML-WPF as a Cake Tool
#tool nuget:?package=MigraDocXML-WPF&version=2.9.3                


Lessons available here


From having to do a fair amount of work producing PDFs, I found MigraDoc is currently the only really viable open source .NET option available. It includes some excellent features that give a lot of control over creating PDFs, while still staying high level enough to be easy to understand.

However, the way document designs are written does also present some major drawbacks:

  • Languages like C#/VB.NET just aren't well suited to the hierarchical nature of building up a display object model, and creating anything beyond a simple layout can quickly become a real challenge to remain readable. Other XML based languages such as HTML & XAML have proven that XML is far better suited to this sort of work.
  • Document designs are stuck within your project assembly. This prevents quick design changes without recompiling your code, also making it much harder to have a product that ships to multiple customers, where each customer has their own requirements for PDF exports.
  • Your programmers shouldn't be creating PDF reports. As a programmer, writing PDF designs is just plain boring, most of what you're writing is very boilerplate stuff, often plugging in slightly different numbers and recompiling to see if things finally line up right. MigraDocXML has been designed to be usable by people who don't come from a programming background but are willing to learn a few basic concepts.

MigraDocXML aims to solve these problems, while still keeping as much flexibility as possible. Below are some of its features:

  • Supports inserting data from JSON, CSV or XML files, as well as directly from .NET objects
  • MigraDoc's styling has been completely redesigned, with MigraDocXML offering a full cascading style system
  • Designs can define their own variables, conditional and iterative logic. It also includes EvalScript, a lightweight expression evaluator which provides a lot of advanced language features. These combine to allow the easy writing of flexible designs that can adapt to your data
  • Resources (stored either internally or externally) support code reuse
  • Bridges the gap between MigraDoc & PDFSharp, allowing for the addition of custom drawings to your designs
  • Includes an extension library that makes use of ZXing.NET to support inserting barcodes


Below is a demonstration of a layout file which takes in a json file to produce this.


    "Name": "MigraDocXML",
    "Positives": [
        "Simple to learn",
        "Easily readable design layouts",
        "Full cascading style system",
        "Support for PDFSharp graphics",
        "Includes a powerful lightweight expression evaluator",
        "Regular updates"
    "Negatives": [


<?xml version="1.0"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    <Style Target="p">
        <Setters Format.Font.Name="Calibri" Format.SpaceBefore="2mm" Format.SpaceAfter="2mm"/>

    <Style Target="p" Name="Heading">
        <Setters Format.Font.Bold="true" Format.Font.Underline="Single"/>

        <p Style="Heading" Format.Font.Size="15" Format.Alignment="Center">Reasons you should use {Model.Name}</p>

        <p Style="Heading">Positives:</p>
        <ForEach Var="positive" In="Model.Positives.OrderByDesc(x => x.Length)">

        <p Style="Heading">Negatives:</p>
        <ForEach Var="negative" In="Model.Negatives">


MigraDocXML also includes a small WPF app for easily previewing the effect of changes to the layout or data on your output PDF. You can use the incredibly basic text editors included in the app, or, use whichever one you normally do. Either way, each time you save changes to your documents, the PDF will automatically get regenerated.

alt text


Part of the development of MigraDocXML is kindly sponsored by:

Omicron Lab

Product Compatible and additional computed target framework versions.
.NET Framework net40 is compatible.  net403 was computed.  net45 was computed.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on MigraDocXML-WPF:

Package Downloads

An extension library for MigraDocXML, adding barcode support using ZXing.NET (https://github.com/micjahn/ZXing.Net). This is the WPF version of the library.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.9.3 566 3/3/2023
2.9.2 212 2/28/2023
2.9.1 516 2/20/2023
2.9.0 484 2/6/2022
2.8.0 268 12/11/2021
2.7.2 929 10/21/2021
2.7.1 500 9/29/2021
2.7.0 465 9/7/2021
2.6.11 677 10/11/2020
2.6.10 634 8/29/2020
2.6.9 712 5/9/2020
2.6.6 697 3/30/2020
2.6.3 634 7/14/2019
2.6.2 1,612 7/8/2019
2.6.1 539 7/5/2019
2.6.0 564 7/5/2019
2.5.0 585 6/5/2019
2.4.2 626 5/17/2019
2.4.1 601 5/14/2019
2.4.0 592 5/12/2019
2.3.0 696 4/22/2019
2.2.2 611 4/3/2019
2.2.1 600 3/17/2019
2.1.2 686 2/19/2019
2.1.1 675 2/17/2019
2.1.0 694 2/6/2019
2.0.0 888 1/24/2019
1.0.8 1,034 10/21/2018

Added support for annotations