F# – PDF fun with Markdown and FSharp.Formatting

I spent the last couple of nights putting together a simple Markdown to PDF formatter using Tomas Petricek’s FSharp.Formatting project and the PdfSharp-MigraDoc library.

To use this library, you can either grab the source from the GitHub repository or get it from Nuget using the following command:

NuGet package

F# Usage

To use the library from F#, you can use the Markdown type defined in the FSharp.Markdown namespace (from the FSharp.Formating library), once you’ve opened the FSharp.Markdown.Pdf namespace you’ll have access to two static extension methods:

  • TransformPdf – accepts a string as input and outputs the resulting PDF to a local file path or to a specified Stream.
  • WritePdf – accepts a MarkdownDocument generated by the Markdown.Parse method, and outputs the resulting PDF to a local file path or to a specified Stream.

C# Usage

You can also use this library from C#, however, the static extension methods mentioned above is not accessible in C# because type extensions defined in F# are compiled differently to standard extension methods you find in C# (with far more possibilities I might add, such as extension properties, and static methods, for instance!) and is not recognized by the C# compiler..

You can still access the same functionalities using a MarkdownPdf type, with two static methods:

  • Transform – equivalent to Markdown.TransformPdf.
  • Write – equivalent to Markdown.WritePdf.

You can see an example output here with the corresponding Markdown here.

 

Learn to build Production-Ready Serverless applications

Want to learn how to build Serverless applications and follow best practices? Subscribe to my newsletter and join over 5,000 AWS & Serverless enthusiasts who have signed up already.

2 thoughts on “F# – PDF fun with Markdown and FSharp.Formatting”

  1. Pingback: Customizing document styles with FSharp.Markdown.Pdf | theburningmonk.com

  2. Pingback: Year in Review, 2013 | theburningmonk.com

Leave a Comment

Your email address will not be published. Required fields are marked *