iTextSharp Textfield将字​​体设置为Bold

时间:2010-08-16 20:39:40

标签: c# pdf itextsharp

对于textfield对象,我想将样式更改为粗体。我已经创建了arial字体,因为它不是BaseFont对象的默认字体。显然,TextField对象仅将BaseFont作为有效字体。我想知道如何将我分配给文本字段的字体样式更改为粗体。有没有办法做到这一点?这是我到目前为止的代码

TextField txtNewField = new TextField(stamp.Writer, new Rectangle(1, 1, 75, 25), "TxtField"); 
BaseFont arial = BaseFont.CreateFont(@"c:\windows\fonts\arial.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
txtNewField.FontSize = 8; 
txtNewField.Font = arial; 

提前谢谢!

2 个答案:

答案 0 :(得分:5)

您是否尝试将arialbd.ttf指定为字体名称?我认为无论如何都会产生更好的效果,因为粗体字会被调整。

(我不确定为什么你不能只为TextField指定一个Font,诚然......)

答案 1 :(得分:0)

我不确定这是否在所有情况下都行得通,但是我创建了此帮助程序方法来添加表单字段。它抽象出了计算右上角X和Y值的方法,还处理了使字体加粗的问题。

它对调用者隐藏了一些讨厌的实现细节。

@ jon-skeet可以帮助我解决粗体字体问题!

        private static void AddFormField(PdfWriter pdfWriter,
            float lowerLeftX,
            float lowerLeftY,
            float width,
            float height,
            string fieldName,
            Font font)
        {
            var upperRightX = lowerLeftX + width;
            var upperRightY = lowerLeftY - height;
            var fontName = font.Style == Font.BOLD ? $"{font.Familyname}-Bold" : font.Familyname;
            var baseFont = BaseFont.CreateFont(fontName, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            var box = new Rectangle(lowerLeftX, lowerLeftY, upperRightX, upperRightY);

            var field = new TextField(pdfWriter, box, fieldName)
            {
                Font = baseFont,
                FontSize = font.Size
            };

            pdfWriter.AddAnnotation(field.GetTextField());
        }