Как создать кнопки для добавления в файл PDF с помощью iTextSharp?
Я создаю "метки", а также текстовые поля и флажки с помощью iTextSharp, но мои попытки получить этот код для создания кнопок пока не увенчались успехом.
Вот как я создаю текстовые поля:
PdfPCell cellRequesterNameTextBox = new PdfPCell()
{
CellEvent = new DynamicTextbox("textBoxRequesterName")
};
tblFirstRow.AddCell(cellRequesterNameTextBox);
. . .
public class DynamicTextbox : IPdfPCellEvent
{
private string fieldname;
public DynamicTextbox(string name)
{
fieldname = name;
}
public void CellLayout(PdfPCell cell, Rectangle rectangle, PdfContentByte[] canvases)
{
PdfWriter writer = canvases[0].PdfWriter;
float textboxheight = 11f;
Rectangle rect = rectangle;
rect.Bottom = rect.Top - textboxheight;
TextField text = new TextField(writer, rect, fieldname);
PdfFormField field = text.GetTextField();
writer.AddAnnotation(field);
}
}
И вот как я создаю флажки:
PdfPCell cell204Submitted = new PdfPCell()
{
CellEvent = new DynamicCheckbox("checkbox204Submitted")
};
tblLastRow.AddCell(cell204Submitted);
. . .
public class DynamicCheckbox : IPdfPCellEvent
{
private string fieldname;
public DynamicCheckbox(string name)
{
fieldname = name;
}
public void CellLayout(PdfPCell cell, Rectangle rectangle, PdfContentByte[] canvases)
{
PdfWriter writer = canvases[0].PdfWriter;
RadioCheckField ckbx = new RadioCheckField(writer, rectangle, fieldname, "Yes");
ckbx.CheckType = RadioCheckField.TYPE_CHECK;
ckbx.BackgroundColor = new BaseColor(255, 197, 0);
ckbx.FontSize = 6;
ckbx.TextColor = BaseColor.WHITE;
PdfFormField field = ckbx.CheckField;
writer.AddAnnotation(field);
}
}
И вот как я пытаюсь создать кнопки:
PdfPCell cellButton1 = new PdfPCell()
{
CellEvent = new DynamicButton("button1")
};
tblButtonRow.AddCell(cellButton1);
. . .
public class DynamicButton : IPdfPCellEvent
{
private string fieldname;
public DynamicButton(string name)
{
fieldname = name;
}
public void CellLayout(PdfPCell cell, Rectangle rectangle, PdfContentByte[] canvases)
{
PdfWriter writer = canvases[0].PdfWriter;
float buttonheight = 24f;
Rectangle rect = rectangle;
PushbuttonField btn = new PushbuttonField(writer, rect, fieldname);
PdfFormField field = btn.Field; // <= what should this be?
writer.AddAnnotation(field);
}
}
Чего не хватает или что не так в последнем (кнопочном) коде? Я думаю, что мое назначение "field" в DynamicButton.CellLayout() должно быть неправильным, но что это должно быть?
Вот как выглядят "кнопки" (длинные тонкие линии внизу под флажком и связанный с ним текст / метка):
Как я могу увеличить / увлажнить эти пуговицы?
1 ответ
Вы не показываете самую важную часть кода: вы не показываете, как вы создаете ячейки, для которых вы определяете кнопки. Если бы вы проверили значение rect
(точнее его высота), вы обнаружите, что вы, вероятно, создаете ячейки с высотой, которая 0
, Почему высота ноль? Потому что они, вероятно, ничего не содержат.
Нужно ли в клетке что-то содержать? Конечно нет, но если вы хотите избежать строки с нулевой высотой, вы должны определить высоту. Это объясняется в главе 4 моей книги, например, в примере CellHeights. Я прошу прощения за довольно загадочное имя, но этот пример о высоте клеток.
Вы можете определить фиксированную высоту:
cell.FixedHeight = 72f;
Это опасное свойство: если вы добавляете контент, который не помещается внутри фиксированной высоты (например, 72 пользовательских модуля), этот контент будет потерян.
Вы также можете определить минимальную высоту:
cell.MinimumHeight = 36f;
В этом случае высота, безусловно, будет 36 пользовательских единиц (в данном случае), но может быть больше, если в минимальной высоте больше контента, чем умещается.