2009-08-12 19 views
7

Używam programu Report Viewer firmy Microsoft, który jest dostarczany z programem ASP.NET i ma parametr raportu, który powinien ustawiać wartość (ścieżkę) obrazu w moim raporcie. W tej chwili udostępniam ścieżkę jako pełny adres URL, zaczynając od http: //, ale wypróbowałem to również jako ścieżkę względną aplikacji, ścieżkę zrootowaną w witrynie itp., A z jakiegoś powodu obraz jest zawsze wyświetlany jako czerwony znak X, eksportuje do pliku PDF. Właśnie tworzę instancję kontroli w kodzie, ustawiając właściwości i eksportując bezpośrednio do strumienia odpowiedzi, aby działał jako pobieranie.ASP.NET rdlc z zewnętrznymi obrazami niewyświetlającymi obrazów w formacie PDF

Po prostu nie jestem pewien, jaki może być problem z wyświetlaniem obrazu, więc jeśli ktoś ma jakieś pomysły, proszę dać mi znać.

UPDATE 1

mam ustalone, że mogę umieścić obraz z URL, jeśli jest to w moim publicznym serwera WWW, ale gdy biegnę w localhost obrazu nie będzie osadzać. Potwierdziłem dla localhost, że jeśli wkleję ten sam adres URL do mojej przeglądarki, obraz otworzy się dobrze. O ile mi wiadomo, nie mam proxy. Więc mogę obejść mój problem, ale nadal nie rozumiem, jaki jest problem z localhost.

UPDATE 2

Zapomniałem wspomnieć, że gdy adres URL obrazu jest otwierany w przeglądarce działa dobrze.

Odpowiedz

13

nie jest to możliwe dla PDF zawierają odniesienie do obrazu zewnętrznego (przynajmniej z mojego zrozumienia). Aby obraz pojawił się w pliku PDF, musi być osadzony w dokumencie. Dlatego, aby użyć zewnętrznego obrazu, Twoja aplikacja musi pobrać obraz i zapisać go w dokumencie. Przeglądarka raportów spróbuje zrobić to za Ciebie.

dwie możliwe odpowiedzi:

Pierwsze, w celu aplikacji do Pakietu obraz do formatu PDF, to musi być w stanie pobrać obraz z adresu URL określasz. Jeśli adres URL znajduje się za serwerem proxy (z punktu widzenia serwera aplikacji) i/lub wymaga poświadczeń dostępu, spowoduje to wyzwanie z domyślną konfiguracją przeglądarki raportów.

Jeśli problem dotyczy serwera proxy, zapoznaj się z ustawieniami dostępnymi w pliku web.config, który możesz dodać poniżej. Może być również konieczne podanie poświadczeń sieciowych, aby aplikacja mogła uwierzytelnić się na serwerze proxy. Istnieje wiele sposobów rozwiązania tego problemu, ale jednym z najłatwiejszych jest uruchomienie aplikacji jako konta usługi w domenie, które ma prawa do przechodzenia przez serwer proxy. Możesz to sprawdzić, uruchamiając witrynę tymczasowo (powinna być tymczasowa, ponieważ jest to okropna praktyka bezpieczeństwa).

Używany obraz może wymagać poświadczeń dostępu (spróbuj wyciągnąć obraz w przeglądarce Firefox za pomocą pustych plików cookie i sprawdź, czy poświadczenia były wymagane, aby uzyskać do niego dostęp). Jeśli wymaga uwierzytelniania systemu Windows, to samo rozwiązanie do zabezpieczeń proxy może dotyczyć uwierzytelniania wymaganego na zdalnym obrazie. Jeśli wymaga innej formy uwierzytelniania, lepiej pobrać i osadzić obraz w swoim projekcie.

Możliwe jest również pobranie obrazu za pomocą innych środków w kodzie i przekształcenie go w tablicę bajtów w celu uwzględnienia w raporcie. Istnieje wiele przykładów tego w Internecie, w tym przepełnienie stosu here.

drugie, spojrzeć na następnej stronie:

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

Używanie obrazów zewnętrznych w raporcie ReportViewer nie jest włączona domyślnie. Aby użyć obrazu zewnętrznego, musisz ustawić właściwość EnableExternalImages w kodzie. W zależności od konfiguracji sieci, możesz również pominąć ustawienia proxy do , aby umożliwić wyświetlanie zewnętrznego obrazu. Możesz dodać następujące ustawienia do pliku Web.config, aby ominąć lokalny serwer proxy . Podczas modyfikacji pliku web.config , należy określić nazwę serwera proxy, który jest używane w sieci:

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

Nadzieja jeden lub oba z nich pomaga.

Jerry

+0

Zapomniałem wspomnieć, że jeśli obraz znajduje się w lokalnej aplikacji i korzystasz z uwierzytelniania systemu Windows, może pojawić się typowy problem polegający na tym, że uwierzytelnianie systemu Windows nie powiedzie się lokalnie: http://support.microsoft.com/kb/896861 Powinieneś również śledzić dziennik zdarzeń na swoim serwerze pod kątem jakiegokolwiek błędu lub niepowodzenia uwierzytelnienia, aby pomóc w diagnozie tego problemu. Jerry –

+0

Jaki rodzaj uwierzytelnienia posiadasz na swojej stronie? Czy podniosłeś obraz w IE lub przetestowałeś Firefoksa, tak jak sugerowałem? Czy masz jakieś istotne błędy w swoim dzienniku zdarzeń? –

+0

Myślę, że wspomniałem, że obraz pokazuje się dobrze w przeglądarce. Ponadto nie ma nic w dziennikach zdarzeń podczas generowania raportu. Doceniam Twoje sugestie, ale żaden z nich nie wydaje się rozwiązać problemu. Zgadzam się, że obraz mógłby zostać pobrany i przekonwertowany na tablicę bajtów, ale wolałbym tego uniknąć, ponieważ jest to problem występujący lokalnie, a nie na żywo. –

0
  1. Czy przeglądarka raportów może uzyskać obraz z odpowiedniego adresu URL? Nigdy go nie używałem, więc najlepiej sprawdzić to założenie.
  2. Czy próbowałeś użyć pomocnika Html.Content() do ustawienia adresu URL? Ilekroć mam problemy z moimi adresami URL, ponieważ nie użyłem tego do wygenerowania poprawnego adresu URL dla widoku.
+0

URL http: // jest zdecydowanie poprawna i przy użyciu względny adres URL nie wydaje się czynić różnicę, nie niezależnie od tego, do czego się odnosi. –

0

Nie sądzę, że Adobe Reader (a może sama specyfikacja PDF?) Umożliwia ładowanie zawartości zewnętrznej ze względów bezpieczeństwa. Niejasno pamiętam, że miałem podobny problem, który nie miał nic wspólnego z usługami raportowania (dynamicznie generowałem pliki PDF i używałem zmiennych logów i musiałem je osadzać).

0

Czy próbowałeś zwykłej ścieżki do pliku (c: /temp/somefile.bmp)? Raport lokalny raportów usług raportowych odczytuje plik z dysku i osadza go w wygenerowanym pliku pdf. Upewnij się, że tożsamość puli aplikacji w IIS ma uprawnienia do odczytu dla pliku obrazu.

Robimy to, a nasze obrazy są umieszczane w folderze img pod stroną internetową, razem z pozostałymi obrazami witryn internetowych. Unikamy twardego kodowania ścieżki za pomocą Server.MapPath (ścieżka względna).

Nadzieja to pomaga

2

Po przejściu zewnętrznych nazw plików obrazów do ReportViewer parametrów przejść format podobny do tego: file: // C: \ app \ images \ pic.jpg. Coś innego zwykle nie działa dobrze po wdrożeniu.

+1

Masz odpowiedź na mój problem, stary. Tak prosty. – celerno

+1

To powinna być zaakceptowana odpowiedź! –

1

OK, więc to było nasze rozwiązanie. Serwer sieciowy nie rozpoznał własnej kwalifikowanej nazwy DNS jako adresu URL, więc musieliśmy zmodyfikować plik Hosts w folderze C: \ Windows \ System32 \ drivers \ etc i dodać nazwę hosta jako localhost. Linia dodaliśmy do pliku brzmiała:

ourserver.ourdomain.com 127.0.0.1

Powiązane problemy