【问题标题】:RadioGroup inside table using iTextSharp使用 iTextSharp 的 RadioGroup 内表
【发布时间】:2016-01-30 13:46:04
【问题描述】:

我一直在使用 iTextSharp 生成可编辑 PDF

问题:

我想在表格的列中创建一个Radio Group字段。

我试过了,我的代码是:

//Gender section starts here --->
//Table creation
PdfPTable genderFieldTable = new PdfPTable(1);
genderFieldTable.HorizontalAlignment = 0;//0=Left, 1=Centre, 2=Right
genderFieldTable.DefaultCell.FixedHeight = 100f;
genderFieldTable.TotalWidth = 400;
genderFieldTable.LockedWidth = true;    

//Creating the RadioButton group starts here ---->

PdfFormField _radioGroup = PdfFormField.CreateRadioButton(pdfWriter, true);
_radioGroup.FieldName = "Gender";

string[] genders = { "Male", "Female" };

RadioCheckField genderRadioCheckField = null;
PdfFormField radioGField;
for (int i = 0; i < genders.Length; i++)
{
    genderRadioCheckField = new RadioCheckField(pdfWriter, new Rectangle(200, 806, 170, 890), null, genders[i]);
    //,,40, 806 - i * 40, 60, 788 - i * 40
    genderRadioCheckField.BackgroundColor = BaseColor.LIGHT_GRAY;
    genderRadioCheckField.Rotation = 180;
    genderRadioCheckField.CheckType = RadioCheckField.TYPE_CIRCLE;
    radioGField = genderRadioCheckField.RadioField;
    ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT, new Phrase(genders[i], new Font(Font.FontFamily.HELVETICA, 8)), 70, 790 - i * 40, 0);
    _radioGroup.AddKid(radioGField);
}

//pdfWriter.AddAnnotation(_radioGroup);
iTextSharp.text.pdf.events.FieldPositioningEvents genderEvents
    = new iTextSharp.text.pdf.events.FieldPositioningEvents(pdfWriter, genderRadioCheckField.RadioField);
PdfPCell genderFieldCell = new PdfPCell();
genderFieldCell.FixedHeight = 75f;

genderFieldCell.CellEvent = genderEvents;
genderFieldTable.AddCell(genderFieldCell);
formTable.AddCell(genderFieldTable);

我得到了男性和女性文本(不是无线电圈字段),但它位于某处而不是表格内。

请帮我把 Radiogroup 放到桌子里。

【问题讨论】:

标签: c# .net pdf-generation itextsharp


【解决方案1】:

单选按钮应该在文档上,由于您设置了Rectangle 坐标,它们可能刚刚离开页面。

试试:

genderRadioCheckField = new RadioCheckField(writer, new Rectangle(40, 806 - i * 40, 60, 788 - i * 40), null, genders[i]);

而不是

genderRadioCheckField = new RadioCheckField(pdfWriter, new Rectangle(200, 806, 170, 890), null, genders[i]);

如果您使用它们应该是您的预期结果,则无需注释掉该行下的值。希望这会有所帮助。

【讨论】:

  • 我按照你的建议使用了坐标,还是不行,结果还是一样。
  • 这个答案是错误的:Rectangle 的坐标与表格中单元格的位置没有关系。这个问题的答案很简单,你可以找到here
  • 你知道你使用的iTextsharp版本吗?
  • 我已经在我正在使用的最新版本上对其进行了测试,并设法将文本和圆圈对齐。如果它不适用于您,则它必须是您的代码中的其他内容。我没有提到的另一件事是取消注释代码pdfWriter.AddAnnotation(_radioGroup);
  • @Vikash Bruno 是您的专家,如果您仍然遇到问题,他还有另一种实施方式。我还没有尝试过,但他是 iText 背后的人,所以我会完全采用他的方法。
【解决方案2】:

请查看CreateRadioInTable 示例。

在本例中,我们为无线电组创建一个PdfFormField,并在构造并添加表后添加它:

PdfFormField radiogroup = PdfFormField.createRadioButton(writer, true);
radiogroup.setFieldName("Language");
PdfPTable table = new PdfPTable(2);
// add cells
document.add(table);
writer.addAnnotation(radiogroup);

当我们为单选按钮创建单元格时,我们会添加一个事件,例如:

cell.setCellEvent(new MyCellField(radiogroup, "english"));

事件如下所示:

class MyCellField implements PdfPCellEvent {
    protected PdfFormField radiogroup;
    protected String value;
    public MyCellField(PdfFormField radiogroup, String value) {
        this.radiogroup = radiogroup;
        this.value = value;
    }
    public void cellLayout(PdfPCell cell, Rectangle rectangle, PdfContentByte[] canvases) {
        final PdfWriter writer = canvases[0].getPdfWriter();
        RadioCheckField radio = new RadioCheckField(writer, rectangle, null, value);
        try {
            radiogroup.addKid(radio.getRadioField());
        } catch (final IOException ioe) {
            throw new ExceptionConverter(ioe);
        } catch (final DocumentException de) {
            throw new ExceptionConverter(de);
        }
    }
}

【讨论】:

  • @Vikash 如您所见,它对我有用。也许你应该把任务外包给能正确解释我的例子的人。
  • 你是在 JAVA 的 iTextSharp 中实现它吗?我正在.NET 中实现。我根据 .NET iTextsharp 库更改了我的代码。
  • iText 和 iTextSharp 保持同步。在 Java 中有效的东西也适用于 iTextSharp。当您说“我尝试过,但没有结果”时,您并没有像这里解释的那样邀请人们帮助您:lowagie.com/doesntwork 应该避免可以用“它对我有用”来回答的问题。
  • 好的,我试试。完成后我会告诉你的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多