Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > HTML как картинка


Автор: AntonSaburov 5.7.2006, 17:49
Появилась еще одна занятная задачка - показать HTML в виде картинки. Например, чтобы текст не скопировать было. Или вставить изображение в файл. Такое изображение конечно не должно быть большое, но тем не менее.

Эта тема сильно связана с более ранней темой http://vingrad.ru/JAVA-JAV-003047

Сначала код, а потом несколько комментариев

Код

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;

import javax.swing.*;
import javax.imageio.*;


public class testIm
{
  public JLabel lbl = new JLabel();
  public int w = 0;
  public int h = 0;

  public void saveFile()
  {
    try {
      BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
      Graphics g = bi.getGraphics();                  
      g.setColor(Color.WHITE);
      g.fillRect(0,0,w,h);
      JLabel l = new JLabel();
      l.setBounds(0,0,w,h);
      l.setText(lbl.getText());
      l.paint(g);

      FileOutputStream os1 = new FileOutputStream("test.png");
      ImageIO.write(bi, "png", os1);
      os1.close();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    StringBuffer sb = new StringBuffer();
    for(int i=0; i<50; i++) {
      sb.append("  SOME TEXT SOME TEXT SOME TEXT  <BR>");
    }
    testIm t = new testIm();
    t.lbl.setText("<HTML><BODY>"+sb.toString()+"<BODY></HTML>");
    Dimension d = t.lbl.getPreferredSize();
    t.w = d.width;
    t.h = d.height;
    System.out.println("h="+t.w+", h="+t.h);
    t.saveFile();
  }

}


Тут важно отметить вот какой момент - сначала создается объект JLabel и ему устанавливается HTML-текст. После этого получают предпочтительные размеры (через getPreferredSize) и после этого создается новый обхект класса JLabel и ему задаются размеры через setBounds.
А дальше все как в ранее указанной теме. В итоге получится файл, который точно соответствует по размеру HTML разметке.

Вы можете увеличить/уменьшить/видоизменить HTML-текст, который создается в примере и посмотреть, как все будет. 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)