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

外字が表示されない

RDF、TEXT、HTML、Excel、RTFの場合
これらの形式において外字を表示するには、表示する環境にその外字が登録されている必要があります。
なお、Windows、および Micorosoft Office の仕様により、特定の条件で外字が使用できなかったり、一部の外字が表示されなかったりする場合があります。詳細はmsdnをご参照してください。

PDFの場合

Webアプリケーションにおいて、システムのデフォルトリンク外字(EUDC.TTE)以外のリンク方式の外字を使用する場合には、レジストリ情報をコピーしておく必要があります。詳細については、PDF外字をご参照してください。

Flashビューワの場合

Flashビューワを使用した場合、レポート生成環境(サーバー)およびクライアント環境の両方に外字フォントが登録されていても、外字が表示/印刷されません。

既存のレポートをプロジェクトに追加する

既存のレポートを、別のプロジェクトに追加する方法は、下記のような手順で実現できます。

  1. Visual Studioでコピー先のプロジェクトを開きます。
  2. プロジェクトに別のレポートファイルが存在しない場合、一旦新規レポートを追加し、削除します。
    メモ: この手順を実施することで、プロジェクトにActiveReportsアセンブリ参照が自動的に追加されます。新規にレポートを追加する手順については、プロジェクトにレポートを追加するを参照してください。
  3. プロジェクトのルートフォルダ(.vbprojまたは.csprojファイルが存在するフォルダ)に、既存のレポートファイル一式(*.vbまたは*.cs、*.Designer.vbまたは*.designer.cs、*.resx)をコピーします。
  4. ソリューションエクスプローラ上でコピー先のプロジェクトを選択し、Visual Studioのメニューから[プロジェクト]−[すべてのファイルを表示]を選択します。
  5. ソリューションエクスプローラに手順3.でコピーしたレポートが表示されていますので、そのレポートを選択し、Visual Studioのメニューから[プロジェクト]−[既存項目の追加]を選択します。

こうすることで、レポートに関連するファイルが、プロジェクトに追加されます。

なお、この方法はMicrosoft社の下記サイトにて紹介されている方法と同様の方法です。こちらもあわせてご覧ください。
[方法 : 項目を除去、削除、除外する]
http://msdn.microsoft.com/ja-jp/library/9f4t9t92.aspx

複数のプロジェクト間でレポートを共用する

プロジェクトに直接追加されたレポートを、複数のプロジェクト間で共用して使用することはできません。

ただし、クラスライブラリのプロジェクトにレポートを追加し、そのクラスライブラリのDLLを各プロジェクトから参照することで、間接的に複数のプロジェクト間でレポートを共用すること が可能です。

なお、ActiveReportsを使用したクラスライブラリを参照して、アプリケーションを開発する場合には、その環境に開発ライセンス(製品版がインストールされていること)が必要で す。また、この方法の場合には、クラスライブラリを参照するプロジェクトにライセンス情報が自動的に付与されませんので、手動でプロジェクトに追加してください。

ActiveReportsのライセンス情報の詳細については、「アプリケーションのライセンスの組み込み」を参照してください。

デザイナが表示されない

ActiveReportsのレポートデザイナはVisual Studio IDEと統合され動作します。デザイナが表示されない場合、以下の点を確認してください。

  1. 新規プロジェクトに新規レポートを追加し、レポートデザイナが表示できるかをお試しください。もし、デザイナが表示されない場合、何らかの原因によりデザイナとIDEの統合が解除されている可能性が考えられます。製品を一旦アンインストールし、再インストールをお試しください。
  2. 新規プロジェクトの新規レポートにおいてデザイナ表示に問題が無く、特定のプロジェクトやレポートでのみデザイナが表示できない場合、以下の原因が考えられます。
    • プロジェクトのアセンブリ参照設定が不正
      旧バージョンからプロジェクトを移行した等の理由で、プロジェクトが参照しているActiveReportsアセンブリのバージョンが古い場合などにデザイナが表示されないことがあります。
      対処方法:
      • 正しいバージョンのActiveReportsアセンブリを参照する
      • 新規のActiveReportsプロジェクトを作成し、そのプロジェクトの参照設定を参考に、足りない参照があればプロジェクトに追加する。例えば、System.Drawing.dllの参照が不足している場合にデザイナが表示できないことがあります。
    • レポートファイル(*.Designer.vbまたは*.Designer.cs)が不正
      レポートデザイナが自動生成するコード部分(※)を、手動で編集した等の理由でコードとデザイナの整合性が取れなくなった場合にデザイナが表示されないことがあります。このケースの場合、程度が軽い場合は手動でコードを修正することで復旧できる可能性がありますが、確実に修正できる保証はありません。ActiveReportsデザイナが生成したコード部分は編集しないようにご注意ください。

      ※ソースコード上に以下のコメントがある部分
      • 「デザイナ サポートに必要なメソッドです。このメソッドの内容をコード エディタで変更しないでください。」
      • 「以下のプロシージャは ActiveReport デザイナで必要です。コード エディタで変更しないでください。」
      • 「ActiveReports Designer generated code」
      • 「ActiveReport デザイナで生成されたコード」
      対処方法:
      • デザイナを表示した際のエラーメッセージを手掛かりに、手動でコードを修正する

メモリが大量に消費される場合の対応方法

大量のメモリが消費される原因は、いくつか存在します。ActiveReports にはメモリの消費量を抑制するための直接的な機能は用意されておりません。大量のメモリが消費される場合の対処策としては、以下のようなものが考えられます。

レポートが使用するメモリを明示的に解放する

ActiveReportsが使用したメモリは、通常、共通言語ランタイム(CLR)のガベージコレクタにより定期的に自動解放されます。この自動解放は、メモリが十分に余っている場合には実行されないため、解放のタイミングやレポートの構造によっては、一時的にメモリが増加する場合があります。 ActiveReportsが使用したメモリを明示的に解放するには、Disposeメソッドの呼び出しと、Nothingのセットによるオブジェクトの解放を行ってください。この後に、GC.Collect()を実行することで、明示的なガベージコレクションを行うことができます。

ただし、この場合においても、即座に未回収メモリが回収されるのではなく、実際に行われるのはガベージコレクタ次第であり、その長さは未知です。また、一度のガベージコレクションによって未回収メモリがすべて回収されるわけではありません。実際に計測を行う場合は、GC.Collectを何度か実行しガベージコレクションによって回収される十分なインターバルを見越して、計測を行ってください。

レポートインスタンスが使用しているメモリを、明示的に解放します。

Visual Basic

Visual Basicコード
コードのコピー
Dim rpt As New SectionReport1()
rpt.Run(False)
・・・
' レポートインスタンスをDisposeします。 
rpt.Document.Dispose()
rpt.Dispose()
rpt = Nothing
' ガベージコレクションを実行します。
System.GC.Collect()
' ファイナライゼーションが終わるまでスレッド待機します。
System.GC.WaitForPendingFinalizers()                                               

C#

C#コード
コードのコピー
SectionReport1 rpt = new SectionReport1();
rpt.Run(false);
・・・
// レポートインスタンスをDisposeします。
rpt.Document.Dispose();
rpt.Dispose();
rpt = null;
// ガベージコレクションを実行します。
System.GC.Collect();
// ファイナライゼーションが終わるまでスレッド待機します。
System.GC.WaitForPendingFinalizers();

サブレポートを使用している場合は、メインレポートのReportEndイベント内で、SubreportコントロールのDisposeメソッドを実行します。

Visual Basic

Visual Basicコード
コードのコピー
' レポートインスタンスをDisposeします。
Me.Subreport1.Report.Document.Dispose()
Me.Subreport1.Report.Dispose()
Me.Subreport1.Report = Nothing
Me.Subreport1.Dispose()
Me.Subreport1 = Nothing

C#

C#コード
コードのコピー
// レポートインスタンスをDisposeします。
this.Subreport1.Report.Document.Dispose();
this.Subreport1.Report.Dispose();
this.Subreport1.Report = null;
this.Subreport1.Dispose();
this.Subreport1 = null;

印刷が終了する前にスレッドが停止する

印刷が個別のスレッドで行われる場合、Printを呼び出す前にアプリケーションが終了すると、スレッドも停止します。PrintメソッドのusePrintingThread引数をFalseに設定することで、印刷を同じスレッドで実行できます。

  1. Printメソッドを呼び出したプロジェクトでGrapeCity.ActiveReports.Viewer.Win.v12アセンブリおよびGrapeCity.ActiveReports.v12アセンブリの参照を追加します。
  2. Printメソッドを以下のように設定します。

    Visual Basic

    Visual Basicコード
    コードのコピー
    document.Print(False, False, False)
    

    C#

    C#コード
    コードのコピー
    document.Print(false, false, false);
    

ActiveReportsコントロールがツールボックスに表示されない

ActiveReportsコントロールがツールボックスに表示されない場合は、「ActiveReportsコントロールを追加する」でコントロールを手動で追加してください。

.NET Coreアプリケーションにおいて、OleDbデータプロバイダでパラメータ付きのクエリを使用する時にエラーが表示される

.NET Coreアプリケーションでは、OleDbデータプロバイダでパラメータ付きのクエリを使用する時にエラーが発生します。

これは、データセットで指定されたクエリパラメータの数は、データセットのSQLクエリで使用されているパラメータと一致しないことに関連して発生します。ただし、これは完全な.NET FrameworkのOleDbデータプロバイダで正常に機能します。

この事象を回避するには、SQLクエリで指定されたクエリパラメータの数は、データセット内のクエリパラメータの数と同じである必要があります。

関連トピック