2010-12-14 8 views
6

Comment puis-je convertir facilement html à l'image et à tableau d'octets sans le créerconvertir html à l'image dans le tableau d'octets java

grâce

+1

Comme un « screeenshot » d'une page html rendu? –

+0

non, je crée html et j'ai besoin de l'envoyer par fax avec image sans source d'image, donc je veux le convertir en image, puis envoyer l'image – cls

Répondre

0

Ceci est non négligeable, car le rendu d'une page HTML peut être assez complexe: vous avoir du texte, des images, CSS, peut-être même JavaScript pour évaluer.

Je ne connais pas la réponse, mais j'ai quelque chose qui pourrait vous aider: code pour iText (écrire une bibliothèque PDF) pour convertir une page HTML dans un fichier 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

je dois l'enregistrer en tableau byte, sans pour le créer. Merci – cls

12

Si vous n'avez pas html complexe, vous pouvez le rendre en utilisant un JLabel normal. Le code ci-dessous produira cette image:

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

    .... 
} 

Si vous voulez simplement écrire dans un fichier:

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

je ne ai pas besoin de le créer uniquement pour enregistrer en tant que tableau d'octets – cls

+0

Vous devez passer par quelque chose comme un 'ImageIO.write'. Vous ne pouvez pas construire magiquement le tableau d'octets sans avoir d'abord l'image. – aioobe

+0

@cls Quel est le format si le tableau d'octets ont? – dacwe

3

Qu'en est-il en utilisant une mémoire ByteArrayStream au lieu d'un FileOutputStream dans le code ci-dessus? Ce serait un tableau d'octets, au moins ...

Questions connexes