2010-07-06 18 views
8

Sto utilizzando PDFsharp in un'applicazione ASP.NET MVC. Voglio aggiungere un'immagine ma non importa in quale directory l'ho inserita, non riesco a trovarla. Ho codice come questo, come sto cercando di copiare l'applicazione di esempioPDFsharp non riesce a trovare l'immagine (immagine non trovata)

Section section = document.AddSection(); 
Image image13 = section.AddImage("../../images/logo.png"); 

Non importa quale directory ho messo questa immagine nei, quando il PDF viene generato, vedo un errore sul PDF dicendo "Image not found "

Qualcun altro ha visto questo problema?

risposta

9

Potrebbe essere alla ricerca di un percorso completo?

Prova

Image image13 = section.AddImage(Server.MapPath("~/images/logo.png")); 
+1

Ho avuto lo stesso problema. Il problema è che quando si esegue il debug di un mvc asp.net, le librairie vengono caricate in directory remote, come C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ File ASP.NET temporanei \ root \ 34f2a404 \ 3b92b98b \ assembly \ dl3 \ f8107a2b \ 16f99150_1bfcce01 -> l'idea di Server.MapPath è ottima: funzionerà sia con gli ambienti di debug che di rilascio. –

4

sto usando PDFsharp in un'applicazione mvc asp.net.

BTW: Non si utilizza PDFsharp, si sta utilizzando MigraDoc.

MigraDoc cerca le immagini relative alla directory corrente. Le pagine ASPX sono compilate e vengono eseguite da una directory temporanea, non dalla directory del progetto. Pertanto i percorsi relativi non funzioneranno come previsto.

Assembly.CodeBase può aiutare a localizzare le immagini; Assembly.Location indica la directory temporanea.

Assembly.CodeBase può essere utilizzato nel codice condiviso tra ASP.NET e .NET. Si può utilizzare anche Server.MapPath (come suggerito da Marko), ma funziona solo in ASP.NET.

+2

Perché è stato votato? – Marko

+0

Team: non riesco ancora a farlo funzionare. . sai se qualcuno lo ha fatto con successo? – leora

+0

L'abbiamo usato finora senza MVC. Ma ecco una "confessione": http://forum.pdfsharp.net/viewtopic.php?p=3833#p3833 –

3

L'oggetto Document di MigraDoc ha una proprietà ImagePath che consente di specificare le directory in cui verranno cercate le immagini (separare più directory con semikola).

Se è possibile trovare le immagini relative alla posizione dell'assieme, è possibile utilizzare Assembly.CodeBase per individuare l'assieme (come indicato nella mia risposta precedente).

1

thread vecchio, ma potrebbe rivelarsi utile per qualcuno

Questo ha funzionato per me:

Document doc = new Document(); 
doc.ImagePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).Replace("file:\\", ""); 

Poi ho impostato la mia immagine per copiare sempre e ha aggiunto che con il suo percorso relativo dalla directory bin nella mia Web progetto.

+0

Questo ha funzionato COMPLETAMENTE per me !! Sei un risparmiatore di vita !!! Grazie – user4566715

+0

Ho bisogno di aggiungere che questo funziona benissimo per i progetti di webform! – user4566715