1

Crystal Reports を使用してレポート定義*.rptファイルを生成しています。後で、アプリケーション内からこれらの定義ファイルを使用してレポートを作成します。

アプリケーションのファイル ディレクトリに、ロゴと呼ばれる特別なイメージがあります。私のクリスタルレポートでこのロゴを参照したいと思います。ロゴは常にレポートから数ディレクトリ上にありますが、ルート ディレクトリとホスト コンピューターはインストールごとに変わる可能性があるため、ファイル構造は次のようになります。

image: c:\files\logo.png
report: c:\files\reports\type1\myreport.rpt

またはこのように:

image: \\filehost\files\logo.png
report: \\filehost\\files\reports\type1\myreport.rpt

Crystal には、相対パスを使用して数式でこの画像を参照する方法がありますか? .rpt ファイルには、このイメージを取得するために構築できるファイルの場所への参照が含まれていますか?

編集: @campagnolo_1 は、Crystal には「ファイル パスと名前」という特別なフィールドがあると述べていますが、画像ファイルの場所のスクリプトでそれを使用する方法がわかりません。

編集 2: @campagnolo_1 は、回答に対するコメントで解決策を提供しています。ありがとう campagnolo_1!

4

2 に答える 2

3

Crystal には、ファイル パスと名前用の特別なフィールドがあります。これを使用して、レポート ファイルの場所を見つけ、必要に応じてパスを抽出できます。次に、それを使用して画像ファイルを動的に参照できます。これは、いくつかのステップバイステップの手順を含む投稿です。

于 2013-11-14T16:01:54.507 に答える
1

私は常に、レポートがバインドされている基になるデータの一部としてロゴをストリーミングします。次のようにして、列をデータセットに追加します。

DataTable dt = GetYourDataTable();
dt.Columns.Add(new DataColumn("imagepath", typeof(string)));
dt.Columns.Add(new DataColumn("image", typeof(System.Byte[])));             
ds.Tables.Add(dt);

そして、次のものを入力します。

using (FileStream fs = new FileStream(szFilePath, FileMode.Open))
{
    using (BinaryReader br = new BinaryReader(fs))
    {
          foreach (DataRow dr in _dtReportData.Rows)
          {
               dr["imagepath"] = szFilePath;
               dr["image"] = br.ReadBytes((int)br.BaseStream.Length);
          }
    }
}

すべての行を設定するのは冗長であることはわかっていますが、それは機能し、オブジェクトを Blob としてレポートに追加するだけです。

あなたにとっての大きな利点は、画像の場所が任意であることです..レポートのレンダリング時ではなく、データの取得時にのみ知る必要があります。

于 2013-11-14T16:01:42.963 に答える