2010-07-06 73 views
8

我在ASP.NET MVC应用程序中使用PDFsharp。我想添加一张图片,但无论我放入什么目录,似乎都无法找到它。我有这样的代码,因为我试图复制示例应用程序PDFsharp找不到图像(图像未找到)

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

无论哪个目录,我把这个图像中,当被生成的PDF,我看到在PDF说:“错误没有找到图片

有其他人看过这个问题吗?

回答

9

它可能正在寻找一个完整的路径?

尝试

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

我有同样的问题。问题是,当调试asp.net mvc时,库管理器将加载到远程目录中,如C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ 34f2a404 \ 3b92b98b \ assembly \ dl3 \ f8107a2b \ 16f99150_1bfcce01 - > Server.MapPath的思想很棒:它可以在调试和发布环境中工作。 – 2013-12-18 18:06:34

4

我使用pdfsharp在asp.net MVC应用程序。

顺便说一句:你没有使用PDFsharp,你正在使用MigraDoc。

MigraDoc搜索相对于当前目录的图像。 ASPX页面被编译并从临时目录执行,而不是从项目目录执行。因此相对路径不能按预期工作。

Assembly.CodeBase可能有助于定位图像; Assembly.Location表示临时目录。

Assembly.CodeBase可用于ASP.NET和.NET之间共享的代码。 也可以使用Server.MapPath(如Marko所建议的),但它仅适用于ASP.NET。

+2

这是为什么被拒绝? – Marko 2010-07-06 21:07:07

+0

团队 - 我仍然无法得到这个工作。 。你知道有没有人成功做过这件事? – leora 2010-10-24 22:54:23

+0

到目前为止,我们只使用它没有MVC。 但这里有一个“忏悔”: http://forum.pdfsharp.net/viewtopic.php?p=3833#p3833 – 2010-10-25 07:44:11

3

MigraDoc Document对象具有ImagePath属性,该属性允许您指定将搜索图像的目录(使用semikola分隔多个目录)。

如果可以找到相对于程序集位置的图像,那么可以使用Assembly.CodeBase来定位程序集(如我之前的回答中所述)。

1

旧线程,但可能会派上用场的人

这为我工作:

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

然后我把我的形象总是复制,在我的网站,其相对路径添加它的bin目录项目。

+0

这完全适合我!你是一个拯救生命的人!谢谢 – user4566715 2016-08-26 20:06:32

+0

我需要补充的是,这对webform项目非常有用! – user4566715 2016-08-26 20:09:55