簡體   English   中英

如何將 pdf 內存流式傳輸到 HTML 對象

[英]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"

您可以嘗試以下操作:

  1. 在 iframe 中將 PDF 作為內聯 PDF 流式傳輸,但這會施加大小限制,並且由於安全問題而無法在 IE 和舊瀏覽器中使用。
  2. 使用PDFObject.js將 PDF 嵌入到 HTML 頁面中(並可選擇將其指向鏈接以從服務器獲取動態生成的 PDF)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM