2010-12-14 4 views
6

Как я могу легко конвертировать HTML в изображения, а затем массив байтов без его созданияконвертировать HTML в изображения в байтовый массив Java

благодаря

+1

Как «screeenshot» на странице рендеринга html? –

+0

Нет, я создаю html, и мне нужно отправить его по факсу с изображением без источника изображения, поэтому я хочу преобразовать его в изображение, а затем отправить изображение – cls

ответ

0

Это нетривиальная, поскольку рендеринга HTML страницы может быть довольно сложным: вы есть текст, изображения, CSS, возможно, даже JavaScript для оценки.

Я не знаю ответа, но у меня есть что-то, что может вам помочь: код для iText (библиотека записи PDF) для преобразования HTML-страницы в файл PDF.

public static final void convert(final File xhtmlFile, final File pdfFile) throws IOException, DocumentException 
{ 
    final String xhtmlUrl = xhtmlFile.toURI().toURL().toString(); 
    final OutputStream reportPdfStream = new FileOutputStream(pdfFile); 
    final ITextRenderer renderer = new ITextRenderer(); 
    renderer.setDocument(xhtmlUrl); 
    renderer.layout(); 
    renderer.createPDF(reportPdfStream); 
    reportPdfStream.close(); 
} 
+1

Мне нужно сохранить его в массиве байтов, не создавая его. Спасибо – cls

12

Если у вас нет какой-либо сложной HTML вы можете сделать это с помощью обычного JLabel. Приведенный ниже код будет производить это изображение:

<html> 
    <h1>:)</h1> 
    Hello World!<br> 
    <img src="http://img0.gmodules.com/ig/images/igoogle_logo_sm.png"> 
</html> 

alt text

public static void main(String... args) throws IOException { 

    String html = "<html>" + 
      "<h1>:)</h1>" + 
      "Hello World!<br>" + 
      "<img src=\"http://img0.gmodules.com/ig/images/igoogle_logo_sm.png\">" + 
      "</html>"; 

    JLabel label = new JLabel(html); 
    label.setSize(200, 120); 

    BufferedImage image = new BufferedImage(
      label.getWidth(), label.getHeight(), 
      BufferedImage.TYPE_INT_ARGB); 

    { 
     // paint the html to an image 
     Graphics g = image.getGraphics(); 
     g.setColor(Color.BLACK); 
     label.paint(g); 
     g.dispose(); 
    } 

    // get the byte array of the image (as jpeg) 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageIO.write(image, "jpg", baos); 
    byte[] bytes = baos.toByteArray(); 

    .... 
} 

Если вы хотели бы просто написать его в файл:

ImageIO.write(image, "png", new File("test.png")); 
+0

Мне не нужно создавать его только для сохранения его в качестве байтового массива – cls

+0

Вам нужно пройти что-то вроде 'ImageIO.write'. Вы не можете магически построить массив байтов без первого изображения. – aioobe

+0

@cls Какой формат должен иметь массив байтов? – dacwe

3

Что об использовании памяти ByteArrayStream вместо FileOutputStream в приведенном выше коде? Это будет байтовый массив, по крайней мере ...