2

私の目的はhtml-<object>、メモリ ストリームから PDF を表示することです。

C# のコード ビハインドから、メモリ ストリームから PDF を取得して、このようなブラウザーに表示できます。これにより、ブラウザー全体が効果的に PDF リーダーに変換されます (理想的ではありません)。これは、アプリケーション コントロールなどを失うためです。すべてが 1 つのフォーム内にあるようなアプリケーションの感触:

    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>か?

4

2 に答える 2

2

object タグのdata属性には、PDF バイト ストリームを提供するエンドポイントを指す URL を含める必要があります。

このページを機能させるには、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".

于 2015-08-31T10:51:17.670 に答える