iTextSharp:在adobe reader中未显示的表格中生成的字段

时间:2014-08-06 20:11:47

标签: c# pdf itextsharp adobe-reader

我试图生成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中,表格中的字段不可见。Can't see in adobe 更奇怪的是,如果我点击阅读器顶部的按钮说明"突出显示现有字段"我看到应该在那里的文字,但它被压扁了! Squashed!

我希望有人可以帮助我,我发现第一种方法和第二种方法没有区别。

更新#1:我打印后看起来在bluebeam中表现出相同的行为。也就是说,文本被压扁了。

1 个答案:

答案 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);