2010-07-06 16 views
8

Używam PDFsharp w aplikacji ASP.NET MVC. Chcę dodać obraz, ale bez względu na to, w którym katalogu go umieszczę, nie może go znaleźć. Mam kodu takiego jak próbuję skopiować przykładową aplikacjęPDFsharp nie może znaleźć obrazu (obraz nie został znaleziony)

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

Nieważne co katalog umieścić obrazek w, kiedy PDF zostanie wygenerowany, widzę błąd w pliku PDF powiedzenie "Image not found "

Czy ktoś jeszcze widział ten problem?

Odpowiedz

9

Może to być szukanie pełnej ścieżki?

Spróbuj

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

Miałem ten sam problem. Problem polega na tym, że podczas debugowania mvc asp.net, librairies są ładowane do zdalnych katalogów, takich jak C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Tymczasowe pliki ASP.NET \ root \ 34f2a404 \ 3b92b98b \ assembly \ dl3 \ f8107a2b \ 16f99150_1bfcce01 -> idea Server.MapPath jest świetna: będzie działać zarówno w środowisku debugowania, jak i wydania. –

4

używam pdfsharp w ASP.NET MVC aplikacji.

BTW: Nie używasz PDFsharp, używasz MigraDoc.

MigraDoc przeszukuje obrazy względem bieżącego katalogu. Strony ASPX są kompilowane i wykonywane z katalogu tymczasowego, a nie z katalogu projektu. Dlatego ścieżki względne nie będą działać zgodnie z oczekiwaniami.

Assembly.CodeBase może pomóc zlokalizować obrazy; Assembly.Location wskazuje katalog tymczasowy.

Assembly.CodeBase może być używany w kodzie współdzielonym między ASP.NET i .NET. Server.MapPath może być również używany (zgodnie z sugestią Marko), ale działa tylko w ASP.NET.

+2

Dlaczego to zostało odrzucone? – Marko

+0

Zespół - nadal nie mogę tego zrobić. . czy wiesz, czy ktoś to zrobił? – leora

+0

Do tej pory używaliśmy go tylko bez MVC. Ale tutaj jest "spowiedź": http://forum.pdfsharp.net/viewtopic.php?p=3833#p3833 –

3

Obiekt Dokument MigraDoc ma właściwość ImagePath, która pozwala określić katalogi, w których będą wyszukiwane obrazy (oddzielić wiele katalogów za pomocą semikola).

Jeśli można znaleźć obrazy w odniesieniu do położenia zespołu, wówczas można użyć Assembly.CodeBase do zlokalizowania złożenia (jak wspomniano we wcześniejszej odpowiedzi).

1

stary wątek, ale może się przydać dla kogoś

Ten pracował dla mnie:

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

I następnie ustawić mój obraz skopiować zawsze i dodaje go z jego ścieżki względnej przez bin w mojej sieci projekt.

+0

To CAŁKOWITO pracowało dla mnie !! Jesteś oszczędzającym życie !!! Dzięki – user4566715

+0

Muszę dodać, że działa to doskonale dla projektów internetowych! – user4566715

Powiązane problemy