У меня есть требование проекта для рендеринга HTML и захвата рендеринга изображения в виде файла на головном сервере CentOS 5.4. Мои конкретные требования:
1) На входе будет отображаться URL-адрес страницы для отображения (или file: // URL-адрес локального HTML-файла), на выходе будет файл изображения, содержащий отображаемое изображение страницы
2) CSS должен поддерживаться средством визуализации до уровня CSS-1
3) Статические изображения на странице должны правильно отображаться в отображаемом изображении, включая любой прозрачный цвет в файлах .GIF или .PNG
4) Должен быть в состоянии работать на головном сервере CentOS 5.4.
5) Решение не должно зависеть от какого-либо продукта или компонента, который не является бесплатным для коммерческого использования
Мне не нужно ничего делать со страницей, кроме как сделать снимок экрана и сохранить его в изображение. Трудная часть, кажется, делает это в безголовой среде. Некоторые из рассмотренных мною решений нуждаются в дисплее для работы.
Есть предложения?
Заранее спасибо,
Jim
РЕШЕНИЕ:
В итоге я использовал библиотеку Standard Widget Toolkit (www.eclipse.org/swt) для встроенных возможностей браузера. Это позволило мне программно открыть окно с браузерным элементом управления, визуализировать страницу, а затем записать содержимое окна в файл изображения (обычно PNG). Единственный недостаток этого подхода, которого нельзя избежать, - это «мерцание», когда окно нужно сделать на мгновение видимым, чтобы сделать снимок экрана. Я могу жить с этим. Остальное было просто кодом для инициализации объектов SWT, которые получают системные ресурсы, слушателем для проверки успешного завершения загрузки страницы и некоторым кодом для очистки зависшего соединения (когда загрузка страницы никогда не завершается по какой-либо причине).
У меня есть напарник по команде с xvfb (виртуальный фреймбуфер X) в CentOS Linux. Начальные тесты, похоже, работают, так что, похоже, совет от автора ниже (который сказал попробовать xvfb) может быть жизнеспособным решением для безголовой серверной части моей проблемы.