我有一个xml并使用iTextsharp映射到pdf表单字段。它适用于单一记录。但是当存在多个记录时,它不会在输出pdf中添加第二条记录。这是一个代码
public static void GeneratePdf(string sin, List<XElement> elements)
{
var pdfTemplate = HttpContext.Current.Server.MapPath("~/input.pdf");
var newFile = HttpContext.Current.Server.MapPath("~/output.pdf");
var pdfReader = new PdfReader(pdfTemplate);
var pdfStamper = new PdfStamper(pdfReader, new FileStream(
newFile, FileMode.Create));
foreach (var element in elements)
{
foreach (var elem in elements.Elements())
{
pdfStamper.AcroFields.SetField(elem.Name.ToString(), (string)elem);
}
}
pdfStamper.FormFlattening = false;
pdfStamper.Close();
}
答案 0 :(得分:0)
您的问题不明确,因为您没有告诉我们您表单的性质。
如果您的表格基于ACROFORM技术
请查看此视频教程:http://itextpdf.com/codenvy_webapp
您可以在此处找到本教程中使用的示例:https://github.com/blowagie/itextsamples
您还可以在此处找到独立示例:http://itextpdf.com/sandbox/acroforms/reporting
请注意,有一个例子“如何不做”。请确保使用正确的示例:FillFlattenMerge2
Document document = new Document();
PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest));
document.open();
ByteArrayOutputStream baos;
PdfReader reader;
PdfStamper stamper;
AcroFields fields;
while (myApp.hasMoreRecords()) {
baos = new ByteArrayOutputStream();
reader = new PdfReader(SRC);
stamper = new PdfStamper(reader, baos);
fields = stamper.getAcroFields();
myApp.processNextRecord(fields);
stamper.setFormFlattening(true);
stamper.close();
reader.close();
// add the PDF to PdfCopy
reader = new PdfReader(baos.toByteArray());
copy.addDocument(reader);
reader.close();
}
document.close();
请注意,myApp
是您可以编写以循环遍历记录集的自定义类的实例。您将实现方法hasMoreRecords()
和processNextRecord()
来循环记录并逐个处理它们。
如果您的表单基于XML格式架构
在这种情况下,您使用了错误的方法。您无法使用setField()
方法填写动态表单。它适用于一条记录的事实表明您的表单是AcroForm或混合XFA表单。在这两种情况下都无法实现您想要的效果,而无需将您的表单更改为纯粹的动态XFA表单。
只要您拥有纯动态XFA表单,就需要使用以下代码:
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader,
new FileOutputStream(dest));
AcroFields form = stamper.getAcroFields();
XfaForm xfa = form.getXfa();
xfa.fillXfaForm(new FileInputStream(xml));
stamper.close();
reader.close();
我再说一遍:只有拥有正确的表单,此代码段才有效。问题中的元素表明情况并非如此。如果您的表单不是动态XFA表单,您将找不到任何可以实现您想要的软件!!!
观看这些电影了解更多信息:http://itextpdf.com/product/xfa_worker