Визуализировать HTML как изображение

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

Есть ли что-нибудь, что делает это уже?

Это для веб-сайта ASP.NET 3.5 C#!

Заранее спасибо.

edit: было бы замечательно, если бы вывод мог быть основан на вводе HTML, так как купон был разработан с помощью манипулирования DOM с помощью jQuery и перетаскивания чего-либо, все работает отлично, это просто когда дело доходит до печати (на бумаге) у него есть проблемы с z-индексацией.

9 ответов

Решение

Что вы можете сделать, это создать страницу aspx, которая изменяет тип ответа в желаемом формате, а затем помещает изображение в поток. Я создал генератор штрих-кода, который делает подобное. Исключая все формальности генерации изображения, вы будете Page_Load выглядеть примерно так:

Bitmap FinalBitmap = new Bitmap();
MemoryStream msStream = new MemoryStream();

strInputParameter == Request.Params("MagicParm").ToString()

// Magic code goes here to generate your bitmap image.
FinalBitmap.Save(msStream, ImageFormat.Png);

Response.Clear();
Response.ContentType = "image/png";

msStream.WriteTo(Response.OutputStream);

if ((FinalBitmap != null)) FinalBitmap.Dispose();

и это все! Тогда все, что вам нужно сделать в своем изображении, это установить URL-адрес, похожий на RenderImage.aspx?MagicParm=WooHoo или что-то еще, что вам нужно. Таким образом, вы можете сделать так, чтобы все, что вы хотели указать.

Вы можете отобразить html в растровое изображение, используя элемент управления WebBrowser либо в winforms, либо в консольном приложении.

Пример этого можно найти здесь: http://www.wincustomize.com/articles.aspx?aid=136426&c=1

Приведенный выше пример можно изменить для запуска в ASP.Net, создав новый STAThread и выполнив на нем Application.Run, чтобы запустить новый цикл обработки сообщений.

Альтернатива PHP/Ruby


Если вы получили доступ к этому вопросу и действительно ищете средства, которые будут работать без Windows, вы можете попробовать библиотеку KHTML: http://wiki.goatpr0n.de/projects/khtmld

У веб-сайта есть смешное имя, которое я признаю, но я могу заверить вас, что оно подлинное. Другие связанные страницы: страница sourceforge http://khtml2png.sourceforge.net/

МАРКУП ТОЛЬКО АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ

Используйте SVG и XSLT, чтобы преобразовать HTML-данные в изображение, которое можно отобразить / сохранить / и т. Д.

Я признаю, что сначала было утомительно заставить это работать из-за всех координат, но оно того стоит, когда оно будет запущено.

Попробуйте PDFSharp... это не совсем "взять этот HTML и сделать PDF", но с небольшим количеством возни вы можете легко сделать PDF из информации, которую вы используете для создания HTML.

Просто настройте ваш CSS правильно, чтобы у вас был файл CSS, ориентированный на печатный носитель. Довольно легко гарантировать, что купон всегда будет разборчивым, не беспокоясь о том, имеют ли они изображения bg или нет. Игольчатое перемещение к изображению не имеет никакого смысла, если только по какой-то причине вы не хотите, чтобы оно было машиночитаемым.

Я сам не пробовал, но вы должны иметь возможность визуализировать HTML в изображение с помощью элемента управления WebBrowser и метода DrawToBitmap(), унаследованного от базового класса Control.

ОБНОВЛЕНИЕ: я попробовал это сам, и есть некоторые предостережения. Элемент управления WebBrowser, по-видимому, не отображает веб-страницу до тех пор, пока элемент управления не отобразится, поэтому WebBrowser должен находиться в форме, а форма должна отображаться для отображения HTML-кода и возникновения события DocumentCompleted.

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

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

Существует очень мощная библиотека для создания изображений под названием GD, которую я часто использую с PHP.

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

Другие вопросы по тегам