对于java的打印问题
2024年03月13日
对于java的打印问题,各种书上谈的很少。我想主要可能是java的打印功能太弱了,没有什么可介绍的。最近,我因为工作的关系,用到了java的打印图像功能。不过因为缺少可参考的例子和教材,我只有查看jdk的API文档,并不很爽。下面就把我的程序给大家讲讲,顺便白话一下java的打印(是jdk1.2的)。java的打印类都在java.awt.print包下,主要有四个类和两个接口:PrinterJob、PageFormat、Paper、Book;Printable,Pageable。(详细的情况,请查看jdk的API文档,我只讲我程序中用到的部分)Interface包括Printable:主要是用来打印的接口,在打印的时候,它的print()方法PrinterJob:初始化
打印操作,可以显示系统特定的打印对话框,例如windows的
。PageFormat:描述可打印区。例如我的程序使用的几个方法
public double getImageableX();
公共双getImageableY();
公共双getImageableWidth();
公共双getImageableHeight();
封装jinicup.printer;
导入java.awt.*;
导入java.awt.print.*;
导入java.awt.event.*;
导入javax.swing.JPanel;
导入javax.swing.JFrame;
导入javax.swing.ImageIcon;
导入java.io.*;
/************************************
*打印机服务的实现
***********************************/
公共类PrinterImpl扩展JPanel
实现Printable{
private Image图像;
私有PrinterJob打印作业;
私有双x,y,w,h;
私有int imagew,imageh;
PrinterImpl(){
printJob=PrinterJob.getPrinterJob();
printJob.setPrintable(this);
printJob.printDialog();
}
public int print(Graphicsgraphics,PageFormat pageFormat,int pageIndex)throws PrinterException{
System.out.println("pageIndex"+pageIndex);
if(pageIndex>=1){
return Printable.NO_SUCH_PAGE;}
x
=pageFormat.getImageableX();
y=pageFormat.getImageableY();
w=pageFormat.getImageableWidth();
h=pageFormat.getImageableHeight();
if(imagew>=imageh){
h=w*imageh/imagew;
}其他{
w=h*imagew/imageh;
System.out.println
(x+""+y);
System.out.println(w+""+h);
绘制图形(图形);
返回Printable.PAGE_EXISTS;
}
公共无效油漆(图形图形){
drawGraphics(图形);
}
private voiddrawGraphics(图形图形){
graphics.drawImage(图像,(int)x,(int)y,(int)w,(int)h,null);
//Graphics.drawOval(10,10,100,50);
}
/************************************
*开始打印
* param byteArrayOfJPEGFile jpg文件的有效字节数组(可以直接来自相机)
***********************************/
public void printByteArray(byte[]byteArrayOfJPEGFile){
//Toolkit tool=Toolkit.getToolkit();
//image=tool.createImage(byteArrayOfJPEGFile);
图像=(new ImageIcon(byteArrayOfJPEGFile)).getImage();
imagew=image.getWidth(null);
imageh=image.getHeight(null);
System.out.println(imagew+""+imageh);
System.out.println("kkk");
try{
System.out.println("开始打印");
printJob.print();
System.out.println("打印已后台打印到打印机");
}catch(Exception ex){
System.out.println(ex);
}
返回;
}
/************************************
*主要方法,仅用于文本目的
* param args无参数使用
**************************************/
public static void main(String[]args){
PrinterImpl pi=new PrinterImpl();
尝试{
FileInputStream fs=new FileInputStream("e:/test.jpg");
System.out.println(fs.available());
byte[]数组=new byte[fs.available()];
fs.read(数组);
pi.printByteArray(数组);
}catch(Exception e){
System.out.println(e);
}}
}