java实现图片打印问题
面临的问题:我要实现java打印图片到纸张的指定位置,长度,宽度可以成比例缩小放大,代码已实现打印的功能,希望大虾们帮帮忙
代码如下:
public class PrintTest1 implements Printable {
/** */
/**
* @param Graphic指明打印的图形环境
* @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点)
* @param pageIndex指明页号
**/
public int print(Graphics gra, PageFormat pf, int pageIndex) throws
PrinterException {
System.out.println("页号pageIndex=" + pageIndex);
Component c = null;
//转换成Graphics2D
Graphics2D g2 = (Graphics2D) gra;
//设置打印颜色为黑色
g2.setColor(Color.black);
/*Paper paper = pf.getPaper();//得到页面格式的纸张
paper.setSize(500,500);//纸张大小
paper.setImageableArea(0,0,500,500); //设置打印区域的大小
System.out.println(paper.getWidth());
System.out.println(paper.getHeight());
pf.setPaper(paper);//将该纸张作为格式 */
//打印起点坐标
double x = pf.getImageableX();
double y = pf.getImageableY();
//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
//Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput
Font font = new Font("新宋体", Font.PLAIN, 20);
g2.setFont(font); //设置字体
//BasicStroke bs_3=new BasicStroke(0.5f);
float[] dash1 = {4.0f};
g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER, 4.0f, dash1,
0.0f));
float heigth = font.getSize2D(); //字体高度
System.out.println("x=" + x);
Image src = Toolkit.getDefaultToolkit().getImage("d://code128.jpg");
g2.drawImage(src, (int) x, (int) y, c);
int img_Height = src.getHeight(c);
int img_width = src.getWidth(c);
System.out.println("img_Height="+img_Height+"img_width="+img_width) ;
g2.drawImage(src, (int) x, (int) (y + 1 * heigth + img_Height + 11),c);
return PAGE_EXISTS;
}
public static void main(String[] args) {
//获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pageFormat = job.defaultPage(); //得到默认页格式
job.setPrintable(new PrintTest1()); //设置打印类
try {
//可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
//boolean a=job.printDialog();
//if(a)
//{
job.print();
//}
} catch (PrinterException e) {
e.printStackTrace();
}
}
}