Silverlight

[Silverlight] PDF表示

2017/01/22

Silverlightアプリ内にPDFを埋め込み表示するのは大変っぽい。
PDFを表示できさえすればよい、というのであれば別ウィンドウで表示するのが簡単です。

大まかな手順は

  1. サーバ側にPDFデータ表示用のWebフォームを作成。
  2. 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プロパティあたりを使って、ゴニョゴニョすればよいかと思います。
 
 

-Silverlight
-