`
PrideSnow
  • 浏览: 242058 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

将HTML页面转成图片JPG

    博客分类:
  • XML
阅读更多

废话少说,直接进去正题:(也可以直接下载附件进行运行)

/**
 *
 */
package htmlToJpg;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.UUID;

import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.basic.BasicEditorPaneUI;

import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

//import com.cxsoft.rap.ed.util.ManualUtil;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class GraphUtils {

  private final static Log log = LogFactory.getLog(GraphUtils.class);

  public static int DEFAULT_IMAGE_WIDTH = 1024;

  //默认值最好设置大点,因为我们再导之前,不知道这个流有多大,如果过小,则生成的图片后面的为黑色,因为流没有读取完整
  public static int DEFAULT_IMAGE_HEIGHT = 10000;

  /**
   * 将BufferedImage转换为图片的信息
   *
   * @param image
   * @return
   */
  public static String toJpeg(BufferedImage image, String nsrlsh, String year) {
    // 获取图片文件的在服务器的路径
//     String imgPath = ManualUtil.getImgPath(nsrlsh, year);
//    String imageName = imgPath+UUID.randomUUID().toString() + ".jpg";
    String imageName = "E:\\"+UUID.randomUUID().toString() + ".jpg";
    System.out.println(imageName);
    try {
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);
      JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
      param.setQuality(1.0f, false);
      encoder.setJPEGEncodeParam(param);
      encoder.encode(image);
      byte[] buff = baos.toByteArray();
      baos.close();
      // 将字节流写入文件保存为图片
      FileUtils.writeByteArrayToFile(new File(imageName), buff);
      System.out.println("保存成功!....");
    } catch (Exception ex) {
      log.error("保存删除图片失败:" + ex.getMessage());
    }
    return imageName;
  }

  /**
   * html转换为jpeg文件
   *
   * @param bgColor
   *          图片的背景色
   * @param html
   *          html的文本信息
   * @param width
   *          显示图片的Text容器的宽度
   * @param height
   *          显示图片的Text容器的高度
   * @param eb
   *          設置容器的边框
   * @return
   * @throws Exception
   */
  private static ArrayList<String> html2jpeg(Color bgColor, String html, int width, int height, EmptyBorder eb,
      String nsrlsh, String year) throws Exception {
    ArrayList<String> ret = new ArrayList<String>();
    try {
      JTextPane tp = new JTextPane();
      tp.setSize(width, height);
      if (eb == null) {
        eb = new EmptyBorder(0, 50, 0, 50);
      }
      if (bgColor != null) {
        tp.setBackground(bgColor);
      }
      if (width <= 0) {
        width = DEFAULT_IMAGE_WIDTH;
      }
      if (height <= 0) {
        height = DEFAULT_IMAGE_HEIGHT;
      }
      tp.setBorder(eb);
      tp.setContentType("text/html");
      tp.setText(html);
      Dimension d = ((BasicEditorPaneUI) tp.getUI()).getPreferredSize(tp);
      //此处是将一个页面生成一张图片,如果要人为控制图片大小进行分页生成,则再自行进行高度设置,但是分页之后可能出现的情况就是分页的时候字体被截断的可能,因为在截断的之后,他不知道流是否刚好将一行字显示完成
      if(d.height>DEFAULT_IMAGE_HEIGHT){
        height=d.height;
      }
      PrintView m_printView = new PrintView(tp);
      int pageIndex = 1;
      boolean bcontinue = true;
      while (bcontinue) {
        BufferedImage image = new java.awt.image.BufferedImage(width, height, java.awt.image.BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setClip(0, 0, width, height);
        bcontinue = m_printView.paintPage(g, height, pageIndex);
        g.dispose();
        String path = toJpeg(image, nsrlsh, year);
        ret.add(path);
        pageIndex++;
      }
    } catch (Exception ex) {
      throw ex;
    }
    return ret;
  }

 
  /**
   * 将一個html转换为图片
   *
   * @param htmls
   * @return
   * @throws Exception
   */
  public static ArrayList<String> toImages(String html, String nsrlsh, String year) throws Exception {
    return html2jpeg(null, html, DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT, new EmptyBorder(0, 0, 0, 0), nsrlsh, year);
  }

  public static void main(String[] args) {
    try {
//      FileReader fr = new FileReader("D:\\DEV\\o\\现金流量表.html");
//      BufferedReader bfr = new BufferedReader(fr);
      String htmlstr = "<p>/**<br />&nbsp;* <br />&nbsp;*/<br />package com.cxsoft.rap.ed.util;</p>";
      String nextLine = null;
//      while ((nextLine = bfr.readLine()) != null) {
//        htmlstr += nextLine;
//      }
      System.out.println(htmlstr);
      GraphUtils.toImages(htmlstr, "000000003126754", "2009");
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

另一个辅助类:

/**
 *
 */
/**
 *
 */
package htmlToJpg;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JTextPane;
import javax.swing.plaf.basic.BasicEditorPaneUI;


public class PrintView {

  public JTextPane panel = null;

  public PrintView(JTextPane panel) {
    this.panel = panel;
  }

  /**
   * 绘制图片的方法
   *
   * @param g
   * @param hPage
   * @param pageIndex
   * @return
   */
  public boolean paintPage(Graphics g, int hPage, int pageIndex) {
    Graphics2D g2 = (Graphics2D) g;
    Dimension d = ((BasicEditorPaneUI) panel.getUI()).getPreferredSize(panel);
    double panelHeight = d.height;
    double pageHeight = hPage;
    int totalNumPages = (int) Math.ceil(panelHeight / pageHeight);
    g2.translate(0f, -(pageIndex - 1) * pageHeight);
    panel.paint(g2);
    boolean ret = true;
    if (pageIndex >= totalNumPages) {
      ret = false;
      return ret;
    }
    return ret;
  }
}

 

直接可以运行!

 

 

 

分享到:
评论
8 楼 dapeng8655 2012-08-24  
垃圾东西根本文不对题
7 楼 lianglove_0 2012-08-03  
灰常好的东西
6 楼 xiaoping8411 2011-11-14  
不错!谢谢分析,对html支持有点不够,比如对CSS的支持!
5 楼 taoge2121 2011-08-11  
怎么都转载这篇文章呢?
写的很一般
4 楼 wljsj2002 2011-05-24  
运行了一下  生成的是个白色图片,没有html页面啊
3 楼 coverzhy 2010-12-07  
不支持css吗?
2 楼 PrideSnow 2010-01-12  
jar包已经放进去了!
1 楼 jayje 2010-01-04  
需要某些jar包吧。

相关推荐

    C#实现HTML页面转jpg图片格式

    本项目名为"C#实现HTML页面转jpg图片格式",主要目标是通过输入任意的网页链接,在本地指定文件夹生成对应的jpg格式网页截图,同时解决可能出现的白屏问题。 首先,我们需要理解HTML页面的本质,它是一种基于文本的...

    HTML网页保存成jpg图片

    HTML网页保存成jpg图片是一种将网页内容转换为静态图像的技术,这种技术在多种场景下非常有用,例如制作网站截图、创建可分享的预览图或者用于离线阅读。本篇文章将详细探讨如何实现这一过程,并介绍相关的工具和...

    通过URL地址获取网页生成jpg图片

    总结来说,生成网页jpg图片涉及网络请求、HTML解析、页面渲染以及图像转换等多个步骤。使用Java结合其他工具库,我们可以构建出一个跨平台且适应不同环境的解决方案。在实际应用中,还应考虑性能优化、错误处理和...

    java实现html文件转换成图片

    本代码实现html文件转换成一个图片的功能。附件包含所需要的包。 注:该代码转换的html文件必须一个屏幕能展现出来的,如果内容太多一个屏幕展现不出来则不能很好的转换。所以该代码只适用于内容不太多的html文件。...

    C#生成网页截图 将指定html网页转换成图片保存到本地

    5. **保存图像**:有了包含网页内容的Bitmap对象后,我们可以调用`Save`方法将其保存为图片文件,常见的格式有JPG、PNG等。 实现步骤如下: 1. 在C#项目中添加一个`WebBrowser`控件到窗体上,设置其`Url`属性指向...

    WebToJPG 抓取网页转化成JPG图片

    【WebToJPG 抓取网页转化成JPG图片】技术是将网页内容转化为静态图像的一种方法,这对于创建网站预览、保存网页快照或在无法直接访问网页时查看页面内容非常有用。ASP.NET,微软的Web应用程序开发框架,提供了实现这...

    Base64转换图片JPG

    - **解码流程**:接收Base64字符串,使用解码函数还原成二进制数据,然后写入文件系统作为JPG图片。 总的来说,"Base64转换图片JPG"是利用Base64编码在文本格式和图像二进制数据之间进行转换的过程,通常用于简化...

    将html页面转化为jpg

    在C#MVC中时常需要将HTML页面直接转化为图片的形式让用户下载,本文就是直接分享的如何将html页面转化为jpg

    excel转html和jpg图片 一键生成

    标题"excel转html和jpg图片 一键生成"以及描述"把excel文件上传到对应文件夹即可",揭示了这是一个自动化工具,能快速将Excel文件转化为HTML网页和JPEG图片。 Excel转HTML: 当需要在网页上展示数据或者在不支持...

    Word转JPG转换器 - 批量Word转JPG工具

    为了方便在互联网上阅读,传输,以及保持内容不被...除了Doc和Docx格式,Word转JPG转换器也支持将富文本RTF格式,HTML和HTM网页格式,以及开放文档格式ODT(Open Document Format)作为输入格式转换成JPG等各种图片格式。

    微信DAT转JPG软件

    总的来说,微信DAT转JPG软件是一个解决特定问题的工具,它帮助用户访问和分享微信聊天记录中的图片。了解这个过程有助于我们更好地理解和应对与微信DAT文件相关的挑战。在处理这类文件时,确保使用可靠和安全的转换...

    flash转图片dll(swf转jpg)

    3. **SWF转图片**:这个过程涉及到解析SWF文件的结构,提取每一帧或关键帧的图像数据,并将其转换成静态的图片格式,如JPG。这在需要将Flash内容保存为非交互式图片,或者在没有Flash Player的环境中查看时非常有用...

    JQ JS javascript 普通图片上传 图片格式转换 图片base64转换 jpg转base64 png转base64

    在图片处理中,base64编码可以将图片数据嵌入到HTML或CSS中,无需额外的HTTP请求,提高页面加载速度。 在jQuery中,我们可以使用`input[type="file"]`元素让用户选择图片文件。一旦文件被选中,可以通过`change`...

    excel文件转换为PDF,jpg,html的方法

    Excel文件作为数据处理和分析的重要工具,有时我们需要将其转换为PDF、JPG图像或HTML网页格式。以下是对"excel文件转换为PDF,jpg,html的方法"的详细解释。 首先,我们来探讨如何将Excel文件转换为PDF格式。PDF...

    AI智能将图片转换成HTML和CSS代码.txt

    人工智能在处理图片转代码的过程中,主要利用了深度学习中的卷积神经网络(Convolutional Neural Networks,CNN)来识别图像中的元素,比如文本、按钮、布局、颜色和样式等,并将其转换为相应的HTML和CSS代码。...

    IOS苹果 HEIC或者HEIF图片文件转jpg图片文件,并无损压缩

    本文将深入探讨如何将HEIC/HEIF图片文件转换为JPEG格式,并进行无损压缩,以便在前端应用中使用。 首先,我们需要了解HEIC/HEIF格式的特点。HEIC/HEIF基于高效的编解码器,如AV1 Image File Format (AVIF),它采用...

    电子病历EMR转换成图片JPG

    通过以上步骤,我们可以实现从电子病历系统中提取数据并转换成JPG图片的目标,既满足了数据共享的需求,又兼顾了隐私保护的要求。这一过程不仅涉及技术实施,还包含了法规遵循和用户体验设计,是IT在医疗领域应用的...

    AsposePdf转图片及word转图片等功能

    在"史上最牛Asp.net将Html页面转Word(Aspose.Words)"描述中,我们可以理解为利用Aspose.Words的API,可以将HTML网页的内容转换为Word文档,这样可以方便地保存和打印网页内容。这一过程通常涉及解析HTML,然后在Word...

Global site tag (gtag.js) - Google Analytics