2015-04-16 3 views
0

Я создаю «метки» и текстовые поля и флажки с помощью iTextSharp, но мои попытки извлечь из этого кода для создания кнопок еще не были успешными.Как создать кнопки для добавления в файл PDF с помощью iTextSharp?

Вот как я создаю Textboxes:

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); 
    } 
} 

Что отсутствует или нет в последнем (кнопку) коде? Я думаю, что мое назначение на «поле» в DynamicButton.CellLayout() должно быть неправильным, но что это должно быть?

Вот как выглядит «кнопка» (длинные тощие линии в нижней части, под флажок и связанный с ним текстом/метка):

enter image description here

Как полнеть/гидрат тех twiggified «кнопка»?

ответ

1

Вы не показываете самую важную часть кода: вы не показываете, как вы создаете ячейки, для которых вы определяете кнопки. Если вы проверите значение rect (точнее его высоту), вы обнаружите, что вы, вероятно, создаете ячейки с высотой 0. Почему высота равна нулю? Потому что они, вероятно, ничего не содержат.

Нужно ли для ячейки содержать что-нибудь? Конечно, нет, но если вы хотите избежать строки с нулевой высотой, вам нужно определить высоту. Это объясняется в Chapter 4 моей книги, например, в примере CellHeights. Я прошу прощения за довольно загадочное имя, но этот пример касается высоты ячеек.

Вы можете определить фиксированную высоту:

cell.FixedHeight = 72f; 

Это опасное свойство: если вы добавляете контент, который не помещается внутри определенной высоты (например, 72 единиц пользователя), что содержимое будет потеряно.

Вы также можете определить минимальную высоту:

cell.MinimumHeight = 36f; 

В этом случае высота, безусловно, будет 36 пользовательских единиц (в данном случае), но это может быть больше, если есть больше контента, чем умещается в минимальная высота.