[Silverlight] PDF表示
2017/01/22
Silverlightアプリ内にPDFを埋め込み表示するのは大変っぽい。
PDFを表示できさえすればよい、というのであれば別ウィンドウで表示するのが簡単です。
大まかな手順は
- サーバ側にPDFデータ表示用のWebフォームを作成。
- Silverlightアプリ側で作成したWebフォームをポップアップ表示。
では、順に説明していきます。
1.サーバ側
PDFデータを返すためのWebフォームを追加します。
ここでは「HogePdf.aspx」としておきます。
Page_Loadメソッド内でPDFデータを返す処理を実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /// <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プロパティあたりを使って、ゴニョゴニョすればよいかと思います。