`
longgangbai
  • 浏览: 7331277 次
  • 性别: 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

相关推荐

    实现word文件转换成html文件实现在线打开预览word文件

    标题和描述中提到的"实现word文件转换成html文件实现在线打开预览word文件",这是一个关于将Microsoft Word文档转换为HTML格式,以便在网页上预览的技术问题。下面将详细介绍这个过程涉及的关键知识点。 1. **...

    C# HtmlToWord 将HTML文件转换成word文档

    总结来说,C#中将HTML文件转换为Word文档是一个涉及到HTML解析、图片处理和Word文档生成的过程。通过选择合适的库和编写适当的代码逻辑,可以高效地实现这个功能,即使在没有安装Word软件的环境下也能完成转换,并且...

    Java应用程序转化成exe文件的N种方法

    TowerJ是一款专为Java应用程序设计的转换工具,能够将Java的.class文件转换为Windows平台下的exe文件,特别适合于小型项目或简单应用程序的快速发布。 #### 方法七:使用jshrink jshrink是一款能够将JAR文件转换为...

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

    总的来说,将HTML网页转换为图片保存到本地涉及C#的图形绘制、WebBrowser控件的使用以及文件操作等多个方面的知识,是一个综合性的编程任务。掌握这些技能有助于提升开发者在Web相关领域的应用开发能力。

    sb3转html文件和exe文件超详细教程.rar

    将sb3文件转换为exe文件是为了在没有安装Scratch的Windows系统上运行。这通常需要借助一些第三方软件,比如"Griffpatch's Scratch Executable Converter"或"Scrtch2Exe"。这些工具可以将sb3项目打包成一个可执行文件...

    VB 将二进制图片文件转换为Base64字符串文本

    4. **反向转换**:如果需要将Base64字符串还原为原始图片,可以使用`Convert.FromBase64String`方法,然后将字节数组写入文件。 ```vb Dim decodedBytes As Byte() = Convert.FromBase64String(base64String) My....

    html转为图片,java后端

    总的来说,"html2image"项目为Java开发者提供了一个简单易用的工具,用于将HTML内容转换为图片,同时解决了中文乱码问题。通过理解项目结构、依赖和核心方法,开发者可以轻松地将其集成到自己的应用中,实现更多定制...

    HTML5应用开发技术-文件.pptx

    综上所述,这个HTML5应用开发案例主要涉及了拖放API、FileReader API以及表单文件输入的使用,这些技术都是HTML5增强网页交互性和功能的重要工具。通过这些技术,开发者可以创建更动态、用户友好的Web应用,例如在线...

    HTML5Plus应用开发指南

    HTML5Plus应用开发指南是针对使用HTML5进行移动应用开发的一套详细教程和文档。它不仅仅是一个技术文档,更是一个全面的开发指南,旨在帮助开发者从零基础入门到精通整个HTML5Plus开发流程。在介绍HTML5Plus规范之前...

    html页面转换为图片

    HTML页面转换为图片的技术在网页开发中非常有用,例如用于屏幕截图、页面预览或社交媒体分享。`html2canvas`是一个流行的JavaScript库,它能够将HTML元素渲染为Canvas,进而可以将其转换为图像格式,如JPEG、PNG或...

    POI将Office文件转化为Html页面

    总结来说,Apache POI提供了一种跨平台的方式来将Office文件转换为HTML,这对于需要在各种环境中处理Office文档的Java开发人员来说非常有用。尽管它可能不如某些特定平台的解决方案那样全面,但对于大多数基本转换...

    Word文件转化成HTML

    本篇文章将深入探讨如何使用C#编程语言将Word文件转换为HTML格式,同时保持原有的格式不变。这一过程对于那些希望在网页上展示Word内容或者需要进行跨平台文档共享的用户来说尤其重要。 首先,我们需要理解的是,...

    java:将html生成图片的所有方法比较

    在Java开发中,将HTML转换为图片是一种常见的需求,例如用于网页截图、报表生成或邮件模板预览。本文将深入探讨几种不同的方法,分析它们的优缺点,以帮助开发者选择最适合项目需求的解决方案。 1. **Java2DPDF库转...

    html 页面转化成图片

    在本篇文章中,我们将深入探讨如何将HTML页面转换为图片,并讨论与之相关的技术和工具。 首先,我们来看HTML页面的基本构成。HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言,它包含文本、...

    Android将word(doc、docx)转换成html

    综上所述,将Word文档转换为HTML在Android应用中的实现涉及到文件解析、数据转换、HTML生成、WebView使用等多个技术环节,需要对Android开发、Java编程以及Web技术有深入理解。在实际操作中,开发者需要结合具体的...

    android_HTML转PDF

    在Android平台上,将HTML内容转换为PDF文档是一项常见的需求,特别是在需要将网页内容保存或打印时。...通过这个工具,开发者可以轻松地将动态生成的HTML内容转换为用户友好的PDF文件,从而提高应用的用户体验。

    基于html2canvas将当前页面保存为图片Demo

    - 数据可视化:将图表或其他动态数据转换为图片,便于离线查看。 6. **标签解析**: - "电子签名":表明html2canvas可以用于创建符合规范的电子签名图像。 - "canvas":html2canvas的核心就是利用Canvas API来...

    Typora导出HTML图片处理工具

    总的来说,这个工具为Typora用户提供了便利,通过将本地图片转换为Base64编码并嵌入HTML文件,确保了HTML文档在任何地方都能完整显示,而无需依赖原始图片文件。对于那些需要频繁分享markdown文档或HTML文章的用户来...

    KML文件转换工具

    标题中的“KML文件转换工具”指的是用于处理和转化KML(Keyhole Markup Language)文件的应用程序。KML是一种基于XML的语言,主要用于地理信息系统(GIS),由Google开发,用于存储地理定位信息,如位置、标记、...

    Python-img2html用于将图片转化为HTML页面

    在img2html中,图片的每个像素颜色会被转换为相应的颜色代码,应用到对应的HTML元素上。 3. **布局策略**:为了在HTML页面上正确排列这些元素,img2html可能采用网格布局或者流式布局。网格布局将图片分割成固定...

Global site tag (gtag.js) - Google Analytics