内存流关闭错误
本文关键字:错误 内存 | 更新日期: 2023-09-27 17:56:09
我正在使用iTextSharp
来生成PDF
,并且不想将其保存到 S3 中的存储桶中。我一直收到这样的错误"无法访问关闭的流"。
using (MemoryStream ms = new MemoryStream())
{
PdfWriter outputWriter = PdfWriter.GetInstance(newPDF, ms);
newPDF.Open();
PdfContentByte cb1 = outputWriter.DirectContent;
for (int pagesToAddFromSourcePDFToNewPDF = 0; pagesToAddFromSourcePDFToNewPDF < soa_total_pages; pagesToAddFromSourcePDFToNewPDF++)
{
if (pagesToAddFromSourcePDFToNewPDF > 0)
{
currentPageInSourcePDF++;
}
newPDF.NewPage();
PdfImportedPage page = outputWriter.GetImportedPage(sourcePDF, currentPageInSourcePDF);
cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
filesCreated++;
// Upload stream to AWS
ms.Position = 0;
using (var transferUtility = new TransferUtility(client))
{
transferUtility.Upload(ms, "mybucketname", "1/soa/" + newPDFFilename); // ERROR IS THROWN HERE
}
newPDF.Close();
}
有什么想法吗?
/鲍勃
您使用流两次:一次用于在内存中创建 PDF,第二次用于上传它。当您不知道抽象(在本例中为 iTextSharp)对流会发生什么时,流的重用可能会出现问题。相反,将流转换为字节数组并从数组创建新流。
byte[] bytes;
using (MemoryStream ms = new MemoryStream())
{
PdfWriter outputWriter = PdfWriter.GetInstance(newPDF, ms);
newPDF.Open();
PdfContentByte cb1 = outputWriter.DirectContent;
for (int pagesToAddFromSourcePDFToNewPDF = 0; pagesToAddFromSourcePDFToNewPDF < soa_total_pages; pagesToAddFromSourcePDFToNewPDF++)
{
if (pagesToAddFromSourcePDFToNewPDF > 0)
{
currentPageInSourcePDF++;
}
newPDF.NewPage();
PdfImportedPage page = outputWriter.GetImportedPage(sourcePDF, currentPageInSourcePDF);
cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
newPDF.Close();
bytes = ms.ToArray();
}
filesCreated++;
using (var ms = new MemoryStream(bytes))
{
// Upload stream to AWS
using (var transferUtility = new TransferUtility(client))
{
transferUtility.Upload(ms, "mybucketname", "1/soa/" + newPDFFilename);
}
}