问题
I am adding a checkbox field to a table cell and it expands across the whole cell. Is there a way I can control the size of the element so it does not take up the whole cell?
I found someone else asking the same question but it was from 2006 so I am hoping something is now available.
One idea I had while writing this was to nest a new table in the table cell and try do some cell alignment trickery to get the checkbox center aligned but I have already had a shower today and do not want to take another.
Edit with code:
This is the class I use for the cell event:
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);
}
}
Its a bit of a work in progress so it has some inconsistencies in it right now but I think Bruno's example below of basing the checkbox's rectangle off the parent cell's rectangle makes sense. I was mainly curious if it was possible since the post I reference above made the comment that is wasn't.
回答1:
I took some time to create you a small example that explains how to use cell events. See CheckboxCell on the official iText site.
The idea is to implement the PdfPCellEvent
interface the way it's done in CheckboxCellEvent
.
In this event, you get a Rectangle
value: position
. You can calculate the center of this rectangle like this:
float x = (position.getLeft() + position.getRight()) / 2;
float y = (position.getTop() + position.getBottom()) / 2;
Suppose that you want to add a check box that measures 20 by 20 and that is centered inside a cell, then you'd need to create a rectangle like this:
Rectangle rect = new Rectangle(x - 10, y - 10, x + 10, y + 10);
I assume that you don't have any problem creating a check box (if you do, please take a look at the CheckboxCell example).
来源:https://stackoverflow.com/questions/21342034/resizing-a-form-field-in-itextsharp