Barcelonista Naser Ответов: 2

Можно ли скрыть представление (HTML) в изображение с помощью ASP.NET MVC?


У меня есть требование, когда я хочу преобразовать весь вид, содержащий элементы HTML и CSS, в изображение, а затем передать его пользователям. Мне просто интересно, есть ли какая-нибудь встроенная библиотека в C# для создания изображений из представления на лету?
Пожалуйста, не предлагайте мне сторонние инструменты.

Что я уже пробовал:

Я заблудился и не знаю, с чего начать.

2 Ответов

Рейтинг:
2

eddieangel

Вы могли бы просто сделать снимок экрана и соответствующим образом настроить размер изображения? Я нашел это решение в Google с небольшим поиском.

Rectangle bounds = Screen.GetBounds(Point.Empty);
using(Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
    using(Graphics g = Graphics.FromImage(bitmap))
    {
         g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
    }
    bitmap.Save("test.jpg", ImageFormat.Jpeg);
}


Barcelonista Naser

Я не хочу визуализировать представление пользователю, я просто хочу сгенерировать изображение из html, которое никогда не будет визуализировано.

eddieangel

Хорошо. В этот момент ваши возможности определенно ограничены. Как только вы перестанете полагаться на браузер для визуализации вашего HTML-кода, вам придется найти другой движок. Как сказал Ричард выше, если вы не хотите полагаться на сторонний элемент управления, вам придется заново изобрести колесо и заставить его визуализироваться в вашем коде, а затем преобразовать в bmp.

Рейтинг:
19

Richard Deeming

Единственным встроенным вариантом было бы использовать WebBrowser управление в новом потоке, как описано в этот ответ StackOverflow[^]. Однако, это, вероятно, не будет работать очень хорошо в ASP.NET сайт.

Почему вы так противитесь сторонним инструментам? Например, HTML-рендерер[^] похоже, что он будет делать именно то, что вам нужно, и свободен в использовании. Лицензия[^] тоже выглядит довольно расслабленным.


Barcelonista Naser

Как я могу настроить его для работы с asp.net mvc? Работает ли он с asp.net mvc?

Barcelonista Naser

Нет никакого примера на asp.net mvc

Richard Deeming

Этот пример[^] показывает, как сгенерировать изображение из HTML.

Этот пост в блоге[^] показывает, как визуализировать представление MVC в строку.

Barcelonista Naser

Я не могу разрешить HtmlRender, хотя я установил ядро HTML-рендера с помощью nuget. в чем проблема?

Richard Deeming

Похоже, вам нужно добавить либо HtmlRenderer.WinForms или HtmlRenderer.WPF пакет для доступа к этому классу.

Barcelonista Naser

Спасибо за Ваш быстрый ответ, решил его с добавлением пакета winforms nuget. Последний вопрос. Могу ли я передать имя представления вместо раздела html или я должен передать html в нем непосредственно, как здесь.
Image image = HtmlRender.RenderToImage ("имя представления MVC")

Richard Deeming

Нет, потому что библиотека HTML-рендерера ничего об этом не знает. ASP.NET или MVC. Вам нужно будет визуализировать представление в виде строки, как показано в блоге Рика Страла, а затем передать его в RenderToImage метод.

Barcelonista Naser

Если я визуализирую представление в строку, останется ли тогда внешний вид и ощущения прежними? Извините, что я слишком загружаю вас вопросами, но мне нужно это знать.

Richard Deeming

Я не знаю - я никогда не пользовался этим инструментом.

Я подозреваю, что это, вероятно, будет, но вы вероятно столкнетесь с проблемами со связанными таблицами стилей.

Barcelonista Naser

Спасибо за вашу помощь, я ценю это. Если у меня возникнут проблемы со связанными таблицами стилей, я буду использовать встроенный CSS. :)