关于web页面JApplet打印小票
版权所有 http://www.cnblogs.com/yzssoft/p/8991971.html
做这个的例子太少,我把我做的示例亮出来
一.先说说需要的版本
1.我用的浏览器只有ie:
火狐只支持52版本以下,并且是java7、java8。chrome不支持
2.applet客户端打印,需要java6:
亲自测试,java6需要一些提示是否运行,等都同意后,打印时不用再提示。
在java7、8,我自己测试控制面板里面没有低级,只有高级和超高级,不管什么时候打印,它都会提示是否同意
所以,我最终还是选择了在applet里放入jre6
二.applet的打印代码
1.html,在ie下才可运行
因为执行的时候,需要检查有没有jre6、请求/接受路径、一些传递的参数,运行的class、需要的jar,代码如下:
function is_ie(json, print_type) {
//){
//项目的根路径
var req_path = "http://localhost:8080";
//打印机名
var print_name = "Deli DL-888C"; var str = "JRPrinterApplet";
var archive = 'jbarcodebean-1.2.0.jar,json-20160810.jar,print.jar';
var codebase = '/applets'
var file = '/applets/jre-6u45-windows-i586.exe';
var scriptable = false;
var type = 'application/x-java-applet;version=1.6.0';
var clsid = "";
if (isFamilyVersionSupported()) {
clsid = "clsid:CAFEEFAC-0016-0000-FFFF-ABCDEFFEDCBA";
} else {
clsid = "clsid:CAFEEFAC-0016-0000-0008-ABCDEFFEDCBA";
}
var write = '' +
//'<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width = "0" height = "0" codebase="'+file+'" mayscript>' +
'<object classid="' + clsid + '" width = "0" height = "0" codebase="' + file + '" mayscript>' +
'<param name = "code" value = "' + str + '.class" >' +
'<param name = "codebase" value = "' + codebase + '" >' +
'<param name = "archive" value = "' + archive + '" >' +
'<param name="type" value="' + type + '">' +
'<param name="scriptable" value="' + scriptable + '">' +
'<param name = "print_type" value ="' + print_type + '">' +
'<param name = "print_name" value ="' + print_name + '">' +
'<param name = "req_path" value ="' + req_path + '">' +
'<param name = "json" value =\'' + json + '\'>' +
'<comment>' +
'<embed type="' + type + '" code="' + str + '.class" java_codebase="' + codebase + '" archive="' + archive + '" scriptable=' + scriptable + ' pluginspage="' + file + '" >' +
'<noembed></noembed>' +
'</embed>' +
'</comment>' +
'</object>';
$("#objectDiv").html(write)
if(print_type=='login_test'){ }
}
2.jre接受请求
需要的文件
aaarticlea/png;base64,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" alt="" />
(1)JRPrinterApplet.java,太多了,大家慢慢看吧,应该能理解
import net.sourceforge.jbarcodebean.JBarcodeBean;
import net.sourceforge.jbarcodebean.model.Code39;
import net.sourceforge.jbarcodebean.model.Ean13;
import org.json.JSONArray;
import org.json.JSONObject; import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.print.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* Created by Administrator on 2018/4/29.
*/
public class JRPrinterApplet extends JApplet implements Printable {
JSONObject jsonObject=new JSONObject();
private int imageWidth = 300; //图片的宽度 @Override
public void init() {
String req_path=this.getParameter("req_path");
String print_type=this.getParameter("print_type");
String print_name=this.getParameter("print_name");
String jsonStr=this.getParameter("json");
//链接测速
if(print_type.equals("login_test")){
System.out.println("****连接测试");
String get=urlGet(req_path+"/print/print_error?type=login_test");
System.out.println(get);
return;
}else if(print_type.equals("print")){
System.out.println("****连接打印");
jsonObject=new JSONObject(jsonStr);
String id=String.valueOf(jsonObject.get("id"));
System.out.println(print_name+" "+req_path+" "+id+" "+print_type+"\n"+jsonStr);
Book book = new Book();
// 设置成竖打
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT); // LANDSCAPE表示竖打;PORTRAIT表示横打;REVERSE_LANDSCAPE表示打印空白
// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper();
p.setSize(imageWidth, 300); // 纸张大小(590, 840)表示A4纸
p.setImageableArea(0, 0, imageWidth, 300); // A4(595 X842)设置打印区域,其实0,0应该是72,72
// ,因为A4纸的默认X,Y边距是72
pf.setPaper(p);
// 把 PageFormat 和 Printable 添加到书中,组成一个页面
book.append(this, pf);
// 获取打印服务对象
PrinterJob.lookupPrintServices();
PrinterJob job = PrinterJob.getPrinterJob();
// 设置打印类
job.setPageable(book);
PrintService[] pss = PrintServiceLookup.lookupPrintServices(null,null);
//PrintService ps=null;
boolean have_ps=false;
for(PrintService printService:pss){
System.out.println("****找到打印机:"+printService.toString());
if(printService.toString().contains(print_name)){
try {
System.out.println("----找到对应打印机:"+printService.toString());
job.setPrintService(printService);
have_ps=true;
} catch (PrinterException e) {
String services = urlGet(req_path + "/print/print_error?type=Doc_error&id=" + id + "&msg=" + e);
System.out.println(services);
e.printStackTrace();
return;
}
}
}
if(!have_ps){
String var19 = urlGet(req_path + "/print/print_error?type=print_no_find&id=" + id);
System.out.println(var19);
}else{
try {
// 可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
/*boolean a=job.printDialog();
if(a)
{
job.print();
}*/
String get=urlGet(req_path + "/print/print_error?type=print_ok&id=" + id);
System.out.println(get);
job.print();
} catch (PrinterException e) {
String get = urlGet(req_path + "/print/print_error?type=print_is_error&id=" + id + "&msg=" + e);
System.out.println(get);
e.printStackTrace();
}
}
}
}
public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {
Component c = null;
Graphics2D g2 = (Graphics2D) gra;
double x = pf.getImageableX();
double y = pf.getImageableY();
switch (pageIndex) {
case 0:
g2.drawImage(graphicsGeneration(jsonObject), (int) x, (int) y, c);
return PAGE_EXISTS;
default:
return NO_SUCH_PAGE;
}
} public BufferedImage graphicsGeneration(JSONObject jsonObject) {
String id=String.valueOf(jsonObject.get("id"));
String name=String.valueOf(jsonObject.get("name"));
JSONArray array=jsonObject.getJSONArray("list"); int title_h=20;
int left_long=10;
int row=1;
int i;
int imageHeight=title_h*(row+7)+80;
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
//设置图片的背景色
Graphics2D main = image.createGraphics();
main.setColor(Color.white);
main.fillRect(0, 0, imageWidth, imageHeight); //***********************页面头部
Graphics g = image.createGraphics();
g.fillRect(0, 0, imageWidth, title_h);
g.setColor(Color.white);
Font font = new Font("宋体", Font.BOLD, 14);
g.setFont(font);
g.setColor(Color.BLACK);
g.drawString("***道口义兴张祥记烧鸡老铺***", 50, title_h*row+++3);
//其他内容
font = new Font("宋体", Font.PLAIN, 12);
g.setFont(font);
g.drawString("单号:"+id,left_long,title_h*row);
g.drawString("时间:"+new SimpleDateFormat("MM月dd日 HH:mm:ss").format(new Date()),imageWidth/2,title_h*row++);
g.drawString("收货人:"+name,left_long,title_h*row++);
g.drawLine(5,65,295,65);
for(i=0;i<array.length();i++){
JSONObject o= (JSONObject) array.get(i);
g.drawString((i+1)+".",left_long,title_h*row);
g.drawString(o.get("name")+" x"+o.get("num"),left_long+15,title_h*row);
String unit="";
if(o.get("unit")!=null&&!o.get("unit").equals("")){
unit="/"+o.get("unit");
}
g.drawString(o.get("money")+unit,240,title_h*row);
row++;
} //生成条维码
JBarcodeBean jBarcodeBean = new JBarcodeBean();
// 条形码类型
//jBarcodeBean.setCodeType(new Ean13());
jBarcodeBean.setCodeType(new Code39());
// 在条形码下面显示文字
jBarcodeBean.setLabelPosition(JBarcodeBean.LABEL_BOTTOM);
jBarcodeBean.setCode(id);
jBarcodeBean.setBarcodeHeight(50);
//条维码
BufferedImage tiao_wei_ma = new BufferedImage(300, 80, BufferedImage.TYPE_INT_RGB);
tiao_wei_ma = jBarcodeBean.draw(tiao_wei_ma); //***********************插入图片
Graphics mainPic = image.getGraphics();
if(tiao_wei_ma!=null){
mainPic.drawImage(tiao_wei_ma,0,title_h*(row-1),null);
mainPic.dispose();
}
//createImage("F:\\temp/hehe.jpg",image);
return image;
} /**
* 向指定URL发送GET方法的请求
*
*/
public static String urlGet(String url) {
BufferedReader in = null;
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 建立实际的连接
connection.connect();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
System.out.println(e);
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return null;
}
}
一定要用java6生成class,要不然applet的java6不支持
(1).将class生成jar,我命名print.jar
(2).jar -cvf print.jar *.class (生成jar包),放入applets
5.签名
1.创建一个证书
keytool -genkey -validity 1800 -keystore applet.store -alias applet
2.导出证书文件
keytool -export -keystore applet.store -alias applet -file applet.cer
3.对jar包进行签名
jarsigner -keystore applet.store jbarcodebean-1.2.0.jar applet
jarsigner -keystore applet.store json-20160810.jar applet
jarsigner -keystore applet.store print.jar applet
6.将上面图的那些文件放入applet
关于web页面JApplet打印小票的更多相关文章
- web页面内容打印总结
web页面打印有两种,一种是直接调用window.print()命令操作,一种是使用ActiveX插件(Object标签)操作,但是第二种只支持IE内核的浏览器. 示例1: <!DOCTYPE ...
- 基于python的websocket开发,tomcat日志web页面实时打印监控案例
web socket 接收器:webSocket.py 相关依赖 # pip install bottle gevent gevent-websocket argparse from bottle i ...
- lodop+art-template实现web端漂亮的小票样式打印
一. 现状 由于之前采用Lodop打印控件(商业版付费,可以使用免费版 但是会有水印)去打印小票,是一行一行的打印,但是不满足UI给到复杂布局的小票样式,所以得重新考虑如何来实现. 二. 介绍 art ...
- 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作
在前面介绍了很多篇相关的<Bootstrap开发框架>的系列文章,这些内容基本上覆盖到了我这个Bootstrap框架的各个主要方面的内容,总体来说基本达到了一个稳定的状态,随着时间的推移可 ...
- web页面实现指定区域打印功能
web页面实现指定区域打印功能 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="t ...
- 打印web页面指定区域的三种方法
本文和大家分享一下web页面实现指定区域打印功能的三种方法,一起来看下吧. 第一种方法:使用CSS 定义一 个.noprint的class,将不打印的内容放入这个class内. 代码如下: <s ...
- js打印WEB页面内容代码大全
第一种方法:指定不打印区域 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="tex ...
- 关于WEB页面的强制分页打印问题
最近项目中有个需求要求打印web页面数据,但是碰到打印预览显示数据时,多的数据就不翼而飞了(不分页),搞的很是焦灼~ 最先是以为纸张的问题,胡乱折腾了一番,把A4约硬是改成了LARGE号的纸,多的数据 ...
- (转)基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作
http://www.cnblogs.com/wuhuacong/p/5147368.html 在前面介绍了很多篇相关的<Bootstrap开发框架>的系列文章,这些内容基本上覆盖到了我这 ...
随机推荐
- shell脚本实现冒泡排序
手动输入一行字符串,并对其排序. 脚本如下: #!/bin/bash #a test about sort echo "please input a number list" re ...
- Android开发学习之路--Broadcast Receiver之初体验
学习了Activity组件后,这里再学习下另一个组件Broadcast Receiver组件.这里学习下自定义的Broadcast Receiver.通过按键自己发送广播,然后自己接收广播.新建MyB ...
- 使用GDAL库中的RPC校正问题
最近将GDAL库更新至1.11版本之后,发现之前写的RPC像方改正模型校正的结果偏差特别大(更新版本之前结果和PCI处理的结果一致).所以初步判断是GDAL库的bug,经过各个参数修改发现原来是指定的 ...
- MyBatis进阶(一)运行原理
初次学习MyBatis,自己花了不少时间,理解一件事物是需要时间的.经过多次反复的理解,你的认知能力就可以得到提升.以下是学习MyBatis的一些理解认识,技术理解上若有不当之处,敬请朋友们提出宝贵意 ...
- jdbc连接mysql加载驱动程序com.mysql.jdbc.Driver
在开发环境如eclipse,中加载指定数据库的驱动程序.需要下载MySQL支持JDBC的驱动程序mysql-connector-java-5.1.25-bin.jar. 而具体在Java程序中加载驱动 ...
- 【Android 应用开发】 ActionBar 基础
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3920439 ...
- Linux Android 多点触摸协议 原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/71/12306571.shtml
为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据.这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息. 使用说明 单点触摸信息是以ABS承载 ...
- LayoutInflater和inflate的用法,有图有真相
1.概述 有时候在我们的Activity中用到别的layout,并且要对其组件进行操作,比如: A.acyivity是获取网络数据的,对应布局文件为A.xml,然后需要把这个数据设置到B.xml的组件 ...
- Windows Mobile和Wince(Windows Embedded CE)的字符集问题
背景 开发过Windows Mobile和Wince(Windows Embedded CE)的开发者,特别是Native C++开发者,或多或少都遇到过ANSI字符集和Unicode字符集的转换问题 ...
- STL中算法分类
操作对象 直接改变容器的内容 将原容器的内容复制一份,修改其副本,然后传回该副本 功能: 非可变序列算法 指不直接修改其所操作的容器内容的算法 计数算法 count.count_if 搜 ...