ActiveReports for .NET 18.0J
Web
ActiveReportsユーザーガイド > よくある質問 > 共通の項目(ページレポート/RDLレポート/セクションレポート) > Web

Webでプレビュー無し直接印刷

WebViewerでは、レポートが描画された後にのみ印刷可能です。ただし、JSビューワを使用する場合は、描画される前に印刷することも可能です。詳細は「JSビューワでの印刷」のプレビュー無し直接印刷をご参照ください。

WebViewerコントロールをブラウザのサイズに合わせる(Professionalのみ)

WebViewerコントロールのWidthプロパティとHeightプロパティを100%に設定しても、表示するブラウザによってはコントロールのサイズがブラウザの表示領域いっぱいに表示されない場合があります。これは、最終的にクライアントのブラウザ上に表示されるビューワ自体も、HTMLを構成する要素(Object、Divなど)の一部であり、実際の表示結果は、ページを構成する他のHTML要素やCSSの影響を受けるためです。

下記に挙げる方法は、複数のブラウザ間で動作する事を確認していますが、ページの構造や構成、ブラウザのバージョンアップによる仕様変更等により、うまく動作しない場合がある事を、予め注意してください。

たはPDF形式で出力する場合、以下のようにCSSを定義してください。#WebViewer1と#WebViewer1_controlDivは、実際に配置されているWebViewerコントロールのid属性名を使用してください。

<style type = "text/css">
html, body, #form1, #div1, #WebViewer1_controlDiv
{
width: 100%;
height: 100%;
margin: 0;
}
</style>

注意: 入れ子状になった複数のタグで構成されている場合、その全てのタグに対してCSSが有効になるように設定する必要があります。上の例では、<form1>タグ、<div1>タグを設定しています。

上述の2つのビューワがブラウザにインストールされたプラグインを経由して表示されるのに対し、HtmlViewerの場合、ビューワ自体がHTMLで構成されるため、CSSの適用などにより、WebViewerをブラウザのサイズに合わせるのが困難です。WebViewerのWidthとHeightプロパティに固定値を指定するか、下記のコードをお試しください。

Visual Basic

Visual Basic コード
コードのコピー
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    With WebViewer1
        ' WebViewerの位置を設定します。
        .Style.Item("Top") = "0px"
        .Style.Item("left") = "0px"
        ' WebViewerのサイズを設定します。
        .Width = Unit.Percentage(100)
        .Height = Unit.Percentage(100)
        .Style.Item("height") = "100%"
        .Style.Item("width") = "100%"
    End With
End Sub

C#

C# コード
コードのコピー
Page_Load(object sender, System.EventArgs e)
{
    // WebViewerの位置を設定します。
    WebViewer1.Style.Item("Top") = "0px";
    WebViewer1.Style.Item("left") = "0px";
    // WebViewerのサイズを設定します。
    WebViewer1.Width = Unit.Percentage(100);
    WebViewer1.Height = Unit.Percentage(100);
    WebViewer1.Style.Item("height") = "100%";
    WebViewer1.Style.Item("width") = "100%";
}
注意: WebViewerコントロールは、Professionalの機能です。

WebViewerコントロールを使用してPDFファイルを表示する場合、PDFファイルが新規ウインドウで開かれる

WebViewerコントロールのViewerTypeプロパティを"AcrobatReader"に設定し、PDFファイルをブラウザで表示する場合、PDFファイルが新規ウインドウで開かれる場合があります。

これは、Adobe Readerが常に32ビットで動作することに関連して発生します。

Internet Explorerの64ビットバージョンを使用する場合、ブラウザ自体は64ビットで動作します。一方、PDFファイルを開くためのAdobe Readerプラグインは常に32ビットで動作するため、32ビットのInternet Explorerインスタンスが新規ウィンドウとして開かれます。この事象を回避するには、32ビットのInternet Explorerを使用してください。

Webブラウザ内にPDFが表示されない

作成したPDFをWebブラウザ内のAdobe Reader上に表示できず、AdobeReaderが単独で起動してしまう。
PDFをWebブラウザ内でインライン表示する場合の動作は、Adobe Readerの設定等に依存します。詳細については、Adobe社のサポートデータベースで公開されている、以下の情報を参照してください。

Adobe社のサポートデータベース
http://www.adobe.com/jp/support/reader/

Web上でレポートが正しく表示されない

表示されないときの具体的な現象や発生するエラーの内容、さらに、どのような方法でレポートを出力しているかによって、その原因と対処方法はさまざまです。

レポートが何も出力されない

いくつかの原因が考えられます。

サーバーの事前設定が正しく行われていない

アプリケーションを配置したサーバー上で、Webアプリケーションの実行前に必要な設定が適切に行われているかどうかを、チェックボックスの設定値に注意しながら確認してください。

レポートの生成中にクライアントに送られている

Runメソッドを使用してレポートを生成している場合、Runメソッドの引数をTrueに設定すると、生成処理が完了していなくても次の処理が行われます。このため、生成のタイミングによってはレポートが正しくクライアントに配信されず、ビューワ上に表示されません。WebアプリケーションでRun メソッドを使用する場合は、引数にTrueを指定しないようにしてください。

レポートで使用するデータが不正

アプリケーションでデータ更新などのデータ操作を行っている最中に、そのデータを使用するレポートの生成処理を行うと、正しいデータがレポート側に引き渡されずにレポートが出力されない現象が発生します。レポートで使用するデータが、レポート生成処理前に確実に作成されているかどうかを確認してください。

ロードバランサーの仕組みを使用している

WebViewerコントロールを使用した場合、クライアントからリクエストがあると、サーバー側ではレポートを作成し、それをキャッシュに格納します。そして、レポートを表示するためのHTMLを生成しクライアントに返します。クライアントのブラウザではHTMLが取り込まれると、再度サーバーにリクエストを発行します。

このとき、ロードバランサーのセッション維持方式として、振り分けるサーバーを、接続してきたユーザーのIPアドレスを元に特定するような方法を行っていると、ダイヤルアップユーザーのように毎回IPアドレスが変化したり、プロキシにより同じIPアドレスを大勢で使用するような企業内からのアクセスなどの場合に、1度目のリクエストと2度目のリクエスト結果が必ずしも同じクライアントに振り分けられない場合が発生します。このような場合に、ビューワ上に何も表示されない現象が発生します。

ロードバランサーの仕組みを見直すか、WebViewerコントロールを使用せずに PDFやHTMLにエクスポートした結果を直接クライアントに配信するカスタムエクスポートを行ってください。

Web.Configファイルの記述に誤りがある

デザイナ上で WebViewerコントロールをページ(.aspx)上に配置した時、Web.Configファイルのセクションに自動的に文字列が追加されます。

この文字列内に記述されているアセンブリバージョンが誤っているとWebViewerコントロールは正常に動作しません。問題が発生する環境に配置されている Web.Configファイルについて、バージョンが正しいかどうかご確認ください。

WebViewerコントロールに対して重複してレポートを設定している

WebViewerコントロールに、表示するレポートを設定する方法には、以下の2つの方法がございます。

  1. コード上で Reportプロパティにレポートのインスタンスを設定
  2. デザイナ画面で ReportNameプロパティを設定

ReportNameプロパティと Reportプロパティが両方とも設定されている場合、ReportNameプロパティで設定されているレポートの方が優先されるため、コード上で Reportプロパティに行った設定が無視されて、デフォルトの設定でレポートが生成されます。

ReportNameプロパティで設定されているレポートが何らかの原因で生成に失敗した場合、WebViewerコントロール上にレポートが正しく表示されないなどの問題が発生致します。

もし、上記(1)と(2)の両方の方法を使用している場合には、予めデザイン時に WebViewerコントロールの ReportNameプロパティを空白に設定した上で、再度動作をご確認ください。

レポート生成処理時に問題が発生している

WebViewerのReportプロパティにレポート(レポートのインスタンス)がセットされていない場合や、レポートが正常に作成されなかった場合に、冒頭に挙げたような問題が発生致します。

例えば、if ステートメントや try-catch ステートメントなどの分岐処理により、WebViewerコントロールの Reportプロパティにレポートがセットされていないといったことはございませんでしょうか。現象発生時の処理内容をご確認ください。

仮想プリンタの設定が行われていない

セクションレポートの場合、レポート生成時にも実行環境(サーバー)に接続されたプリンタドライバから用紙サイズ等の情報を取得します。(その際に参照されるプリンタは、基本的にサーバーの「通常使うプリンタ」に指定されているプリンタになります。)

適切なプリンタドライバが存在しない場合や、プリンタドライバが存在しても、そのドライバがレポート内で指定している用紙サイズをサポートしていない場合や、ASP.NET(ワーカープロセス)を実行しているアカウントがプリンタドライバにアクセスできる権限を持たない場合に、レポートが正常に作成されないなどの問題が発生することがあります。

その結果、WebViewerコントロールのReportプロパティにレポートがセットされず、冒頭に挙げたような問題が発生する可能性が考えられます。

こうした問題を回避する方法として、ActiveReports では仮想プリンタの機能をご用意しております。

仮想プリンタの設定を行った場合、プリンタドライバからの情報取得を行わず、任意のサイズでレポートを作成します。

レポートの作成前に、Printerクラスの PrinterNameプロパティに""を設定することで、仮想プリンタ機能を使用できます。(この際、デザイナ上での用紙サイズは、「デフォルトプリンタ」に設定し、コード上で用紙サイズ等を設定することをお勧め致します。)

仮想プリンタは、レポートを生成する環境と表示・印刷する環境が異なる Webアプリケーションなどで有効な方法です。もし、仮想プリンタの設定を行われていない場合には、実装した上で動作をご確認ください。詳細は「仮想プリンタ」を参照して下さい。

※ 仮想プリンタはセクションレポート限定の機能です。ページレポート/RDLレポートの場合、上記のようにレポート生成時に実行環境上のプリンタを参照することはありません。

サーバーが高負荷状態になっている

過去の事例では、実行環境(Webサーバ)が高負荷やリソース不足の状態にある条件で、WebViewerコントロールからのレポート出力が正常に行われず、レポートが正常に表示されない事象が確認されております。

WebViewerコントロールはクライアントからレポートの出力要求があった場合、レポートを生成し、一旦ASP.NETのキャッシュ領域にレポートデータを保存する仕様となっております。

何らかの理由で、このキャッシュデータがクライアントに届く前に消えてしまうと、レポートが表示されない等の問題が発生します。

キャッシュが消えてしまう原因の1つに、ワーカープロセス(aspnet_wp.exeまたはw3wp.exe)のメモリのリサイクルが挙げられます。IISでは、ある一定のしきい値を超えた場合に、ワーカープロセスがリサイクルされる仕組みになっていますので、高負荷、リソース不足の状態で、レポートが実行された場合、このリサイクルが発生し、本現象が発生し易い状態となります。

メモ: 上記のように、コード上で Reportプロパティにレポートオブジェクトを設定する場合、WebViewerコントロールの ReportNameプロパティは設定しないようにしてください。レポートの生成とWebViewerコントロールへの設定処理がそれぞれ重複して実行され、意図しない動作をする場合があります。(ReportNameプロパティはデザイン時のみ設定可能な項目です。)

WebViewerコントロール、JSビューワ、およびWebデザイナを使用する場合、PlatformNotSupportedException例外が発生する

WebアプリケーションではWebViewerコントロール、JSビューワ、およびWebデザイナをクラシックモードで使用する場合、PlatformNotSupportedException例外が発生します。

これは、WebViewerコントロール、JSビューワ、およびWebデザイナはIISのマネージ パイプライン モードが統合モードの場合のみサポートされることに関連して発生します。

この事象を回避するには、次のようにアプリケーション プールのモードを変更してください。

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。
  2. アプリケーション プールに移動します。
  3. アプリが実行されるアプリケーション プールを選択します。
  4. 基本設定を選択します。
  5. [アプリケーション プールの編集]ダイアログで、[マネージ パイプライン モード]を[統合]に変更します。
関連トピック