由 1 个 PDF 模板创建的多页 PDF
Multiple page PDF created by 1 PDF template
这是我的情况,我有一个数据模型列表,它将把给定的 PDF 模板填充到一个大的 pdf 中,并显示在网页上供客户打印文件。 (没有本地副本)。我使用 kuujinbo 的示例 但由于某些原因,当我要在页面上显示 pdf 时,我不能让内存流绑定。 (错误是无法读取关闭的内存流。)我的系统环境是 MVC 5
使用最新的 itextsharp。
20151107 Updated:Find原因。整体代码是正确的,但在循环结束时我应该把 byteInfo = Masterstream.ToArray();在 smartcopy 外部使用但在文档内部使用。并稍后创建一个新的内存字符串以将字节信息和 return 抓取到视图中。
List<Datamodel> PrintList = ( List<Datamodel> )Session["GetDAta"];
BaseFont baseChineseFont = BaseFont.CreateFont(@"~~~~~~~~~",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
MemoryStream Masterstream = new MemoryStream();
byte[] byteInfo;
using (Document document = new Document())
{
using (PdfSmartCopy copy = new PdfSmartCopy(document, Masterstream))
{
document.Open();
foreach (Datamodel childnode in PrintList)
{
PdfReader pdfReader = new PdfReader(Request.MapPath("~/Content/try 1.pdf"));
using (MemoryStream ms = new MemoryStream())
{
using (PdfStamper stamper = new PdfStamper(pdfReader, ms))
{
// do stuff //
AcroFields pdfForm = stamper.AcroFields;
#region[input data]
pdfForm.AddSubstitutionFont(baseChineseFont);//加font
pdfForm.SetField("XXXXXXXX", childnode.XXXXXX);
#endregion
stamper.FormFlattening = true;
}
pdfReader = new PdfReader(ms.ToArray());
copy.AddPage(copy.GetImportedPage(pdfReader, 1));
}
}
byteInfo = Masterstream.ToArray();
}
}
Masterstream.Write(byteInfo, 0, byteInfo.Length);
Masterstream.Position = 0;
return new FileStreamResult(Masterstream, "application/pdf");
正确结果
}///smartcopy end using
byteInfo = Masterstream.ToArray();
} //document end using
MemoryStream finalyresult= new MemoryStream(byteInfo);
finalyresult.Write(byteInfo, 0, byteInfo.Length);
finalyresult.Position = 0;
return new FileStreamResult(finalyresult, "application/pdf");
using (Document document = new Document())
{
using (PdfSmartCopy copy = new PdfSmartCopy(document, Masterstream))
{
document.Open();
foreach (Datamodel childnode in PrintList)
{
PdfReader pdfReader = new PdfReader(Request.MapPath("~/Content/try 1.pdf"));
using (MemoryStream ms = new MemoryStream())
{
using (PdfStamper stamper = new PdfStamper(pdfReader, ms))
{
// do stuff //
AcroFields pdfForm = stamper.AcroFields;
#region[input data]
pdfForm.AddSubstitutionFont(baseChineseFont);//加font
pdfForm.SetField("XXXXXXXX", childnode.XXXXXX);
#endregion
stamper.FormFlattening = true;
}
pdfReader = new PdfReader(ms.ToArray());
copy.AddPage(copy.GetImportedPage(pdfReader, 1));
}
}
}///smartcopy end using
byteInfo = Masterstream.ToArray();
} //document end using
MemoryStream finalyresult= new MemoryStream(byteInfo);
finalyresult.Write(byteInfo, 0, byteInfo.Length);
finalyresult.Position = 0;
return new FileStreamResult(finalyresult, "application/pdf");
这是我的情况,我有一个数据模型列表,它将把给定的 PDF 模板填充到一个大的 pdf 中,并显示在网页上供客户打印文件。 (没有本地副本)。我使用 kuujinbo 的示例 但由于某些原因,当我要在页面上显示 pdf 时,我不能让内存流绑定。 (错误是无法读取关闭的内存流。)我的系统环境是 MVC 5 使用最新的 itextsharp。
20151107 Updated:Find原因。整体代码是正确的,但在循环结束时我应该把 byteInfo = Masterstream.ToArray();在 smartcopy 外部使用但在文档内部使用。并稍后创建一个新的内存字符串以将字节信息和 return 抓取到视图中。
List<Datamodel> PrintList = ( List<Datamodel> )Session["GetDAta"];
BaseFont baseChineseFont = BaseFont.CreateFont(@"~~~~~~~~~",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
MemoryStream Masterstream = new MemoryStream();
byte[] byteInfo;
using (Document document = new Document())
{
using (PdfSmartCopy copy = new PdfSmartCopy(document, Masterstream))
{
document.Open();
foreach (Datamodel childnode in PrintList)
{
PdfReader pdfReader = new PdfReader(Request.MapPath("~/Content/try 1.pdf"));
using (MemoryStream ms = new MemoryStream())
{
using (PdfStamper stamper = new PdfStamper(pdfReader, ms))
{
// do stuff //
AcroFields pdfForm = stamper.AcroFields;
#region[input data]
pdfForm.AddSubstitutionFont(baseChineseFont);//加font
pdfForm.SetField("XXXXXXXX", childnode.XXXXXX);
#endregion
stamper.FormFlattening = true;
}
pdfReader = new PdfReader(ms.ToArray());
copy.AddPage(copy.GetImportedPage(pdfReader, 1));
}
}
byteInfo = Masterstream.ToArray();
}
}
Masterstream.Write(byteInfo, 0, byteInfo.Length);
Masterstream.Position = 0;
return new FileStreamResult(Masterstream, "application/pdf");
正确结果
}///smartcopy end using
byteInfo = Masterstream.ToArray();
} //document end using
MemoryStream finalyresult= new MemoryStream(byteInfo);
finalyresult.Write(byteInfo, 0, byteInfo.Length);
finalyresult.Position = 0;
return new FileStreamResult(finalyresult, "application/pdf");
using (Document document = new Document())
{
using (PdfSmartCopy copy = new PdfSmartCopy(document, Masterstream))
{
document.Open();
foreach (Datamodel childnode in PrintList)
{
PdfReader pdfReader = new PdfReader(Request.MapPath("~/Content/try 1.pdf"));
using (MemoryStream ms = new MemoryStream())
{
using (PdfStamper stamper = new PdfStamper(pdfReader, ms))
{
// do stuff //
AcroFields pdfForm = stamper.AcroFields;
#region[input data]
pdfForm.AddSubstitutionFont(baseChineseFont);//加font
pdfForm.SetField("XXXXXXXX", childnode.XXXXXX);
#endregion
stamper.FormFlattening = true;
}
pdfReader = new PdfReader(ms.ToArray());
copy.AddPage(copy.GetImportedPage(pdfReader, 1));
}
}
}///smartcopy end using
byteInfo = Masterstream.ToArray();
} //document end using
MemoryStream finalyresult= new MemoryStream(byteInfo);
finalyresult.Write(byteInfo, 0, byteInfo.Length);
finalyresult.Position = 0;
return new FileStreamResult(finalyresult, "application/pdf");