[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プロパティあたりを使って、ゴニョゴニョすればよいかと思います。