[Silverlight] PDF表示
2017/01/22
Silverlightアプリ内にPDFを埋め込み表示するのは大変っぽい。
PDFを表示できさえすればよい、というのであれば別ウィンドウで表示するのが簡単です。
大まかな手順は
- サーバ側にPDFデータ表示用のWebフォームを作成。
- Silverlightアプリ側で作成したWebフォームをポップアップ表示。
では、順に説明していきます。
1.サーバ側
PDFデータを返すためのWebフォームを追加します。
ここでは「HogePdf.aspx」としておきます。
Page_Loadメソッド内でPDFデータを返す処理を実装します。
public partial class HogePdf : System.Web.UI.Page { #region メソッド /// <summary> /// Loadハンドラ /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Load(object sender, EventArgs e) { //==== 応答情報をクリア ====// Response.ClearHeaders(); Response.ClearContent(); //==== バッファリング設定 ====// Response.Buffer = true; //==== 応答データ出力 ====// Response.ContentType = "Application/pdf"; String filePath = MapPath("./hoge.pdf"); Response.WriteFile(filePath); //==== 応答送信 ====// Response.Flush(); Context.ApplicationInstance.CompleteRequest(); } #endregion // メソッド }
「応答データ出力」というコメントが付いている部分がポイント。
データの中身がPDFであることを示すため、Response.ContentTypeプロパティに「"Application/pdf"」を指定します。
あとは、WriteFileメソッドでPDFファイルの内容を書き込むのみ。
2.Silverlightアプリ側
PDFを表示させたいところで以下のいずれかのメソッドをコールします。
・HtmlPage.PopupWindow
・HtmlPage.Window.Navigate
どちらを使うかは仕様に応じて決めればOK。
/// <summary> /// サーバのURIを返す。 /// </summary> String GetLocation() { return "サーバのURI"; } /// <summary> /// PDFウィンドウを表示する。 /// </summary> void ShowPDF() { HtmlPage.PopupWindow(new Uri(GetLocation() + "/HogePdf.aspx"), "_blank", null); }
上記のGetLocation関数の中身は適当なので、サーバのURI文字列を返す処理を実装してください。
HtmlPage.Document.DocumentUriプロパティあたりを使って、ゴニョゴニョすればよいかと思います。