The Xamarin Plugins are
a great resource for the former. There are a few resources for the latter, but
I have found the Syncfusion Xamarin Control Suite to
be the most helpful.
The Syncfusion Xamarin
samples seem to be
a little sparse, so I thought I’d share an example implementation here.
For more in-depth Syncfusion PDF documentation,
have a look here. They
provide quite a bit more PDF capability than what is covered here.
This post will cover a basic scenario of
generating a PDF document from invoice information using the Syncfusion
PDF component for
Xamarin.
Source code for this post can be found here. If
you’re looking for the details, check out the GitHub repo–we’ll cover the basic
outlines of what’s necessary here.
1. Create context for
the PDF generation
In the case of the sample code, I’ve created a GenerateInvoiceContext class–which
mostly houses the Invoice from
which to generate the PDF.
All the information you require to generate the PDF
needs to be contained in this class.
2. Wrap the generation
logic into a command
Create an implementation class that contains the logic for
generating the PDF from the invoice. In the sample code, this is the GenerateInvoiceCommand class.
I’ve used the command pattern here because it’s a great way to separate out and
force the single responsibility design pattern. The basics for command
implementation are provided by the Command Pattern Wireframe nuget
package, including an ExcuteAsync<TIn,
TOut> command pattern to follow. So calling the command from the view
model looks something like this:
Note that you don’t need to wrap the logic
in a command–this is just my personal preference for keeping the code clean.
3. Creating a PDF
document
When generating PDF elements, you need to first create the document and a page for the document before you can start adding elements. I’ve created a PDFGenerator class to make these tasks a little easier. In the Setup method, you’ll notice the creation of the document and the first page, as well as common properties for the document to be generated:
4. Add elements to the PDF
document
5. Save and launch the PDF
document
Until now, all the code could be shared among all the mobile platforms (iOS / Android / UWP), but saving and launching the PDF document requires platform-specific code. In order to call platform code from the shared code, it’s useful to abstract the platform implementation behind an interface, which is then implemented for each platform. I’ve again used the command pattern for ease-of-use:
A screen grab of the finished product:
Bonus
The Syncfusion Xamarin components are pretty
handy and, in my experience, the support I’ve received from them has been
exceptional. The best part, though, is that all of it is available for
FREE–if you’re a single developer or a small business. Check out the Community License
here.
As someone who has a side project that he hopes
to turn into a business one day, it’s these kinds of licensing models that are
really helpful: thanks, Syncfusion!
Check out Malcom Jack's full blog here!