2009-08-12 104 views
7

我使用ASP.NET自帶的Microsoft ReportViewer,並有一個報告參數應該設置報告中圖像的值(路徑)。我現在提供的路徑是一個完整的URL,從http://開始,但也嘗試過將它作爲應用相對路徑,站點根路徑等,由於某些原因,圖像始終顯示爲紅色X它輸出到PDF。我只是在代碼中創建一個控件實例,設置屬性並直接導出到響應流,以便下載。ASP.NET rdlc與外部圖像不顯示PDF中的圖像

我只是不確定問題可能與圖像沒有顯示出來,所以如果任何人有任何想法,請讓我知道。

更新1

我已經決定,我可以用一個URL嵌入圖像,如果它是我的公共Web服務器上,但是當我在本地主機的圖像快到不會嵌入。我已經爲localhost證實,如果我將相同的URL粘貼到我的瀏覽器中,圖像將打開正常。據我所知,我沒有代理。所以我可以解決我的問題,但我仍然不明白本地問題是什麼。

更新2

忘了提,當URL的圖像從瀏覽器中打開它工作正常。

回答

13

這是不可能的PDF包含的參考外部圖像(至少從我的理解)。爲了使圖像出現在PDF中,它必須嵌入到文檔中。因此,要使用外部圖像,應用程序必須檢索圖像並將其存儲在文檔中。報告查看器將嘗試爲您執行此操作。

兩個可能的答案:

首先,爲了讓您的應用程序打包圖像到PDF,它必須能夠檢索您指定的URL的形象。如果該URL位於代理之後(從應用程序服務器的角度來看)和/或需要憑據訪問,則這會對報告查看器的默認配置帶來挑戰。

如果代理服務器出現問題,請查看您的web.config中的設置,您可以在下面添加它。您可能還需要提供網絡憑據,以便您的應用可以向代理進行身份驗證。有很多方法可以解決這個問題,但最簡單的方法之一就是將您的應用程序作爲您的域中的服務帳戶運行,並有權通過您的代理服務器。您可以通過臨時運行該網站來測試此功能(應該是臨時性的,因爲這是一種可怕的安全措施)。

您正在使用的圖像可能需要憑據才能訪問(嘗試使用空的cookie提取Firefox中的圖像並驗證是否需要憑據來訪問它)。如果它需要Windows身份驗證,則代理安全性的相同解決方案可能適用於遠程映像上所需的身份驗證。如果需要其他形式的身份驗證,則最好下載並將圖像嵌入到項目中。

也可以在代碼中使用其他方式下載圖像,並將其轉換爲字節數組以包含在報告中。網上有很多這樣的例子,包括Stack Overflow here

,看看下面的頁面:

http://msdn.microsoft.com/en-us/library/ms251715%28VS.80%29.aspx

在 的ReportViewer報告使用外部圖像不被 默認啓用。要使用外部圖像,您必須在您的代碼中設置EnableExternalImages 屬性。根據 您的網絡配置,您可能需要跳過代理設置 以允許外部圖像出現。 您可以將以下設置添加到 Web.config文件以繞過 本地代理。當修改您的 Web.config文件,一定要指定 那是你的網絡中使用 代理服務器的名稱:

<system.net> 
<defaultProxy> 
<proxy usesystemdefault = "false" bypassonlocal = "true" proxyaddress = "http://<proxyservername>:80/" /> 
<defaultProxy> 
</system.net> 

希望的一個或兩個的這些幫助。

傑裏

+0

我忘記提及如果您的映像位於本地應用程序中並且您使用Windows身份驗證,則可能會遇到Windows身份驗證本地失敗的常見問題: http://support.microsoft.com/kb/896861 您還應該在您的服務器上登錄事件日誌以瞭解任何類型的錯誤或身份驗證失敗情況,以幫助您診斷此問題。 Jerry – 2009-08-15 21:13:04

+0

您在本地網站上進行了哪種身份驗證?按照我的建議,你是在IE中提取圖像還是用Firefox測試?你的事件日誌中是否有任何相關的錯誤? – 2009-08-17 23:58:44

+0

我想我提到的圖像在瀏覽器中顯示得很好。另外,生成報告時事件日誌中沒有任何內容。我很感謝你的建議,但他們似乎都沒有解決問題。我同意可能會檢索到圖像並將其轉換爲字節數組來顯示,但我更願意避免這種情況,因爲這只是本地的問題而不是實際使用。 – 2009-08-19 16:23:36

0
  1. 報表查看器是否可以從相對網址獲取圖片?我從來沒有用過它,所以最好檢查一下這個假設。
  2. 您是否嘗試過使用Html.Content()助手來設置URL?每當我的網址遇到問題時,我都沒有使用它來爲視圖生成正確的網址。
+0

使用http的網址://絕對是正確的,使用相對URL似乎沒有被髮揮作用,沒有事關它的相關性。 – 2009-08-12 22:31:16

0

我不認爲Adobe Reader(或者PDF規範本身?)允許爲安全目的加載外部內容。我隱約記得有一個類似的問題,與報告服務無關(我動態生成PDF並使用變量標識並且必須嵌入它們)。

0

你試過一個普通的文件路徑(c:/temp/somefile.bmp)嗎?報告服務本地報告從磁盤讀取文件並將其嵌入到生成的pdf文件中。確保IIS中應用程序池的標識具有圖像文件的讀取權限。

我們正在這樣做,我們的圖像被放置在網站下的img文件夾中,以及其餘的網站圖像。我們避免使用Server.MapPath(相對路徑)對路徑進行硬編碼。

希望這有助於

2

當通過外部圖像的文件名的ReportViewer參數,通過這樣的格式:文件:// C:\應用\圖像\ pic.jpg。其他任何情況通常在部署時無法正常工作。

+1

你有我的問題的答案,男人。很簡單。 – celerno 2013-08-30 11:29:08

+1

這應該是被接受的答案! – 2016-11-11 11:38:01

1

好的,所以這是我們的解決方案。 Web服務器無法將自己的合格DNS名稱識別爲URL,因此我們必須編輯C:\ Windows \ System32 \ drivers \ etc文件夾中的主機文件,並將主機名添加爲localhost。我們添加到該文件的路線是:

ourserver.ourdomain.com 127.0.0.1