protected PdfAppearance GetBorderAppearance()
{
PdfAppearance app = PdfAppearance.CreateAppearance(writer, box.Width, box.Height);
switch (rotation) {
case 90:
app.SetMatrix(0, 1, -1, 0, box.Height, 0);
break;
case 180:
app.SetMatrix(-1, 0, 0, -1, box.Width, box.Height);
break;
case 270:
app.SetMatrix(0, -1, 1, 0, 0, box.Width);
break;
}
app.SaveState();
// background
if (backgroundColor != null) {
app.SetColorFill(backgroundColor);
app.Rectangle(0, 0, box.Width, box.Height);
app.Fill();
}
// border
if (borderStyle == PdfBorderDictionary.STYLE_UNDERLINE) {
if (borderWidth != 0 && borderColor != null) {
app.SetColorStroke(borderColor);
app.SetLineWidth(borderWidth);
app.MoveTo(0, borderWidth / 2);
app.LineTo(box.Width, borderWidth / 2);
app.Stroke();
}
}
else if (borderStyle == PdfBorderDictionary.STYLE_BEVELED) {
if (borderWidth != 0 && borderColor != null) {
app.SetColorStroke(borderColor);
app.SetLineWidth(borderWidth);
app.Rectangle(borderWidth / 2, borderWidth / 2, box.Width - borderWidth, box.Height - borderWidth);
app.Stroke();
}
// beveled
BaseColor actual = backgroundColor;
if (actual == null)
actual = BaseColor.WHITE;
app.SetGrayFill(1);
DrawTopFrame(app);
app.SetColorFill(actual.Darker());
DrawBottomFrame(app);
}
else if (borderStyle == PdfBorderDictionary.STYLE_INSET) {
if (borderWidth != 0 && borderColor != null) {
app.SetColorStroke(borderColor);
app.SetLineWidth(borderWidth);
app.Rectangle(borderWidth / 2, borderWidth / 2, box.Width - borderWidth, box.Height - borderWidth);
app.Stroke();
}
// inset
app.SetGrayFill(0.5f);
DrawTopFrame(app);
app.SetGrayFill(0.75f);
DrawBottomFrame(app);
}
else {
if (borderWidth != 0 && borderColor != null) {
if (borderStyle == PdfBorderDictionary.STYLE_DASHED)
app.SetLineDash(3, 0);
app.SetColorStroke(borderColor);
app.SetLineWidth(borderWidth);
app.Rectangle(borderWidth / 2, borderWidth / 2, box.Width - borderWidth, box.Height - borderWidth);
app.Stroke();
if ((options & COMB) != 0 && maxCharacterLength > 1) {
float step = box.Width / maxCharacterLength;
float yb = borderWidth / 2;
float yt = box.Height - borderWidth / 2;
for (int k = 1; k < maxCharacterLength; ++k) {
float x = step * k;
app.MoveTo(x, yb);
app.LineTo(x, yt);
}
app.Stroke();
}
}
}
app.RestoreState();
return app;
}