PowerTools ActiveReports for .NET 9.0J > ActiveReportsユーザーガイド > よくある質問 > 共通の項目(ページレポート、RDLレポートとセクションレポート) > Web |
Swfobjectが定義されていない、または、IOError#2032が発生する
FlashViewerをIISで実行すると、「Swfobjectが定義されていません」、または、「ドキュメントをロード中にIOErrorが発生しました」等のエラーが発生する場合があります。これらのエラーは、IISでハンドラのマッピングが正しく設定されていないか、アプリケーションのweb.configファイルでマッピングが正しく記載されていない場合に発生します。
IIS7.0でハンドラを設定する方法については、「WebViewerおよびHTTPハンドラを使用するための事前準備(IIS7/8)」をご参照ください。
Webでプレビュー無し直接印刷
WebViewerでは、レポートが描画された後にのみ印刷可能です。ただし、FlashViewerを使用する場合は、描画される前に印刷することも可能です。詳細は「WebViewerでプレビュー無し直接印刷の設定(Professional)」をご参照ください。
WebViewerコントロールをブラウザのサイズに合わせる(Professionalのみ)
WebViewerコントロールのWidthプロパティとHeightプロパティを100%に設定しても、表示するブラウザによってはコントロールのサイズがブラウザの表示領域いっぱいに表示されない場合があります。これは、最終的にクライアントのブラウザ上に表示されるビューワ自体も、HTMLを構成する要素(Object、Divなど)の一部であり、実際の表示結果は、ページを構成する他のHTML要素やCSSの影響を受けるためです。
下記に挙げる方法は、複数のブラウザ間で動作する事を確認していますが、ページの構造や構成、ブラウザのバージョンアップによる仕様変更等により、うまく動作しない場合がある事を、予め注意してください。
Flashビューワまたは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の機能です。 |
Flashビューワから印刷する時、プリンタのデフォルトの用紙サイズで印刷される
Flashビューワから印刷する際の印刷設定ダイアログに表示される用紙サイズや用紙方向は、クライアントに接続されたプリンタのデフォルトの設定値になります。
誠に恐れ入りますが、Flashビューワには、クライアントからの印刷時のプリンタ設定(例:用紙サイズや用紙方向の設定)を自動的に行う機能やプログラミングによって制御するための機能が用意されておりません。
お手数をおかけしますが、印刷実行時に表示される印刷設定ダイアログ上から、出力したい用紙サイズや用紙方向、給紙トレイ等を手動で選択してから印刷してください。
ActiveReports の場合、あらかじめレポートの用紙サイズを設定することが可能です。
しかしながら、Adobe Flash Player には、以下のような印刷機能の制限事項が存在致します。
ActiveReports のFlashビューワは、Adobe Flash Player 上で動作するコンポーネントですので、Flashビューワの印刷機能につきましても、上記のような Adobe Flash Player の制限が適用されます。
こうした制限により、Flashビューワを使用した場合、事前に開発者が意図した用紙サイズや用紙方向、部数を印刷時のプリンタ設定に適用することができません。
例えば、Flashビューワ上のレポートが"A5横"のレポートであっても、Adobe Flash Player の制限により、Flashビューワ側(アプリケーション側)からプリンタの印刷設定を"A5横"に更新することができません。出力先のプリンタのデフォルト設定が"A4縦"である場合には、印刷時の設定をダイアログ上で手動で変更しない限り、レポートの実際の用紙サイズに関係なく、"A4縦"の用紙に印刷されます。
なお、Flashビューワには印刷時にユーザーが指定した用紙サイズが、レポートの用紙サイズと一致しない場合に、自動的に拡大縮小印刷を行うことができる ScalePagesプロパティや、印刷時にユーザーが指定した印刷方向がレポートの用紙方向と一致しない場合に、自動的に用紙方向を調整することができるAdjustPaperOrientationプロパティをご用意しております。
これらのプロパティについては、「Flashビューワの使用」を参照してください。
Flashビューワから印刷する時、透過画像が透過された状態で印刷されない
Flashビューワで透過画像を透過された状態で印刷するには、FlashViewerOptionsクラスのDisplayTransparencyプロパティを"True"に設定する必要があります。(デフォルトでは"False"が設定されています。)
ただし、DisplayTransparencyプロパティを"True"に設定すると、画像が劣化したり、メモリの使用量が増加しますのでご注意ください。
リバースプロキシーやロードバランサーの環境で、Flashビューワにレポートが表示されない
ActiveRepostsのFlashビューワを使用した場合、リバースプロキシーやロードバランサーのドメイン(ドメインA)と、内部に配置されたWebサーバー(Flashビューワを含むWebアプリケーションを配置したもの)のドメイン(ドメインB)が異なる場合には、Flashビューワの内部でクロスドメイン通信が発生します。これは、ActiveReportsのFlashビューワに表示するデータを、内部に配置されたWebサーバー(Flashビューワを含むWebアプリケーションを配置したもの、ドメインB)から直接取得しようとするためです。
また、Flash Playerの仕様として、Flash Playerをクロスドメイン環境で使用する場合は、ポリシーファイル(crossdomain.xml)でクロスドメイン通信を許可する必要があります。
このため、ポリシーファイルの設定が行われていない場合、Flashビューワでクロスドメインの通信が許可されず、本事象が発生します。
ActiveRepostsのFlashビューワをクロスドメイン環境で使用する場合には、Flashビューワを含むWebアプリケーションを配置したWebサーバーに、ポリシーファイルを配置する必要があります。
なお、ポリシーファイルは、Webサーバーのルートに配置します。
(例:http://www.arflashviewer.com/crossdomain.xml);
ポリシーファイル(crossdomain.xml)の例
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>
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度目のリクエスト結果が必ずしも同じクライアントに振り分けられない場合が発生します。このような場合に、ビューワ上に何も表示されない現象が発生します。
ロードバランサーの仕組みを見直すか、もしくは、キャッシュを使用しない HTML形式での出力や、WebViewerコントロールを使用せずに PDFやHTMLにエクスポートした結果を直接クライアントに配信するカスタムエクスポートを行ってください。
Web.Configファイルの記述に誤りがある
デザイナ上で WebViewerコントロールをページ(.aspx)上に配置した時、Web.Configファイルのセクションに自動的に文字列が追加されます。
この文字列内に記述されているアセンブリバージョンが誤っているとWebViewerコントロールは正常に動作しません。問題が発生する環境に配置されている Web.Configファイルについて、バージョンが正しいかどうかご確認ください。
WebViewerコントロールに対して重複してレポートを設定している
WebViewerコントロールに、表示するレポートを設定する方法には、以下の2つの方法がございます。
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プロパティはデザイン時のみ設定可能な項目です。) |