我试图填补了iTextSharp的一种形式,并尝试了下面的代码获取PDF中的所有字段:
string pdfTemplate = @"c:\Temp\questionnaire.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
StringBuilder sb = new StringBuilder();
foreach (var de in pdfReader.AcroFields.Fields)
{
sb.Append(de.Key.ToString() + Environment.NewLine);
}
但foreach循环总是空计数。 我需要做一些文件本身,因为我已经从尝试的例子在这里工作得很好...... 这是我试图填补PDF的例子
有任何想法吗?
编辑::
![](https://www.manongdao.com/static/images/pcload.jpg)
事实证明,在PDF“格式”填写实际根本不是一个形式(PDF格式条款)。 因此,你有两个选择:
您的文本添加到页面内容直接使用硬编码或配置的“场”的位置,并通过@ tschmit007在注释中说明他的回答尺寸。
您实际添加PDF表单域到PDF生成,你需要为模板后,填补了一个真正的PDF格式。
你可以使用一些图形化工具,允许的是,如使用Adobe Acrobat添加实际表单字段或者,也可以使用的iText(夏普)。 看一看的第8章在行动iText的-第二版 ,并提供样品这里的Java和这里的.Net 。
这些样品大多添加表单域到新生成的PDF文档。 您几乎可以使用相同的代码,但是,添加表单字段暴露出使用其内部PdfWriter一个PdfStamper stamper.getWriter()
在Java中和stamper.Writer
在C#。 取而代之的writer.addAnnotation(field)
必须使用stamper.addAnnotation(field, page)
,虽然。
尝试:
using (FileStream outFile = new FileStream("result.pdf", FileMode.Create)) {
PdfReader pdfReader = new PdfReader("file.pdf");
PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);
AcroFields fields = pdfStamper.AcroFields;
//rest of the code here
//fields.SetField("n°1", "value");
//...
pdfStamper.Close();
pdfReader.Close();
}