使用java自带的Printable接口,实现接口中的print方法实现打印


import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.print.*;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import static java.awt.print.Printable.PAGE_EXISTS;

public class PrintToolUtils {

    static void print(String path, int pageWidth, int pageHeight, int showWidth, int showHeight) {
        // 通俗理解就是书、文档
        Book book = new Book();
        // 设置成竖打
        PageFormat pf = new PageFormat();
        pf.setOrientation(PageFormat.PORTRAIT);
        // 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
        Paper p = new Paper();
        p.setSize(pageWidth,pageHeight);//纸张大小
        p.setImageableArea(0,0, pageWidth,pageHeight);//打印区域
        pf.setPaper(p);
        // 把 PageFormat 和 Printable 添加到书中,组成一个页面
        book.append((graphics, pageFormat, pageIndex) -> {//通过一个匿名内部内实现Printable接口,不懂的自行查看jdk8的新特性
            try {
//                URL url = new URL(path);//读取网络图片File对象传递给ImageIO.read()方法
//                Image image=ImageIO.read(url);
                Image image = ImageIO.read(new File(path));//也可以通过file构建一个本地图片File对象传递给ImageIO.read()方法
                //将图片绘制到graphics对象中(为什么把需要打印的内容drawImage就可以实现打印自己取看值传递一引用传递的区别)
                graphics.drawImage(image,45,0,120,15,null);
                // 绘制一段字符串
                graphics.drawString("午餐", 85,35);
                graphics.drawString("餐厅:土豪餐厅", 20,55);
                graphics.drawString("学号:100001", 20,75);
                graphics.drawString("姓名:曹总", 20,95);
                graphics.drawString("餐费:2700元", 20,115);
                graphics.drawString("时间:2000-01-01 12:00:22", 20,135);
                // 绘制一个条线条
                graphics.drawLine(20,155, 185, 155);

            } catch (IOException e) {
                e.printStackTrace();
            }
            return PAGE_EXISTS;//返回0(PAGE_EXISTS)则执行打印,返回1(NO_SUCH_PAGE)则不执行打印
        }, pf);
        // 获取打印服务对象
        PrinterJob job = PrinterJob.getPrinterJob();
        // 设置打印类
        job.setPageable(book);
        try {

//            //可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
//            boolean a=job.printDialog();
//            if(a){
//                job.print();
//            }else{
//                job.cancel();
//            }

            // 注释掉printDialog()不显示对话框直接打印
            job.print();
            
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }
}

标签: Java调用打印机, Java实现打印功能, Java打印文件或文本内容

添加新评论