问题描述
这是我的方法,它将 cshtml 显示为 pdf,我们可以下载。 我想在我们的控制器渲染之前自动保存这个 pdf。 我设法保存了文件,但我认为存在编码问题,因为当我打开 pdf 文件时,出现错误消息。
[HttpGet]
[Route("Get")]
public async Task<IActionResult> GetEmployeeInfo()
{
var empObj = new EmployeeInfo
{
EmpId="1001",EmpName="Arthur",Department="Lille",Designation="Dev Engineer"
};
var generatedPdf = await _generatePdf.GetPdf("Views/Employee/EmployeeInfo.cshtml",empObj);
var test = generatedPdf.ToString();
//reading all characters as byte and storing them to byte[]
byte[] pdfIntoBtye = System.Text.Encoding.ASCII.GetBytes(test);
//byte[] pdfIntoBtye = Convert.FromBase64String(test);
MemoryStream memory = new MemoryStream(pdfIntoBtye);
MemoryStream stream = new MemoryStream();
string filePath = _environment.WebrootPath + "/PdfFiles/test5.pdf";
if (!System.IO.File.Exists(filePath))
{
System.IO.File.WriteallBytes(filePath,pdfIntoBtye);
}
return generatedPdf;
}
解决方法
我找到了一个解决方案(问题出在我的 byte[] 属性中),现在我直接像这样生成我的 byte[] :vargeneratedPdf2 = await _generatePdf.GetByteArray("Views/Employee/EmployeeInfo.cshtml",empObj );
我的最终解决方案:``` readonly IGeneratePdf _generatePdf; var generatePdf2 = await _generatePdf.GetByteArray("Views/Employee/EmployeeInfo.cshtml",empObj); string filePath = _environment.WebRootPath + "/PdfFiles/test7.pdf";
if (!System.IO.File.Exists(filePath))
{
System.IO.File.WriteAllBytes(filePath,generatedPdf2);
}
return await _generatePdf.GetPdf("Views/Employee/EmployeeInfo.cshtml",empObj);```
像这样,我以pdf文件显示并自动保存。