0
想只是一个文本添加到使用itextsharp 。而到目前为止,我done.my代码现有的PDF =>无法访问已关闭的文件.net MVC?
public FileStreamResult DownloadCertificate(string UserId)
{
//get user info using UserId from database
//UserDetail UserDetail = db.UserDetails.Where(x => x.UserId == UserId).FirstOrDefault();
string oldFile = Server.MapPath("~/Content/img/tsms/Certificate/Certificate-of-Completion-Award-Template-Blue.pdf");
string newFile = Server.MapPath("~/Content/img/tsms/Certificate/newFile.pdf");
// open the reader
PdfReader reader = new PdfReader(oldFile);
Rectangle size = reader.GetPageSizeWithRotation(1);
Document document = new Document(size);
// open the writer
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
// the pdf content
PdfContentByte cb = writer.DirectContent;
// select the font properties
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 8);
// write the text in the pdf content
cb.BeginText();
string text = "Some random blablablabla...";
// put the alignment and coordinates here
cb.ShowTextAligned(1, text, 520, 640, 0);
cb.EndText();
// write the text in the pdf content
cb.BeginText();
text = "Other random blabla...";
// put the alignment and coordinates here
cb.ShowTextAligned(2, text, 100, 200, 0);
cb.EndText();
// create the new page and add it to the pdf
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
// close the streams and voilá the file should be changed :)
document.Close();
fs.Close();
writer.Close();
reader.Close();
return new FileStreamResult(fs, "application/pdf");
}
我不知道为什么它给了我这种错误。
我试图找到解决方案。我发现.... FileStream "cannot access closed file"
但这对我来说还不够。
我也尝试改变我的代码中的一些行。下面=>
// close the streams and voilá the file should be changed :)
document.Close();
//fs.Close();
//writer.Close();
//reader.Close();
return new FileStreamResult(fs, "application/pdf");
但这种改变也没有帮助我。在我的代码中我做了什么错误(也是如何为用户提供下载模式)。
你有两个问题。您已将您的问题的第一部分用您更改的块“下面的=>”回答 - 您在关闭“fs.close”后尝试访问“fs”。你想保存你的FileStreamResult到一个局部变量,然后关闭你的文档,文件流等等,最后返回本地的FileStreamResult变量。你的错误信息已经给你答案。重读它,并查看您的变量名称以及您关闭它们并访问它们以寻找线索的位置。 GL – mjw
@mjw你是对的。现在更改'//document.Close(); //fs.Close(); //writer.Close(); //reader.Close();'但之后,它显示我anothre错误[链接](https://postimg.org/image/vp3wesgb1/)你可以说任何关于... –
改变你的FileStream构造函数调用to:FileStream fs = new FileStream(newFile,FileMode.Create,FileAccess.ReadWrite); – mjw