2010-07-06 8 views
8

J'utilise PDFsharp dans une application ASP.NET MVC. Je veux ajouter une image mais peu importe le répertoire dans lequel je l'ai mis, il ne semble pas pouvoir le trouver. J'ai le code comme ceci que je suis en train de copier l'exemple d'applicationPDFsharp ne trouve pas d'image (image non trouvée)

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

Peu importe ce répertoire que je mets cette image dans, lorsque le PDF est généré, je vois une erreur sur le PDF disant "Image not found "

Quelqu'un d'autre a-t-il déjà vu ce problème?

Répondre

9

Il est peut-être à la recherche d'un chemin d'accès complet?

Essayez

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

J'ai eu le même problème. Le problème est que lors du débogage d'un mvc asp.net, les librairies sont chargées dans des répertoires distants, comme C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Fichiers ASP.NET temporaires \ root \ 34f2a404 \ 3b92b98b \ assembly \ dl3 \ f8107a2b \ 16f99150_1bfcce01 -> L'idée de Server.MapPath est géniale: elle fonctionnera dans les environnements de débogage et de publication. –

4

J'utilise PdfSharp dans une application mvc asp.net.

BTW: Vous n'utilisez pas PDFsharp, vous utilisez MigraDoc.

MigraDoc recherche les images relatives au répertoire en cours. Les pages ASPX sont compilées et exécutées à partir d'un répertoire temporaire et non du répertoire du projet. Par conséquent, les chemins relatifs ne fonctionneront pas comme prévu.

Assembly.CodeBase peut aider à localiser les images; Assembly.Location indique le répertoire temporaire. Assembly.CodeBase peut être utilisé dans du code partagé entre ASP.NET et .NET. Server.MapPath peut également être utilisé (comme suggéré par Marko), mais il ne fonctionne que dans ASP.NET.

+2

Pourquoi cela a-t-il été rejeté? – Marko

+0

Team - Je n'arrive toujours pas à faire fonctionner ça. . Savez-vous si quelqu'un a fait cela avec succès? – leora

+0

Nous l'avons seulement utilisé sans MVC jusqu'ici. Mais voici une "confession": http://forum.pdfsharp.net/viewtopic.php?p=3833#p3833 –

3

L'objet Document MigraDoc a une propriété ImagePath qui vous permet de spécifier les répertoires qui seront recherchés pour les images (séparer plusieurs répertoires avec semikola).

Si des images peuvent être trouvées par rapport à l'emplacement de l'assemblage, alors Assembly.CodeBase peut être utilisé pour localiser l'assemblage (comme mentionné dans ma réponse précédente).

1

fil vieux, mais peut-être utile pour quelqu'un

Cela a fonctionné pour moi:

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

je puis mis mon image à copier et toujours ajouté avec son chemin relatif par répertoire bin dans mon Web projet.

+0

Cela TOTALEMENT travaillé pour moi !! Tu es un sauveur!!! Merci – user4566715

+0

Je dois ajouter que cela fonctionne très bien pour les projets webform! – user4566715