2009-08-12 16 views
7

Sto utilizzando Microsoft ReportViewer fornito con ASP.NET e ho un parametro di rapporto che dovrebbe essere impostato il valore (percorso) di un'immagine nel mio rapporto. In questo momento sto fornendo il percorso come URL completo, iniziando con http: // ma ho anche provato questo come percorso relativo all'app, percorso root del sito, ecc. E per qualche motivo l'immagine viene sempre visualizzata come X rossa quando esporta in PDF. Sto solo creando un'istanza di un controllo nel codice, impostando le proprietà ed esportando direttamente nel flusso di risposta in modo che agisca un download.ASP.NET rdlc con immagini esterne che non visualizzano immagini in PDF

Non sono sicuro di quale potrebbe essere il problema con l'immagine non visualizzata, quindi se qualcuno ha qualche idea per favore fatemelo sapere.

UPDATE 1

Ho deciso che è possibile incorporare l'immagine con un URL se è sul mio server web pubblico, ma quando sono in esecuzione in localhost l'immagine non verrà incorporare. Ho confermato per localhost che se incollo lo stesso URL nel mio browser l'immagine si aprirà bene. Per quanto ne so, non ho un proxy. Quindi posso aggirare il problema, ma continuo a non capire quale sia il problema con localhost.

UPDATE 2

dimenticato di dire che quando l'URL per l'immagine viene aperta da un browser funziona benissimo.

risposta

13

Non è possibile per un PDF per contenere un riferimento un'immagine esterna (almeno dalla mia comprensione). Affinché un'immagine possa apparire nel PDF, deve essere incorporata nel documento. Pertanto, per utilizzare un'immagine esterna, l'app deve recuperare l'immagine e memorizzarla nel documento. Il visualizzatore di report proverà a farlo per te.

due possibili risposte:

First, in modo che la vostra applicazione per confezionare l'immagine nel formato PDF, deve essere in grado di recuperare l'immagine dall'URL si specifica. Se quell'URL si trova dietro un proxy (dal punto di vista dell'app server) e/o richiede l'accesso alle credenziali, questo presenterà una sfida con la configurazione predefinita del visualizzatore di report.

Se il problema è un server proxy, vedere le impostazioni sul proprio web.config che è possibile aggiungere di seguito. Potrebbe inoltre essere necessario fornire credenziali di rete, in modo che l'app possa autenticarsi con il proxy. Ci sono molti modi per risolvere questo problema, ma uno dei più semplici è eseguire la tua applicazione come account di servizio sul tuo dominio che ha i diritti di attraversare il tuo proxy. Puoi verificarlo eseguendo il sito temporaneamente (dovrebbe essere temporaneo perché si tratta di una pratica di sicurezza orribile).

L'immagine che stai utilizzando potrebbe richiedere l'accesso delle credenziali (prova a tirare l'immagine in Firefox con i cookie vuoti e verifica se le credenziali erano necessarie per accedervi). Se richiede l'autenticazione di Windows, la stessa soluzione per la sicurezza del proxy può essere applicata all'autenticazione richiesta sull'immagine remota. Se richiede qualche altra forma di autenticazione, potrebbe essere meglio scaricare e incorporare l'immagine nel tuo progetto.

È anche possibile scaricare l'immagine utilizzando altri mezzi nel codice e convertirla in un array di byte per l'inclusione nel report. Ci sono molti esempi di questo sul web, tra cui Stack Overflow here.

In secondo luogo, date un'occhiata alla seguente pagina:

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

Utilizzando immagini esterne in un report ReportViewer non è attivata per impostazione predefinita . Per utilizzare un'immagine esterna, è necessario impostare la proprietà AbilitaExternalImages nel codice . A seconda della configurazione di rete, è possibile che sia inoltre necessario ignorare le impostazioni del proxy su consentire l'immagine esterna. È possibile aggiungere le seguenti impostazioni a il file Web.config per ignorare il proxy locale . Quando si modifica il file web.config , assicurarsi di specificare il nome del server proxy che è utilizzato nella rete:

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

Speranza uno o entrambi questi aiuti.

Jerry

+0

Ho dimenticato di dire che se l'immagine è nell'app locale e si utilizza l'autenticazione di Windows, è possibile che si verifichi un problema comune in cui l'autenticazione di Windows non riesce localmente: http://support.microsoft.com/kb/896861 È inoltre necessario eseguire il troll del registro eventi sul server per qualsiasi tipo di errore o errore di autenticazione per facilitare la diagnosi di questo problema. Jerry –

+0

Che tipo di autenticazione hai sul tuo sito locale? Hai sollevato l'immagine in IE o hai provato con Firefox come suggerivo? Hai errori rilevanti nel registro eventi? –

+0

Penso di aver menzionato l'immagine nel browser. Inoltre, non c'è nulla nei registri eventi quando si genera il report. Apprezzo i tuoi suggerimenti, ma nessuno di loro sembra risolvere il problema. Sono d'accordo sul fatto che l'immagine potrebbe essere recuperata e convertita in un array di byte da mostrare, ma preferirei evitare quella particolare, dato che questo è solo un problema localmente e non in uso live. –

0
  1. Il visualizzatore di report può ottenere un'immagine da un url relativo? Non l'ho mai usato, quindi è meglio controllare quell'ipotesi.
  2. Hai provato a utilizzare l'helper Html.Content() per impostare l'URL? Ogni volta che ho problemi con i miei URL è perché non ho usato questo per generare l'url corretto per la vista.
+0

L'URL con http: // è sicuramente corretto e utilizzando un URL relativo non sembra essere fare la differenza, no importa a cosa è relativo. –

0

Non penso che Adobe Reader (o forse la specifica PDF stessa?) Consenta il caricamento di contenuto esterno per motivi di sicurezza. Ricordo vagamente di avere un problema simile che non aveva nulla a che fare con i servizi di reporting (stavo generando dinamicamente PDF e usando loghi variabili e dovevo incorporarli).

0

Hai provato un percorso file regolare (c: /temp/somefile.bmp)? Report report dei servizi locali legge il file dal disco e lo incorpora nel file pdf prodotto. Assicurarsi che l'identità del pool di app in IIS abbia il permesso di lettura sul file immagine.

Lo stiamo facendo e le nostre immagini sono collocate in una cartella img sotto il sito web, insieme al resto delle immagini dei siti web. Evitiamo di codificare il percorso utilizzando Server.MapPath (percorso relativo).

Spero che questo aiuti

2

Quando si passa nomi dei file di immagine esterni al ReportViewer parametri, passare il formato in questo modo: file: // C: \ app \ immagini \ pic.jpg. Tutto il resto di solito non funziona bene quando schierato.

+1

Hai avuto la risposta al mio problema, amico. Cosi 'semplice. – celerno

+1

Questa dovrebbe essere la risposta accettata! –

1

Ok, questa era la nostra soluzione. Il server Web non ha riconosciuto il proprio nome DNS qualificato come URL, quindi è stato necessario modificare il file Hosts nella cartella C: \ Windows \ System32 \ drivers \ etc e aggiungere il nome host come localhost. La linea abbiamo aggiunto al file era:

ourserver.ourdomain.com 127.0.0.1

Problemi correlati