
Yan Cui
I help clients go faster for less using serverless technologies.
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:
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.
open FSharp.Markdown | |
open FSharp.Markdown.Pdf | |
let text = """Some text in Markdown format...""" | |
// formatting to PDF and save result to file | |
Markdown.TransformPdf(text, @"C:\temp\markdown.pdf") | |
// formatting to PDF and save result to stream | |
use stream = File.OpenWrite(@"C:\temp\markdown2.pdf") | |
Markdown.TransformPdf(text, stream) | |
let parsed = Markdown.Parse(text) | |
// taking a tokenized Markdown document and formatting to PDF | |
// before saving result to file | |
Markdown.WritePdf(parsed, @"C:\temp\markdown3.pdf") | |
// taking a tokenized Markdown document and formatting to PDF | |
// before saving result to stream | |
use stream' = File.OpenWrite(@"C:\temp\markdown4.pdf") | |
Markdown.WritePdf(parsed, 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.
using FSharp.Markdown; | |
using FSharp.Markdown.Pdf; | |
var text = "Some text in Markdown format..."; | |
// formatting to PDF and save result to file | |
MarkdownPdf.Transform(text, @"C:\temp\markdown.pdf"); | |
// formatting to PDF and save result to stream | |
using (var stream = File.OpenWrite(@"C:\temp\markdown2.pdf")) | |
{ | |
MarkdownPdf.Transform(text, stream); | |
} | |
var parsed = Markdown.Parse(text); | |
// taking a tokenized Markdown document and formatting to PDF | |
// before saving result to file | |
MarkdownPdf.Write(parsed, @"C:\temp\markdown3.pdf"); | |
// taking a tokenized Markdown document and formatting to PDF | |
// before saving result to stream | |
using (var stream2 = File.OpenWrite(@"C:\temp\markdown4.pdf")) | |
{ | |
MarkdownPdf.Write(parsed, stream2); | |
} |
You can see an example output here with the corresponding Markdown here.
Whenever you’re ready, here are 3 ways I can help you:
- Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
- I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.
Pingback: Customizing document styles with FSharp.Markdown.Pdf | theburningmonk.com
Pingback: Year in Review, 2013 | theburningmonk.com