Create a text annotation in PDF with rich text

Create a text annotation in PDF with rich text

This sample shows how to create annotations in PDF that use a rich text for their appearance. This can be done with PDFKit or PDFControls. With ‘rich text’ we mean the rich text as is described in the PDF reference at page 680 under ‘Rich Text Strings’.

Free Text Annotation With Rich Text Appearance

C# code sample for text annotation with rich text in PDF

Step 1: Define your rich text

var rich_text = "<?xml version=\"1.0\"?><body xmlns=\"\"><p style=\"color:#000000;\">Black&#13;</p><p style=\"color:#FF0000;\">Red&#13;</p><p style=\"color:#1E487C;\">Blue&#13;</p></body>";

Step 2: Create a free text annotation, use the rich text

//create a freetext annotation
var txt = new FreeText(100, 600, 80, 60)
    Text = rich_text,

Step 3: (optional) Add a popup to the free text annotation

//create a popup and assign it to the freetext
txt.Popup = new Popup(140, 500, 200, 100) { Open = true };

Step 4: Create a pdf document with the free text annotation

We create a PDF document and add the free text annotation to it.

//create new document
var document = new Document();

//create a page and add to the document
var page = new Page(PageSize.Letter);

... // Here comes the code to create the free text annotation

//add the free text annotation to the page

//write the PDF document to the disk
const string fileName = @"FreeText.pdf";
using (var file = new FileStream(fileName, FileMode.Create, FileAccess.Write))

// open the PDF document


The supported rich text format by PDF is restricted by the specifications and the abality of the reader software. The current sample deals with the following restrictions when using Adobe Acrobat Reader DC:

  • Formating the rich text string with tabs and newlines for readability in the code will change the result;
  • Where you would expect that the <p> element to create paragraphs, the encoding for a newline is needed to ensure that the texts appear on seperate lines;
  • For colours hexa codes must be used as color names (‘red’, ‘black’, ‘blue’) are not processed.