`
longgangbai
  • 浏览: 7254157 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

将HTML文件转换为图片应用开发

阅读更多

   

项目使用的基本思路如下:

   在项目中发送传真的,传真的信息是由freemarker模板框架生成形成的html文件,通过freemarker获取html文件的內容,通过SWing中组件html信息转换为图片基本.

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

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

/**
 * 通过JTextPane目的显示html信息并绘制图片信息
 *
 * @author longgangbai
 *
 */
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;
 }
}
/**
 * HTML转换图片的方式
 *
 * @author longgangbai
 *
 */
public class GraphUtils {
 private final static Logger logger = Logger.getLogger(GraphUtils.class);
 public static int DEFAULT_IMAGE_WIDTH = 1024;
 public static int DEFAULT_IMAGE_HEIGHT = 768;

 /**
  * 将BufferedImage转换为图片的信息
  *
  * @param image
  * @return
  */
 public static String toJpeg(BufferedImage image) {
  // 获取图片文件的在服务器的路径
  String imageName = FaxUtils.getFaxServerFileDir() + File.separator
    + FaxUtils.getSytemFormatDate() + DEFAULT_IMAGE_FORMATSYTLE;
  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) {
   logger.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) 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);
   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);
    ret.add(path);
    pageIndex++;
   }
  } catch (Exception ex) {
   throw ex;
  }
  return ret;
 }

 /**
  *
  * @param bgColor
  * @param html
  * @param width
  * @param height
  * @return
  * @throws Exception
  */
 public static ArrayList<String> toImages(Color bgColor, String[] htmls,
   int width, int height) throws Exception {
  ArrayList<String> imglist = new ArrayList<String>();
  for (int i = 0; i < htmls.length; i++) {
   imglist.addAll(html2jpeg(bgColor, htmls[i], width, height,
     new EmptyBorder(0, 0, 0, 0)));
  }
  return imglist;
 }

 /**
  *
  * @param bgColor
  * @param html
  * @param width
  * @param height
  * @return
  * @throws Exception
  */
 public static ArrayList<String> toImages(Color bgColor, String html,
   int width, int height) throws Exception {
  return html2jpeg(bgColor, html, width, height, new EmptyBorder(0, 0, 0,
    0));
 }

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

 /**
  * 将多个html转换图片
  *
  * @param htmls
  * @return
  * @throws Exception
  */
 public static ArrayList<String> toImages(String[] htmls) throws Exception {
  ArrayList<String> imglist = new ArrayList<String>();
  for (int i = 0; i < htmls.length; i++) {
   imglist.addAll(html2jpeg(null, htmls[i], DEFAULT_IMAGE_WIDTH,
     DEFAULT_IMAGE_WIDTH, new EmptyBorder(0, 0, 0, 0)));
  }
  return imglist;
 }
}

分享到:
评论
10 楼 lianglove_0 2012-08-06  
这个流读取不全 怎么办啊? 后面的图片都没有了,时有时无吧!
9 楼 longgangbai 2012-03-08  
Leichelle 写道
博主啊 !您好 !把 HTML文件转换为 图片的原理是如何的呢 ?可否说说  谢谢了,在做项目,苦于不知道用C语言如何实现。。。多谢赐教了。。。感激不尽

原理就是讲html在AWT组件上面显示,将AWT显示内容生成为图片,即可。
8 楼 Leichelle 2012-03-07  
博主啊 !您好 !把 HTML文件转换为 图片的原理是如何的呢 ?可否说说  谢谢了,在做项目,苦于不知道用C语言如何实现。。。多谢赐教了。。。感激不尽
7 楼 fengjinfu 2010-03-16  
怎么让图片中的文字居中绘制??我调试了paintPage方法中的g2.translate(0f, -(pageIndex - 1) * pageHeight);中的两个参数,发现不行,容易出错。楼主有啥好主意??等地ing。。。。
6 楼 longgangbai 2010-03-03  
fengjinfu 写道
在PrintView类中的paintPage方法添加如下代码:
g2.setBackground(Color.white);
g2.clearRect(0, 0, hPage, hPage); 

就可以了。目的是把Graphics清成白色的。就OK了.我试过了。还有。在加载html文档中最好让进程睡眠几分钟。



不晓得,当时的解决方案是那种,不明白,希望继续交流!!
5 楼 fengjinfu 2010-03-03  
在PrintView类中的paintPage方法添加如下代码:
g2.setBackground(Color.white);
g2.clearRect(0, 0, hPage, hPage); 

就可以了。目的是把Graphics清成白色的。就OK了.我试过了。还有。在加载html文档中最好让进程睡眠几分钟。
4 楼 longgangbai 2010-03-03  
fengjinfu 写道
绘制第一张图片没有问题,第二张开始出问题了。有谁知道代码哪儿有问题?

   我项目中有时也出现这种问题,我自己查一下可能是网上说是Swing 中组件的限制Text的长度,本人实现:原理中正好使用了Swing的组件JTextPane ,本人将html内容减少(删除html的header子类等)后,此种现象出现很少。希望自己查看一下代码是否有问题。
3 楼 fengjinfu 2010-03-03  
绘制第一张图片没有问题,第二张开始出问题了。有谁知道代码哪儿有问题?
2 楼 fengjinfu 2010-03-03  
怎么从第二张图片开始时黑色的,好像绘制不了。
1 楼 Silent_Eye 2010-02-26  
为什么我com.sun.image.codec.X下的几个包引不进来?

lz可否指导一二?

在下mail:zorrox@163.com

相关推荐

    mdwebhook, 使用webhooks将 Markdown 文件转换为HTML的示例应用程序.zip

    mdwebhook, 使用webhooks将 Markdown 文件转换为HTML的示例应用程序 Markdown Webhook这个简单的示例应用程序使用webhooks来得到Dropbox中新 Markdown 文件的通知。 然后它将所有的Markdown 文件转换为 HTML 。阅读...

    Android开发应用实战详解源代码

    2.3 android应用项目文件组成 2.3.1 androidmanifest.xml文件 2.3.2 src目录 2.3.3 常量的定义文件 2.4 程序生命周期 2.4.1 android周期 2.4.2 android进程 2.5 activity的生命周期 2.5.1 activity状态 2.5.2 剖析...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例067 使用ParseExact方法将字符串转化为 日期格式 84 实例068 使用ToString方法格式化日期 85 实例069 使用ToDateTime方法转换日期显示 格式 86 3.5 常用数字验证技巧 87 实例070 使用正则表达式验证电话号码 87 ...

    文件编码批量转换程序

    '* 程序功能:将 GB、BIG5、UTF-8 文件相互转换,方便的批量处理能力, '* 主要用于网站文件编码方式的整体转换上。 '* '* 特别提醒:程序不保证文件绝对安全,使用前请备份! '* '* 开发环境:Visual Basic6.0(SP6)...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    全书一共被压缩为5个rar,这是第二个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    全书一共被压缩为5个rar,这是第三个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    JavaScript 中的二进制到文本转换器应用程序源代码

    此应用程序的目的是帮助您将二进制数转换为文本,使其更易于理解。该应用程序提供了多种文本转换选项,您可以在转换过程中进行选择。虽然这是一个简单的项目,但它提供了对二进制数的更好理解。随意探索应用程序的...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    全书一共被压缩为5个rar,这是第四个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    RTF转换成HTML的控件(.net)

    该控件可以独立工作,不需要安装MS Word或其它字处理软件。该组件可以将 RTF 转换成 HTML 3.2、HTML 4.01 和 XHTML ...该组件只有150K左右大小,但它的速度可达到每秒转换2-3个HTML文件。 原厂:SautinSoft (试用版)

    可二次开发上传图片功能.rar

    "可二次开发上传图片功能.rar" 是一个压缩文件包,它包含了一组源代码和必要的资源文件,旨在为学生或开发者提供一个基础的、可扩展的图片上传功能的实现。该源码文件包可以作为计算机科学或软件工程专业的学生的...

    GemBox Bundle 2021是一个一体化的应用程序,它将处理办公文件和文档的所有基本工具组合在一个包中

    解压密码:123 ||GemBox Bundle 2021是一个一体化的应用程序,它将处理办公文件和文档的所有基本工具组合在一个包中。 它为。net开发人员提供了各种令人惊叹的工具和特性,例如捕获、创建、编辑形状、文本和图片、...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    全书一共被压缩为5个rar,这是第五个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    tohiccup:用于将 HTML 转换为 Hiccup 的 Web 应用程序

    用于将 HTML 转换为网络应用程序。 发展 lein run 此命令将: 在端口 10555 上启动网络服务器 启动 Figwheel 服务器,负责实时重新加载 ClojureScript 代码和 CSS。 一切都完成启动后,您将能够浏览到并查看正在...

    VanillaJS 中的颜色转换器应用程序和源代码

    Color Converter 应用程序是使用 JavaScript 编程语言开发的。这是一个用户友好的应用程序,可以自由定制以满足您的需求。该程序的目的是帮助您为您的配色方案选择各种颜色表示。该应用程序提供了一种通过使用滑块或...

    IXS开发平台

    IXS浏览器是一款基于IE内核的应用程序开发平台.使用它,您可以使用DHTML/脚本来开发...对于已有的基于IIS的应用,您只需点几下鼠标,就可以把它转化为基于桌面的应用. 脚本是加密码的,您不必担心您的程序被非法获取.

    New of GWT Introduction--GWT开发快速入门

    这种情况下,我们就可以既充分利用Java语言的开发优势降低Ajax应用开发的难度,加快Ajax应用的开发速度,为Ajax的大规模应用创造可能,又可以充分发挥Ajax技术的优势,创建更加动态和交互性更好的Web应用程序,提升...

Global site tag (gtag.js) - Google Analytics