Your question is wrong. You don't want to add a PdfPCell
to a Paragraph
. You want to create inline form fields. That's a totally different question.
Take a look at the GenericFields example. In this example, we create the Paragraph
you need like this:
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.");
Do you see how we add empty Chunk
s where you want to add a PdfPCell
? We use the setGenericTag()
method on these Chunk
object to add a form field where ever the Chunk
s are rendered.
For this to work, we need to declare a page event:
writer.setPageEvent(new FieldChunk());
The FieldChunk
class looks like this:
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);
}
}
}
Every time a "generic chunk" is rendered, the onGenericTag()
method will be called passing the parameter we used in the setGenericTag()
method as the text
parameter. We use the writer
, rect
and text
parameters to create and add a TextField
. The result looks like this:
Feel free to adapt rect
if you want to create a bigger text field.
Important: my example is written in Java. If you want to port the example to C#, just change the first letter of each method to upper case (e.g. change add()
into Add()
). If that doesn't work, try setting the parameter as a member variable (e.g. change writer.setPageEvent(event)
into writer.PageEvent = event
).
Update: If you want to make the field bigger, you should create a new Rectangle
. For instance:
Rectangle rect2 = new Rectangle(rect.Left, rect.Bottom - 5, rect.Right, rect.Top + 2);
TextField field = new TextField(writer, rect2, text);