如何将多个流复制到1个供客户端下载?
How do I copy multiple streams into 1 for the client to download?
我正在使用 c# 和 asp 核心 3,现在就可以使用。
string templatePath = Path.Combine(_webHostEnvironment.WebRootPath, @"templates\pdf\test.pdf");
Stream finalStream = new MemoryStream();
foreach (Info p in list)
{
Stream pdfInputStream = new FileStream(path: templatePath, mode: FileMode.Open);
Stream outStream = PdfService.FillForm(pdfInputStream, p);
outStream.Position = 0;
outStream.CopyTo(finalStream);
outStream.Dispose();
pdfInputStream.Dispose();
}
finalStream.Position = 0;
return File(finalStream, "application/pdf", "test.pdf"));
现在我只得到第一个 PDF,而应该有 3. 如何将循环中创建的所有流 (PDF) 合并为一个 PDF?我正在使用 iTextSharp 并将其用作生成 FillForm 代码的指南。
https://medium.com/@taithienbo/fill-out-a-pdf-form-using-itextsharp-for-net-core-4b323cb58459
您不能通过将 PDF 添加到单个流中来组合 PDF :-)
您可以将每个 PDF 流添加到一个数组并请求 ITextSharp 将它们组合起来,然后返回新创建的流。
List<Stream> pdfStreams = new List<Stream>();
foreach(var item in list)
{
// Open PDF + fill form
pdfStreams.Add(outstream);
}
var newStream = Merge(pdfStreams);
return File(newStream)
我不知道 ITextSharp,但您似乎可以合并 PDF:https://weblogs.sqlteam.com/mladenp/2014/01/10/simple-merging-of-pdf-documents-with-itextsharp-5-4-5/
编辑
顺便说一句,您可以使用 "using" statement for stream(您不必自己调用 dispose)而且我不知道您的 PDF 有多重,但您应该考虑使用“.CopyToAsync”。
我正在使用 c# 和 asp 核心 3,现在就可以使用。
string templatePath = Path.Combine(_webHostEnvironment.WebRootPath, @"templates\pdf\test.pdf");
Stream finalStream = new MemoryStream();
foreach (Info p in list)
{
Stream pdfInputStream = new FileStream(path: templatePath, mode: FileMode.Open);
Stream outStream = PdfService.FillForm(pdfInputStream, p);
outStream.Position = 0;
outStream.CopyTo(finalStream);
outStream.Dispose();
pdfInputStream.Dispose();
}
finalStream.Position = 0;
return File(finalStream, "application/pdf", "test.pdf"));
现在我只得到第一个 PDF,而应该有 3. 如何将循环中创建的所有流 (PDF) 合并为一个 PDF?我正在使用 iTextSharp 并将其用作生成 FillForm 代码的指南。
https://medium.com/@taithienbo/fill-out-a-pdf-form-using-itextsharp-for-net-core-4b323cb58459
您不能通过将 PDF 添加到单个流中来组合 PDF :-)
您可以将每个 PDF 流添加到一个数组并请求 ITextSharp 将它们组合起来,然后返回新创建的流。
List<Stream> pdfStreams = new List<Stream>();
foreach(var item in list)
{
// Open PDF + fill form
pdfStreams.Add(outstream);
}
var newStream = Merge(pdfStreams);
return File(newStream)
我不知道 ITextSharp,但您似乎可以合并 PDF:https://weblogs.sqlteam.com/mladenp/2014/01/10/simple-merging-of-pdf-documents-with-itextsharp-5-4-5/
编辑 顺便说一句,您可以使用 "using" statement for stream(您不必自己调用 dispose)而且我不知道您的 PDF 有多重,但您应该考虑使用“.CopyToAsync”。