2010-12-14 25 views
6

Jak można łatwo przekonwertować html do obrazu, a następnie do tablicy bajtów bez utworzyćkonwertować html do obrazu w bajtowego Java array

dzięki

+1

Jak "przerywana" renderowana strona html? –

+0

nie, tworzę html i muszę wysłać go faksem ze zdjęciem bez źródła obrazu, więc chcę przekonwertować go na obraz, a następnie wysłać obraz – cls

Odpowiedz

0

To nietrywialna ponieważ renderowania strony HTML może być dość skomplikowane: ty mieć tekst, obrazy, CSS, być może nawet JavaScript do oceny.

Nie znam odpowiedzi, ale mam coś, co może ci pomóc: kod do iText (biblioteka pisania PDF), aby przekonwertować stronę HTML do pliku 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

muszę zapisać go w tablicy bajtów, bez tworzenia go. Dzięki – cls

12

Jeśli nie masz żadnej złożonej html można uczynić go przy użyciu normalnego JLabel. Poniższy kod będzie produkować ten obraz:

<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(); 

    .... 
} 

Jeśli chcesz po prostu zapisać go do pliku:

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

nie muszę tworzyć go tylko po to, aby zapisać go jako tablicę bajtów. – cls

+0

Musisz przejść coś w stylu 'ImageIO.write'. Nie możesz magicznie skonstruować tablicy bajtów bez wcześniejszego obrazu. – aioobe

+0

@cls Jaki format powinien mieć tablica bajtów? – dacwe

3

Co o użyciu pamięci ByteArrayStream zamiast FileOutputStream w powyższym kodzie? To byłaby tablica bajtów, przynajmniej ...