DynamicPDF Generator has lots of predefined page elements which allow you to easily create different types of content, but you may occasionally have a need to do something that is not available in the API by default. Custom page elements is an easy way to extend the API to achieve these results.
We get questions from time to time on how to add outlined text to a PDF. By outlined text I mean text that is not completely filled in with a color but rather is just an outline of the font and nothing filled in the middle of the text. This is a great situation for using a Custom page element and the C# code below shows how to extend the TextArea page element to add this functionality:
using System;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
public class OutlinedTextArea : TextArea
{
// Member variable to store Border Width
private float borderWidth = 1.0f;
// Constructors. Additional ones can be added to model TextArea
public OutlinedTextArea(string text, float x, float y, float width, float height)
: base(text, x, y, width, height) { }
public OutlinedTextArea(string text, float x, float y, float width, float height,
Font font, float fontSize)
: base(text, x, y, width, height, font, fontSize) { }
// Border Width Property added
public float BorderWidth
{
get { return this.borderWidth; }
set { this.borderWidth = value; }
}
// Override Draw Method
public override void Draw(ceTe.DynamicPDF.IO.PageWriter writer)
{
// Enter Graphics Mode
writer.SetGraphicsMode();
// Set Stroke Color and Border Width
writer.SetStrokeColor(base.TextColor);
writer.SetLineWidth(this.borderWidth);
// Enter Text Mode
writer.SetTextMode();
// Set Text Rendering Mode
writer.SetTextRenderingMode(TextRenderingMode.Stroke);
// Call Draw on base class
base.Draw(writer);
// Enter Text Mode (in case underline is set to true)
writer.SetTextMode();
// Set Text Rendering Mode Back to Fill
writer.SetTextRenderingMode(TextRenderingMode.Fill);
}
}
More...