我正在开发一个项目,要求我连接存储在我们服务器上的大量PDF文件,并将其呈现在网页中。 此PDF数据将被隐藏,并用于允许用户只需按一下按钮即可打印多个PDF。
我目前正在使用iframe通过将帧源指向处理此功能的URL来实现此目的。
这适用于单个文件:
public ActionResult PrintInvoice(string invoiceNumber)
{
string fileloc = GetInvoiceFileLocation(invoiceNumber);
FileStream fs = new FileStream(fileloc, FileMode.Open, FileAccess.Read);
return File(fs, "application/pdf");
}
这也适用于单个文件:
public ActionResult PrintInvoice(string invoiceNumber)
{
string fileloc = GetInvoiceFileLocation(invoiceNumber);
fileBytes = System.IO.File.ReadAllBytes(fileloc);
ms = new MemoryStream(fileBytes);
return File(ms, "application/pdf");
}
但是,这不起作用(iFrame报告无法读取PDF):
public ActionResult PrintInvoice(string invoiceNumber)
{
string fileloc = GetInvoiceFileLocation(invoiceNumber);
fileBytes = System.IO.File.ReadAllBytes(fileloc);
ms = new MemoryStream();
ms.Write(fileBytes, 0, fileBytes.Length);
return File(ms, "application/pdf");
}
第三个代码示例方法似乎很有希望按字节连接文件,但MemoryStream在向其写入字节时似乎不起作用,而不是使用字节初始化流(如示例2所示)。
我想我记得读过PDF数据没有存储为字节? 这里发生了什么会导致示例2工作(对于单个PDF),但是示例3(应该做同样的事情),对于单个PDF不起作用?
感谢您的帮助,
马修
答案 0 :(得分:0)
https://msdn.microsoft.com/en-us/library/system.io.memorystream.write(v=vs.110).aspx
如果写操作成功,则当前位置在 stream按写入的字节数提前。
public ActionResult PrintInvoice(string invoiceNumber)
{
string fileloc = GetInvoiceFileLocation(invoiceNumber);
fileBytes = System.IO.File.ReadAllBytes(fileloc);
ms = new MemoryStream();
ms.Write(fileBytes, 0, fileBytes.Length);
ms.Position = 0;
return File(ms, "application/pdf");
}