Добавить изображение встроенного ресурса в документ MigraDoc

Я хотел бы добавить изображение в заголовок документа MigraDoc, но жесткая кодировка пути файловой системы в генерации документа немного проблематична по ряду вопросов, не в последнюю очередь из-за того, что это делает меня немного тошнотворным, но также, чтобы упростить развертывание (r).

Казалось бы, мне идеально, если бы я мог вставлять изображение в качестве ресурса в сборку и просто извлекать его, когда это было необходимо для PDF файла, но, похоже, нет простого или встроенного способа сделай это. Любые трюки или идеи?

Ответ 1

Нет, MigraDoc не допускает этого. Существует хак, но он работает, только если вы используете ASP.NET, и вы не используете предварительный просмотр документа. Смотрите эти темы на официальном форуме, которые подробно объясняют проблему:

Вы можете использовать встроенные ресурсы с помощью обходного пути, то есть сохранять их временно и удалять их с помощью метода dispose и деструктора после того, как вы закончите. Пример:

BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri("pack://application:,,/Resources/temp.png");
bi.EndInit();
PngBitmapEncoder pbe = new PngBitmapEncoder();
pbe.Frames.Add(BitmapFrame.Create(bi));
using (FileStream fs = new FileStream("temp.png", FileMode.Create))
{
    pbe.Save(fs);
}

Затем вы можете использовать его с помощью MigraDocObject.AddImage("temp.png");. Но обязательно удалите изображение или добавьте проверку, если изображение уже существует, и если он имеет правильный размер файла (в случае его замены пользователем).

Ответ 2

PDFSharp/MigraDoc 1.50 включает в себя другой способ сделать это. Из MigraDoc wiki:

С помощью PDFsharp 1.50 beta 2 была добавлена ​​новая функция: MigraDoc теперь принимает имена файлов, которые содержат BASE64-кодированные изображения с префиксом "base64:". В этом случае имя файла не относится к файлу, имя файла содержит все биты растрового изображения в строке ASCII с кодировкой BASE64.