我使用itextsharp
来填充我的PDF。我对此没有任何问题。基本上我正在做的是获取PDF并填充内存中的字段,然后传回MemoryStream
以显示在网页上。所有这些都与单个文档PDF一起工作。填充多个PDF
我想弄清楚,现在正在合并多个PDF到一个MemoryStream
。我不能弄清楚的是,我填写的文件是相同的。例如,我有一个List<Person>
,其中包含5人。我想为每个人填写一份PDF,并将它们合并到一个记忆体中。考虑到我将为每个人填写相同类型的文件。
我得到的问题是,当我尝试添加第二次迭代的同一PDF的第二个副本时,它只是覆盖第一个填充的PDF,因为它是相同的文档,因此不会添加第二份副本为Person
。
因此,基本上如果我有5个人,我最终会得到一个带有第5个人的数据的页面,而不是一个包含每个人的数据的5个页面的PDF。
下面是一些代码...
MemoryStream ms = ms = new MemoryStream();
PdfReader docReader = null;
PdfStamper Stamper = null;
List<Person> persons = new List<Person>() {
new Person("Larry", "David"),
new Person("Dustin", "Byfuglien"),
new Person("Patrick", "Kane"),
new Person("Johnathan", "Toews"),
new Person("Marian", "Hossa")
};
try
{
// Iterate thru all persons and populate a PDF for each
foreach(var person in persons){
PdfCopyFields Copier = new PdfCopyFields(ms);
Copier.AddDocument(GetReader("Person.pdf"));
Copier.Close();
docReader = new PdfReader(ms.ToArray());
Stamper = new PdfStamper(docReader, ms);
AcroFields Fields = Stamper.AcroFields;
Fields.SetField("FirstName", person.FirstName);
}
}catch(Exception e){
// handle error
}finally{
if (Stamper != null)
{
Stamper.Close();
}
if (docReader != null)
{
docReader.Close();
}
}
+1芝加哥黑鹰! :) – 2010-05-19 21:18:11
@Cameron彼得斯 - 是的,他们是一个团队的地狱。 – Gabe 2010-05-19 21:23:01