我试图生成pdf并同时填写一些字段。我这样做有两种方式。第一个是创建文本字段并设置文本。
var _text = new TextField(writer,
new Rectangle(sectionX + textLength + 2, fieldIncrementer - 3,
sectionX + Convert.ToSingle(xElement.Parent.Attribute("width").Value),
fieldIncrementer + fieldFontSize - 2), xElement.Attribute("name").Value.Trim());
if (xElement.Attribute("autoFill") != null)
{
_text.Text = FormAutoFill.Instance.GetValue(xElement.Attribute("autoFill").Value);
}
这很有效。另一种方法是创建位于表格中单元格顶部的文本字段。
//Create the text field that will be attached to the cell
var tf = new TextField(writer, new Rectangle(67, 585, 140, 800),
tableDescendant.Attribute("name").Value); //The rectangle will be ignored by the cell event
tf.Alignment = alignment;
tf.Font = FONT;
if (tableDescendant.Attribute("autoFill") != null)
{
tf.Text = tableDescendant.Attribute("autoFill").Value;
}
//Create an empty phrase since the cell won't take an empty string
var phrase = new Phrase(" ",
new Font(FONT, FontSize, Font.NORMAL, BaseColor.BLACK));
//Create the empty cell
var tbCell = new PdfPCell(phrase);
var events = new FieldPositioningEvents(writer, tf.GetTextField());
events.AddField("djdjdj", tf.GetTextField());
tbCell.CellEvent = events;
此方法在通过BlueBeam Revu查看pdf时效果很好,但在Adobe Reader中,表格中的字段不可见。 更奇怪的是,如果我点击阅读器顶部的按钮说明"突出显示现有字段"我看到应该在那里的文字,但它被压扁了!
我希望有人可以帮助我,我发现第一种方法和第二种方法没有区别。
更新#1:我打印后看起来在bluebeam中表现出相同的行为。也就是说,文本被压扁了。
答案 0 :(得分:1)
好的,我查看了您的示例文件,并对该字段的外观框的尺寸感到惊讶:
/BBox [0, 0, 73, 215]
它具有原始TextField
的宽度和高度,单元格事件将忽略您评论中的值。
var tf = new TextField(writer, new Rectangle(67, 585, 140, 800),
tableDescendant.Attribute("name").Value); //The rectangle will be ignored by the cell event
实际上,单元格事件不使用这些值,但在触发单元格事件之前,您可以设置字段的值:
tf.Text = tableDescendant.Attribute("autoFill").Value;
此处为该字段值生成外观,该外观使用您希望忽略的那些初始字段尺寸。
要解决此问题,您应该尝试在触发单元格事件后设置值,即在表格布局后进行设置。
或者,您可以完全关闭外观的生成,例如:由coderRed通过创建pdf压模提出如下:
PdfReader reader = new PdfReader(xmlFormDoc + ".pdf");
PdfStamper stamper = new PdfStamper(reader,new FileStream("tempdoc.pdf",FileMode.Create));
stamper.AcroFields.GenerateAppearances = false;
stamper.Close();
reader.Close();
File.Replace("tempdoc.pdf",xmlFormDoc+".pdf",null);