java打印

环境:
操作系统:windows
打印机类型:epson tmu220
操作语言:java
需求:
需要根据下单信息,打印小票,并且是后台自动打印

思路:
因为是自动打印,在网上搜索到了自动查找局域网内的打印机并且打印的java代码,原以为我用ireport+jasperreport自动生成pdf文件之后,直接调用打印机打印此文件,但是行不通。
问题:
1.按网上的说法,确实可以找到默认打印机,但是在自动打印文件的时候发现打印机根本不支 持pdf文件的打印,最后无奈只能用java图形方式画出来,但是问题又来了。
2.用java图形的方式画出来之后,发现按照网上的方式无论如何调格式始终都是从中间开始打印,页边距无法正常调整,后来发现是少了一个设置
  // 设置打印属性
  PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
  MediaSize ms = new MediaSize(74, 1000, 1000, MediaSizeName.ISO_A7);
  pras.add(MediaSizeName.ISO_A7);

此代码可以正常的调整页边距了,剩下的就只有慢慢的调整格式了。

以下是部分代码片断以做备份:


public int doPrint()
{
        if (message != null && message.length() > 0) // 当打印内容不为空时
        {
// 指定打印输出格式
            DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            // 定位默认的打印服务
             PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
             if(printService==null)
             {
            return 0;
             }
            // 创建打印作业
            DocPrintJob job = printService.createPrintJob();
            // 设置打印属性
            PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
            MediaSize ms = new MediaSize(74, 1000, 1000, MediaSizeName.ISO_A7);
            pras.add(MediaSizeName.ISO_A7);
            DocAttributeSet das = new HashDocAttributeSet();
            // 指定打印内容
            Doc doc = new SimpleDoc(this, flavor, das);
// 不显示打印对话框,直接进行打印工作
            try
            {
        // 设置打印类
                job.print(doc, pras); // 进行每一页的具体打印操作
            }
            catch(PrintException pe)
            {
                pe.printStackTrace();
            }
        }
        return 1;
}






Graphics2D g2d = (Graphics2D) graphics;
Font fontheader=new Font("微软雅黑",Font.PLAIN,10);
        Font font=new Font("微软雅黑",Font.PLAIN,9);
        Font fontfooter=new Font("微软雅黑",Font.PLAIN,10);
        int printFontSize=font.getSize();
        float printY=16;
        float printX=0;
       
g2d.translate(pageFormat.getImageableX(),pageFormat.getImageableY());
//打印小票头部
printX=printFontSize*6;
g2d.setFont(fontheader);
g2d.drawString("111111",printX,printY);

你可能感兴趣的:(java,工作,windows)