我有以下书面代码
Dim template As String = Server.MapPath("files/") & "2_paged_form.pdf"
Dim newFile As String = Server.MapPath("exports/") & "newFile.pdf"
Dim reader = New PdfReader(template)
Dim output = New FileStream(newFile, FileMode.Create, FileAccess.Write)
Dim stamp = New PdfStamper(reader, output)
stamp.AcroFields.SetField("client", "hello")
stamp.AcroFields.SetField("name", "test test")
stamp.AcroFields.SetField("address", "Hellocourt")
stamp.AcroFields.SetField("postcode", "xx 3xx")
stamp.AcroFields.SetField("dob", "11/02/1987")
stamp.FormFlattening = True
stamp.Close()
output.Close()
reader.Close()
我设法创建了一个newfile.pdf,只有2_paged_form.pdf中的一次性条目。
但是我有多个信息要循环,以便newfile.pdf有多个条目。例如newfile.pdf应该有10个页面,包含5个不同的条目。
有人可以帮忙吗?
答案 0 :(得分:0)
官方iText网站和书中记录了这一点。
如果您更喜欢观看视频,可以观看this tutorial。您可以尝试示例here。您需要输入“填充,拼合和合并:如何正确执行”。这些示例的代码可以在这里找到:FillFlattenMerge2。请注意,还有一个FillFlattenMerge1示例演示 NOT 如何执行此操作。请不要使用该示例; - )
如果您更喜欢看书,请下载Chapter 6 of "iText in Action - Second Edition"。您已经知道如何填写一个表单(如第185页所述),您现在想要合并不同的结果。同样,有一个关于不如何执行此操作的示例(第190页)以及 应如何执行此操作(第190-191页)。
我从未写过一行vb.net,但请把这个Java代码看作是伪代码:
PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest));
document.open();
ByteArrayOutputStream baos;
PdfReader reader;
PdfStamper stamper;
AcroFields fields;
while (data.hasMoreElements()) {
// create a PDF in memory
baos = new ByteArrayOutputStream();
reader = new PdfReader(SRC);
stamper = new PdfStamper(reader, baos);
fields = stamper.getAcroFields();
MyData myData = data.nextElement();
fields.setField("name", myData.getName());
fields.setField("address", myData.getAddress());
...
stamper.setFormFlattening(true);
stamper.close();
reader.close();
// add the PDF to PdfCopy
reader = new PdfReader(baos.toByteArray());
copy.addDocument(reader);
reader.close();
}
document.close();
如您所见,您需要创建以填充表单,从而生成保存在内存中的PDF。然后,您需要从内存中读取此PDF并使用PdfSmartCopy
方法将其添加到addDocument()
实例。
<强> P.S。 1: 坏示例有什么问题?它会导致文本膨胀,因为表单的静态内容会在复制表单时多次添加。 PdfSmartCopy
检查冗余信息,并仅添加一次静态内容。
P.S。 2:为什么有糟糕的方式呢?如果您合并的文档非常不同,那么糟糕的方式实际上是一种好方法。在这种情况下,坏方式更快,内存更少,因此实际上是好方式。当您合并彼此非常相似的文档时,例如填充了不同数据集的相同表单,这是唯一不好的。