Silverlight

[Silverlight] PDF表示

2017/01/22

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

大まかな手順は

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

-Silverlight
-

S