Pergunta

Tenho um requisito de projeto para renderizar HTML e capturar a imagem renderizada como um arquivo em um servidor CentOS 5.4 sem cabeça. Meus requisitos específicos são:

1) A entrada será um URL para a página para renderizar (ou arquivo: // URL para um arquivo HTML local), a saída será um arquivo de imagem que contém a imagem renderizada da página
2) CSS deve ser apoiado pelo renderizador até CSS Nível 1
3) Imagens estáticas na página devem ser exibidas corretamente na imagem renderizada, incluindo qualquer cor transparente nos arquivos .gif ou .png
4) Deve ser capaz de ser executado em um servidor CentOS 5.4 sem cabeça.
5) A solução não deve depender de nenhum produto ou componente que não seja gratuito para uso comercial

Não preciso fazer nada com a página além de obter a captura de tela e salvá -la em uma imagem. A parte difícil parece estar fazendo isso em um ambiente sem cabeça. Algumas das soluções que eu vi discutidas precisam de uma exibição para funcionar.

Alguma sugestão?

Obrigado antecipadamente, Jim

Solução: acabei usando a biblioteca padrão do Widget Toolkit (www.eclipse.org/swt) para seus recursos de navegador incorporado. Isso me permitiu abrir uma janela programaticamente com um controle do navegador, renderizar a página e capturar o conteúdo da janela para um arquivo de imagem (geralmente um PNG). A única desvantagem dessa abordagem que não pode ser evitada é um "cintilão" quando a janela deve ser visível por um momento para fazer a captura da tela. Eu posso viver com isso. O restante foi apenas um código para inicializar os objetos SWT que obtêm recursos do sistema, um ouvinte para verificar uma conclusão bem -sucedida da carga da página e algum código para limpar uma conexão pendurada (quando o carregamento da página nunca for concluído por qualquer motivo).

Consegui um companheiro de equipe para brincar com XVFB (X Virtual Framebuffer) no CentOS Linux. Os testes iniciais parecem funcionar, por isso parece que os conselhos do pôster abaixo (que disseram para experimentar o XVFB) podem ser uma solução viável para a parte do servidor sem cabeça do meu problema.

Foi útil?

Solução

Você pode iniciar um ambiente virtual de Windows usando o XVFB. Agora você pode iniciar um navegador regular para renderizar a página e usar um utilitário de screencapture para capturar o conteúdo da janela. Não é bonito, mas se destaca de fazer.

O Webkit é de código aberto e incorporável, talvez você possa usá-lo em um pequeno aplicativo nativo para renderizar em uma tela e salvá-lo no disco?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top