将PPCPCell添加到段落
我正在尝试在使用iTextSharp的段落句子中添加一个TextField(acrofield)。一个例子是“生效日期是[Month],[Year]的[Day]日,这将开始。”将PPCPCell添加到段落
事情我已经尝试:
Paragraph para1 = new Paragraph(); para1.Add(New Phrase("The Effective Date is",fontBold));
//The next line is where it breaks, "Insertion of illegal Element: 30"
para1.Add(CreateTextField("Day",1,0)); //this function returns a PdfPCell.
PdfPCell tempCell = new PdfPCell(); tempCell.AddElement(new Phrase("The Effective Date is",fontBold));
//the next line breaks as well, "Element not allowed."
tempCell.AddElement(CreateTextField("Day",1,0));
Paragraph para1 = new Paragraph(); para1.Add(New Phrase("The Effective Date is",fontBold));
para1.AddSpecial(CreateTextField("Day",1,0));
//This doesn't generate an error, but the TextField is not displayed on PDF
Paragraph para1 = new Paragraph(); PdfPTable tempTable = new PdfPTable(1);
para1.Add(New Phrase("Hello",fontBold));
tempTable.AddCell(CreateTextField("Day",1,0));
para1.Add(tempTable);
para1.Add(New Phrase("World",fontBold));
//This doesn't generate an error, but the TextField is not displayed on PDF
我知道,通过createTextField(...)的作品,因为我在使用它其他几个地方在页面上。
如何在不使用表格的情况下将TextField与其他文本内嵌添加,并且繁琐地尝试操纵单元格大小以适应我需要的内容?
感谢您的帮助!
回答:
你的问题是错误的。您不希望将PdfPCell
添加到Paragraph
。你想创建内联表单域。这是完全不同的问题。请参考GenericFields示例。在这个例子中,我们创建了Paragraph
,你需要这样的:
Paragraph p = new Paragraph(); p.add("The Effective Date is ");
Chunk day = new Chunk(" ");
day.setGenericTag("day");
p.add(day);
p.add(" day of ");
Chunk month = new Chunk(" ");
month.setGenericTag("month");
p.add(month);
p.add(", ");
Chunk year = new Chunk(" ");
year.setGenericTag("year");
p.add(year);
p.add(" that this will begin.");
你看我们如何添加要在其中添加PdfPCell
空Chunk
S'我们在这些Chunk
对象上使用setGenericTag()
方法来添加一个表单域,其中的任何一个表单域都会呈现。
对于这个工作,我们需要声明一个页面事件:
writer.setPageEvent(new FieldChunk());
的FieldChunk
类看起来是这样的:
public class FieldChunk extends PdfPageEventHelper { @Override
public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) {
TextField field = new TextField(writer, rect, text);
try {
writer.addAnnotation(field.getTextField());
} catch (IOException ex) {
throw new ExceptionConverter(ex);
} catch (DocumentException ex) {
throw new ExceptionConverter(ex);
}
}
}
每次“通用块”呈现时,onGenericTag()
方法将被称为传递我们在setGenericTag()
方法中使用的参数作为text
参数。我们使用writer
,rect
和text
参数来创建并添加TextField
。结果是这样的:如果你想创建一个更大的文本字段
随意适应rect
。
重要提示:我的例子是用Java编写的。如果您想将示例移植到C#,只需将每种方法的第一个字母更改为大写(例如,将add()
更改为Add()
)。如果这不起作用,请尝试将参数设置为成员变量(例如将writer.setPageEvent(event)
更改为writer.PageEvent = event
)。
更新:如果您想使该字段更大,您应该创建一个新的Rectangle
。例如:
Rectangle rect2 = new Rectangle(rect.Left, rect.Bottom - 5, rect.Right, rect.Top + 2); TextField field = new TextField(writer, rect2, text);
以上是 将PPCPCell添加到段落 的全部内容, 来源链接: utcz.com/qa/267319.html