2010-07-06 3 views
8

Я использую PDFsharp в приложении ASP.NET MVC. Я хочу добавить изображение, но независимо от того, какой каталог я его вставляю, он, похоже, не может его найти. У меня есть такой код, как я пытаюсь скопировать образец приложение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 librairies загружаются в удаленные каталоги, например C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ 34f2a404 \ 3b92b98b \ assembly \ dl3 \ f8107a2b \ 16f99150_1bfcce01 -> Идея Server.MapPath отличная: она будет работать как в среде отладки, так и в выпуске. –

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

+0

Команда - я до сих пор не могу заставить это работать. , знаете ли вы, если кто-то успешно это сделал? – leora

+0

Мы использовали его только без MVC. Но вот «исповедь»: http://forum.pdfsharp.net/viewtopic.php?p=3833#p3833 –

3

Объект документа MigraDoc имеет свойство ImagePath, которое позволяет указать каталоги, которые будут искать изображения (отдельные несколько каталогов с помощью semikola).

Если изображения можно найти относительно местоположения сборки, то Assembly.CodeBase можно использовать для поиска сборки (как упоминалось в моем предыдущем ответе).

1

Старая нить, но может пригодиться для кого-то

Это работает для меня:

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

Затем я установил свой имидж, чтобы скопировать всегда и добавить его с его относительным путем по каталогу бен в моем Web проект.

+0

Это ПОЛНОСТЬЮ работало для меня !! Вы спасатель жизни! Спасибо – user4566715

+0

Мне нужно добавить, что это отлично работает для веб-проектов! – user4566715

Смежные вопросы