[英]How to memory stream a pdf to a HTML Object
我的目標是從內存流中以html-<object>
顯示 PDF。
從背后的 C# 代碼中,我可以從內存流中獲取 PDF 以在這樣的瀏覽器中顯示,這將有效地將整個瀏覽器轉換為 PDF 閱讀器(不理想),因為我丟失了應用程序控件等。我想保留應用程序的感覺就像一切都在一種形式中:
MyWeb.Service.Retrieve.GetPdfById r = new MyWeb.Service.Retrieve.GetPdfById();
MemoryStream byteStream = new MemoryStream(r.Execute("705"));
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "inline; filename=dummy.pdf");
Response.AddHeader("content-length", byteStream.Length.ToString());
Response.BinaryWrite(byteStream.ToArray());
Response.End();
在 HTML 中,我可以像這樣將 PDF 顯示在<object>
,這意味着我可以在<div>
理想地顯示它,但它不是來自動態生成的內存流:
<object data="PDF_File/myFile.pdf" type="application/pdf" width="800px"height="600px">
alt : <a href="PDF_File/myFile.pdf">TAG.pdf</a>
</object>
那么如何將內存流放入HTML-<object>
呢?
對象標簽的數據屬性應包含一個 URL,該 URL 指向將提供 PDF 字節流的端點。
要使該頁面正常工作,您需要添加一個提供字節流的附加處理程序,例如 GetPdf.ashx。 處理程序的 ProcessRequest 方法將准備 PDF 字節流並在響應中內聯返回它,前面是適當的標頭,表明它是一個 PDF 對象。
protected void ProcessRequest(HttpContext context)
{
byte[] pdfBytes = GetPdfBytes(); //This is where you should be calling the appropriate APIs to get the PDF as a stream of bytes
var response = context.Response;
response.ClearContent();
response.ContentType = "application/pdf";
response.AddHeader("Content-Disposition", "inline");
response.AddHeader("Content-Length", pdfBytes.Length.ToString());
response.BinaryWrite(pdfBytes);
response.End();
}
使用指向處理程序的 URL 填充數據屬性,例如"GetPdf.ashx"
。
您可以嘗試以下操作:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.