2013-11-14 196 views
1

我正在使用Crystal Reports生成報告定義* .rpt文件。我稍後使用我的應用程序中的這些定義文件創建報告。從報表位置構建Crystal Report中的圖像位置

我有一個名爲的徽標的特殊圖像,位於我的應用程序的文件目錄中。我想在我的水晶報告中引用此徽標。標誌總是位於幾個目錄,從我的報告,但根目錄和主機可安裝之間變化,所以文件結構看起來是這樣的:

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

或像這樣:

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

水晶是否有辦法在具有相對路徑的公式中引用此圖像? .rpt文件是否包含對它的文件位置的引用,我可以用它來構建這個圖像?

編輯: @ campagnolo_1提到Crystal有一個「文件路徑和名稱」特殊字段,但我沒有看到在圖像文件位置腳本中使用它的方法。

編輯2: @ campagnolo_1在他的回答的評論中提供了一個解決方案。謝謝campagnolo_1!

回答

3

Crystal有一個專門用於文件路徑和名稱的字段。您可以使用它來找出報告文件的位置,並在需要時提取路徑。然後你可以使用它來動態引用你的圖像文件。這裏有一個post以及一些分步說明。

+0

我沒有意識到Crystal有一個專門的領域,但我沒有看到任何方式將這些信息放到圖像對象的腳本中。我似乎無法從腳本界面引用特殊字段。 – Dragonsdoom

+1

我認爲這是你在報告中必須要做的事情。您必須爲其中只包含「FileName」的文件位置創建公式(fileLocation)。這將爲您提供報告的完整路徑。正如我引用的帖子所述,插入一張圖片。在格式編輯器的圖片選項卡中添加圖形位置的公式,如下所示:if left({@ fileLocation),「C:\」)> 0然後.....你明白我是什麼在? –

+0

我只是進一步調查,發現雖然我不能從字段資源管理器引用特殊字段,但我可以引用您在註釋中提到的內置FileName _function_。這將提供我需要的信息,以按照您的建議構建我的圖像的路徑。謝謝! – Dragonsdoom

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添加到報告中。

對你來說最大的好處是圖像位置是任意的..你只需要知道它在數據檢索時,而不是在報告渲染時。

+0

我很樂意接受這個答案,但我特別需要在rpt文件/水晶報表腳本的範圍內工作。 – Dragonsdoom

+1

我想它可能不是一個選項。感謝您跟進。我會在這裏爲了後代。 –