调整iTextSharp中的表单域的大小

时间:2014-01-24 20:36:20

标签: itextsharp itext

我正在向表格单元格添加一个复选框字段,它会在整个单元格中展开。有没有办法可以控制元素的大小,使它不占用整个单元格?

found someone else asking the same question但它是从2006年开始的,所以我希望现在有一些东西可用。

我写这篇文章时的一个想法是在表格单元格中嵌套一个新表格并尝试进行一些单元格对齐技巧以使复选框中心对齐,但我今天已经洗了个澡而且不想再拿另一个。< / p>

使用代码编辑:

这是我用于单元格事件的类:

public class ChildFieldEvent : IPdfPCellEvent
{
    protected PdfWriter writer;
    protected PdfFormField parent;
    protected string checkBoxName;

    internal ChildFieldEvent(PdfWriter writer, PdfFormField parent, string CheckBoxName)
    {
        this.writer = writer;
        this.parent = parent;
        this.checkBoxName = CheckBoxName;
    }

    public void CellLayout(PdfPCell cell, Rectangle rect, PdfContentByte[] cb)
    {
        createCheckboxField(rect);
    }
    private void createCheckboxField(Rectangle rect)
    {
        RadioCheckField bt = new RadioCheckField(this.writer, rect, this.checkBoxName, "Yes");
        bt.CheckType = RadioCheckField.TYPE_SQUARE;
        bt.Checked = true;
        this.parent.AddKid(bt.CheckField);
    }
}

它正在进行一些工作,所以它现在有一些不一致但我认为下面的布鲁诺示例基于父单元格矩形的复选框矩形是有意义的。我很好奇,如果有可能,因为我上面提到的帖子发表的评论不是。

1 个答案:

答案 0 :(得分:1)

我花了一些时间为您创建一个解释如何使用单元格事件的小例子。请参阅官方iText网站上的CheckboxCell

我们的想法是按照PdfPCellEvent中的CheckboxCellEvent界面实现Rectangle接口。

在这种情况下,您会获得position值:float x = (position.getLeft() + position.getRight()) / 2; float y = (position.getTop() + position.getBottom()) / 2; 。你可以像这样计算这个矩形的中心:

Rectangle rect = new Rectangle(x - 10, y - 10, x + 10, y + 10);

假设您要添加一个20 x 20的复选框并且在单元格内居中,那么您需要创建一个这样的矩形:

{{1}}

我认为您在创建复选框时没有任何问题(如果您这样做,请查看CheckboxCell示例)。