zoukankan      html  css  js  c++  java
  • java打印技术实例

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;

    import javax.print.Doc;
    import javax.print.DocFlavor;
    import javax.print.DocPrintJob;
    import javax.print.PrintException;
    import javax.print.PrintService;
    import javax.print.PrintServiceLookup;
    import javax.print.SimpleDoc;
    import javax.print.attribute.DocAttributeSet;
    import javax.print.attribute.HashDocAttributeSet;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.print.attribute.PrintRequestAttributeSet;
    import javax.print.attribute.standard.MediaSizeName;
    import javax.swing.JOptionPane;
    /**
     * java定位打印,把打印内容打到指定的地方
     * @author edz
     *
     */
    public class throwadv implements Printable {
              private int PAGES=0;
              private String printStr;
              /*
               * Graphics指明打印的图形环境;PageFormat指明打印格式(页面大小以点为计量单位;page指明页号
               */
              public int print(Graphics gp,PageFormat pf,int page) throws PrinterException{
                  Graphics2D g2=(Graphics2D)gp;
                  g2.setPaint(Color.black);
                  if(page>=PAGES){//当打印页号大于需要打印的总页数,打印工作工作结束
                      return Printable.NO_SUCH_PAGE;
                  }
                  g2.translate(pf.getImageableX(), pf.getImageableY());//转化坐标,确定打印边界
                  Font font=new Font("宋体",Font.PLAIN,24);
                  g2.setFont(font);
                  //打印当前页面
                  int printFontCount=printStr.length();//打印字数
                  int printFontSize=font.getSize();//font的磅值大小
                  float printX=595/2;//给定字符点阵,X页面正中
                  float printY=843/2;//给定字符点针,Y页面正中
                  float printMX=printX-(printFontCount*printFontSize/2);//打印到正中间
                  float printMY=printY-printFontSize/2;//打印到正中间
                  g2.drawString(printStr, printMX, printMY);//具体打印每一行文本,在指定位置
                  g2.drawString(printStr, printMX-printFontSize*printFontCount, printMY+printFontSize);//具体到打印每一行文本
                  g2.drawString(printStr, printMY, printMY+printFontSize*2);
                  g2.drawString(printStr, printMY, printMY+printFontSize*2);
                  g2.drawString(printStr, printMX, printMY+printFontSize*2);
                  return Printable.PAGE_EXISTS;//存在打印页时,继续打印工作
                  }
                 //打印内容到指定位置
              public void printContent(){
                  printStr="打印测试内容";//获取需要打印的目标文本
                  if(printStr!=null&&printStr.length()>0){//当打印内容不为空时
                      PAGES=1;//获取打印总页数
                      //指定打印输出格式
                      DocFlavor flavor=DocFlavor.SERVICE_FORMATTED.PRINTABLE;
                      //设置打印属性
                      PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                     //设置纸张大小,也可以新建MediaSize类来自定义大小
                      pras.add(MediaSizeName.ISO_A4);
                      DocAttributeSet das=new HashDocAttributeSet();
                      //指定打印内容
                      Doc doc=new SimpleDoc(this,flavor,das);
                      //定位默认的打印服务
                      PrintService printService=null;
                      printService=PrintServiceLookup.lookupPrintServices(flavor, pras)[0];
                      System.out.println(printService);
                      //创建打印作业
                      DocPrintJob job=printService.createPrintJob();
                      try{
                          job.print(doc, pras);//进行每一页的具体打印操作
                      }catch(PrintException pe){
                          pe.printStackTrace();
                      }
                  }
                  else{
                      //如果打印内容为空时,提示用户打印将取消
                      JOptionPane.showConfirmDialog(null, "Sorry,Printer Job is Empty,Print Cancelled!","Empty",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
                      
                  }
              }
              public static void main(String[]args){
                  throwadv ip=new throwadv();
                  ip.printContent();
              }
              
    }

  • 相关阅读:
    SOAP协议调研
    android 支付宝 沙箱环境配置
    点击两次物理键退出APP
    Android LitePal的简单使用
    多线程
    【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现
    【Android】14.0 UI开发(五)——列表控件RecyclerView的瀑布布局排列实现
    【Android】利用回收机制创建ListView列表实现
    BaseActivity
    【MySQL数据库】一些bug的解决
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/8574065.html
Copyright © 2011-2022 走看看