PDF annotations became the natural way to amend existing PDF documents, be it reviewer’s notes, stamps or just custom images like approval marks. Natively supported they provide an easy and intuitive solution for collaboration.
Some PDF viewing programs provide support for annotations, but when it comes to custom software solutions it’s sometimes needed to create specifically designed viewer control with annotations support.
In this article we’ll show some highlights from the Wpf Pdf Viewer sample, giving you an idea of how it could look like to implement such a thing on your own. The sample uses two products: Apitron PDF Rasterizer for .NET for rendering and Apitron PDF Kit for .NET for PDF manipulation. It’s not a complete solution, however it may be a good base for starting yours. The complete code sample can be downloaded from our github repo, it’s called WpfPdfViewer.
Our application’s layout resembles a typical viewing application with navigation tab on the left and page area on the right. There’s a toolbar with commands for adding various annotations and saving the final result. See the image below:
Pic. 1 Wpf PDF Viewer based on Apitron components
As it can be seen, it supports bookmarks and adding of several annotation types. Technically “smile” and “star” annotations are implemented using RubberStampAnnotation and use images, while the green one is a FreeTextAnnotation. These terms are from PDF specification and you’ll find all the technical details there if needed. Our API follows this specification closely, so it won’t be a problem to find a match between them. You can drag items and also edit the text. Selected one will be highlighted with the red animated border.
Core class here is a DocumentViewModel, it serves as a binding source in many places across the main window. Since we use MVVM, all other classes like PageViewModel and AnnotationViewModel are used to provide access to relevant page and annotation properties as well.
Navigation is implemented using Document’s class Navigator object; it’s related to Apitron PDF Rasterizer API and is provided to facilitate navigation implementation in custom viewers. Custom view models are created for star, smile and text annotations. They can be found in Annotations subfolder of the solution. When you click “Save changes” the document becomes saved and reloaded showing newly added annotations.
Sample code for creating the “star” annotation:
Annotation starAnnotation = new RubberStampAnnotation(new Boundary(10, 400, 50, 440),
FixedContent fixedContent = new FixedContent("ap01", new Boundary(0, 0, 40, 40));
fixedContent.Content.AppendImage("star", 0, 0, 40, 40);
starAnnotation.Appearance.Normal = fixedContent;
Here we create an annotation object, set its appearance and add to the FixedDocument instance. The name “star” used for adding image is the name of the registered PDF resource, see the constructor of the MainWindow where such objects are registered.
The complete code sample can be downloaded from our github repo.
Custom PDF viewer capable of handling things like annotations can be easily created using our PDF components - Apitron PDF Kit and Apitron PDF Rasterizer. Surely, it becomes a PDF editor at some point, and as our components are available for many platforms like iOS and Andoid (via Xamarin), .NET, MONO, Windows Runtime, Windows Phone you can create cross platform apps with built-in PDF editors targeting all of them using the same code and same API.