2010-07-06 7 views
8

Ich verwende PDFsharp in einer ASP.NET MVC-Anwendung. Ich möchte ein Bild hinzufügen, aber egal in welchem ​​Verzeichnis ich es einfüge, es scheint es nicht zu finden. Ich habe Code wie folgt wie ich versuche, die BeispielanwendungPDFsharp kann Bild nicht finden (Bild nicht gefunden)

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

Egal zu kopieren, was Verzeichnis ich dieses Bild setzte in, wenn die PDF generiert wird, sehe ich ein Fehler auf dem PDF sagen "Bild nicht gefunden "

Hat noch jemand dieses Problem gesehen?

Antwort

9

Es könnte nach einem vollständigen Pfad suchen?

Versuchen

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

Ich hatte das gleiche Problem. Das Problem ist, dass beim Debuggen eines asp.net mvc, librairies in fernen Verzeichnissen geladen werden, wie C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporäre ASP.NET-Dateien \ root \ 34f2a404 \ 3b92b98b \ assembly \ dl3 \ f8107a2b \ 16f99150_1bfcce01 -> Die Idee von Server.MapPath ist großartig: Sie funktioniert sowohl in Debug- als auch in Release-Umgebungen. –

4

i PDFsharp in einer asp.net Mvc-Anwendung verwenden.

BTW: Sie verwenden nicht PDFsharp, Sie verwenden MigraDoc.

MigraDoc durchsucht die Bilder relativ zum aktuellen Verzeichnis. ASPX-Seiten werden in ein temporäres Verzeichnis und nicht aus dem Projektverzeichnis kompiliert und ausgeführt. Daher funktionieren relative Pfade nicht wie erwartet.

Assembly.CodeBase hilft möglicherweise, die Bilder zu lokalisieren; Assembly.Location gibt das temporäre Verzeichnis an.

Assembly.CodeBase kann in Code verwendet werden, der von ASP.NET und .NET gemeinsam genutzt wird. Server.MapPath kann ebenfalls verwendet werden (wie von Marko vorgeschlagen), funktioniert jedoch nur in ASP.NET.

+2

Warum wurde das abgelehnt? – Marko

+0

Team - ich kann immer noch nicht funktionieren. . Weißt du, ob jemand das erfolgreich gemacht hat? – leora

+0

Wir haben es bisher nur ohne MVC benutzt. Aber hier ist ein "Geständnis": http://forum.pdfsharp.net/viewtopic.php?p=3833#p3833 –

3

Das MigraDoc Document-Objekt verfügt über eine ImagePath-Eigenschaft, mit der Sie die Verzeichnisse angeben können, die nach Bildern durchsucht werden (mehrere Verzeichnisse mit semikola trennen).

Wenn Bilder relativ zum Speicherort der Assembly gefunden werden können, kann Assembly.CodeBase verwendet werden, um die Assembly zu lokalisieren (wie in meiner früheren Antwort erwähnt).

1

alter Thread aber könnte ich als nützlich für jemanden

Das ist für mich gearbeitet:

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

ich mein Bild dann immer zu kopieren und hinzugefügt, um es mit seinem relativen Pfad von Verzeichnis ist in meinem Web Projekt.

+0

Das hat TOTAL für mich gearbeitet !! Du bist ein Lebensretter!!! Danke – user4566715

+0

Ich muss hinzufügen, dass dies gut für Webform-Projekte funktioniert! – user4566715