2010-12-14 49 views
6

Làm thế nào tôi có thể dễ dàng chuyển đổi html sang hình ảnh và sau đó đến mảng byte mà không tạo ra nóchuyển đổi html sang hình ảnh trong byte mảng java

nhờ

+1

Giống như một "screeenshot" của trang html được hiển thị? –

+0

không, tôi tạo html và tôi cần gửi nó qua fax với hình ảnh không có nguồn hình ảnh, vì vậy tôi muốn chuyển đổi nó thành hình ảnh và sau đó gửi hình ảnh – cls

Trả lời

0

Đây là không tầm thường vì render một trang HTML có thể khá phức tạp: bạn có văn bản, hình ảnh, CSS, thậm chí có thể JavaScript để đánh giá.

Tôi không biết câu trả lời, nhưng tôi có một thứ có thể giúp bạn: mã cho iText (thư viện viết PDF) để chuyển đổi trang HTML thành tệp 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

tôi cần lưu nó vào mảng byte, mà không cần tạo nó. Cảm ơn – cls

12

Nếu bạn không có bất kỳ html phức tạp nào, bạn có thể hiển thị nó bằng cách sử dụng bình thường JLabel. Đoạn mã dưới đây sẽ tạo ra hình ảnh này:

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

    .... 
} 

Nếu bạn muốn chỉ cần viết nó vào một tập tin:

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

tôi không cần phải tạo ra nó chỉ để lưu nó như là mảng byte – cls

+0

Bạn phải đi qua một cái gì đó giống như một 'ImageIO.write'. Bạn không thể xây dựng một cách kỳ diệu mảng byte mà không có hình ảnh đầu tiên. – aioobe

+0

@cls Mảng byte có định dạng nào? – dacwe

3

gì về việc sử dụng trong bộ nhớ ByteArrayStream thay vì một FileOutputStream trong đoạn code trên? Đó sẽ là một mảng byte, ít nhất ...

Các vấn đề liên quan