Java Web打印通常有两种方法Applet和pdf。
Applet方式通常需要把打印程序、数据和依赖的程序包下载到客户端,在客户端分页打印,缺点是下载内容的比较大。
Pdf方式是在服务器端生成pdf,下载到客户端,缺点是需要客户端有pdf阅读器,java对pdf的操作能力有限。
改良的方案是,在服务器端绘图输出类似pdf的打印流,与重绘流的java Applet(即:查看器)生成结果Applet,发送到客户端。
Hg BookGraphics就是这种改良后的方案。它的程序库只有65k,查看器只有48k。它有很多特点:
l 基于J2SE1.4,跨平台
l 自带阅读器
l 目标文件小,通常是pdf的1/5
l 不用修改原有打印程序,只需要替换Graphics环境
l 页面式,减少分页带来的资源消耗
l 绘图指令优化
l 嵌入软字体,客户端不存在所需字体时,自动用软字体替代
l 可以包含图片、图形、文字
l 可以包含标题目录便于阅读检索
l 支持动画、声音、提示文本、超链接
l 缩略图页面便于定位
l 可过滤打印文本,进行定位
l 可以包含标题、作者、公司等元数据信息
l 打印时根据用户纸张选择,自动缩放打印
l 支持文档和幻灯片两种查看方式
程序库下载地址:http://d.download.csdn.net/down/1892435/sqlhub
例子:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.io.FileOutputStream;
import com.hg.book.Book;
import com.hg.book.BookGraphics;
/**
* BookGraphics测试
* @author wanghg
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
try {
//创建BookGraphics
BookGraphics bg = new BookGraphics(new FileOutputStream("c:/test.jar"));
//设置查看器属性
bg.setViewerType(BookGraphics.VIEWER_TYPE_DOC);
bg.setViewerBarVisible(true);
bg.setViewerNavVisible(true);
//添加Book
Book book = bg.addBook(400, 300);
//设置属性
book.setTitle("BookGraphics 测试");
book.setAuthor("wanghg");
book.setCorporation("http://www.hgsql.com");
book.setDescription("test");
//添加页
Graphics2D g = book.addPage();
//绘图
g.setColor(Color.cyan);
g.fillRect(0, 0, 400, 300);
g.setColor(Color.yellow);
String str = "http://www.hgsql.com";
g.drawString(str, 40, 150);
Rectangle2D rect = g.getFont().getStringBounds(str, g.getFontRenderContext());
rect.setFrame(40, 150 - g.getFont().getSize(), rect.getWidth(), rect.getHeight());
g.setColor(Color.DARK_GRAY);
g.draw(rect);
//设置超链接
Book.addHref(g, str, rect);
//设置工具提示
Book.addToolTip(g, "go:" + str, rect);
//设置动画效果
Book.setAnimate(g, Book.atype_left, 1, 1, 1);
bg.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
<script type="text/javascript"> </script>