`

用java实现打印功能

阅读更多


用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出直接输出。

下面代码实现了简单的打印功能:

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Component;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;



import java.awt.Toolkit;

import java.awt.RenderingHints;

import java.awt.font.FontRenderContext;

import java.awt.font.LineBreakMeasurer;

import java.awt.font.TextAttribute;

import java.awt.font.TextLayout;

import java.awt.geom.Point2D;

import java.awt.image.BufferedImage;

import java.awt.print.Book;

import java.awt.print.PageFormat;

import java.awt.print.Paper;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

import java.awt.print.PrinterJob;

import java.text.AttributedString;



import javax.swing.JApplet;









public class PrintTest   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;

      //print string

      String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";

      //转换成Graphics2D

      Graphics2D g2 = (Graphics2D) gra;

      //设置打印颜色为黑色

      g2.setColor(Color.black);



      //打印起点坐标

      double x = pf.getImageableX();

      double y = pf.getImageableY();

       



      switch(pageIndex){

         case 0:

           //设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)

           //Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput

           Font font = new Font("新宋体", Font.PLAIN, 9);

           g2.setFont(font);//设置字体

           //BasicStroke   bs_3=new   BasicStroke(0.5f);   



           float[]   dash1   =   {2.0f}; 

           //设置打印线的属性。

           //1.线宽 2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量

           g2.setStroke(new   BasicStroke(0.5f,   BasicStroke.CAP_BUTT,   BasicStroke.JOIN_MITER,   2.0f,   dash1,   0.0f));  

           //g2.setStroke(bs_3);//设置线宽

           float heigth = font.getSize2D();//字体高度

           System.out.println("x="+x);

           // -1- 用Graphics2D直接输出

           //首字符的基线(右下部)位于用户空间中的 (x, y) 位置处

           //g2.drawLine(10,10,200,300); 

           

           Image src = Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.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.drawString(str, (float)x, (float)y+1*heigth+img_Height);

           g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));

           

           g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);

           

         return PAGE_EXISTS;

         default:

         return NO_SUCH_PAGE;

      }

      

   }







public static void main(String[] args) {

    

    //    通俗理解就是书、文档

    Book book = new Book();

    //    设置成竖打

    PageFormat pf = new PageFormat();

    pf.setOrientation(PageFormat.PORTRAIT);

    //    通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。

    Paper p = new Paper();

    p.setSize(590,840);//纸张大小 

    p.setImageableArea(10,10, 590,840);//A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72

    pf.setPaper(p);

    //    把 PageFormat 和 Printable 添加到书中,组成一个页面

    book.append(new PrintTest(), pf);



     //获取打印服务对象

     PrinterJob job = PrinterJob.getPrinterJob();      

     // 设置打印类

     job.setPageable(book);

     



     try {

         //可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印

         //boolean a=job.printDialog();

         //if(a)

         //{        

         job.print();

         //}



     } catch (PrinterException e) {

         e.printStackTrace();

     }

   }

}
这个例子实现了打印字符串,线(包括虚线)和打印图片。而且通过Paper的setImageableArea可以设置打印的区域和边距,让开发者随意的设置打印的位置。
下面的打印代码没有设置打印区域,默认为打印纸张的区域和边距,比如我们一般用的A4纸,打印的起点X和Y坐标则是72,72。
无区域设置的代码:

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Component;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;



import java.awt.Toolkit;

import java.awt.RenderingHints;

import java.awt.font.FontRenderContext;

import java.awt.font.LineBreakMeasurer;

import java.awt.font.TextAttribute;

import java.awt.font.TextLayout;

import java.awt.geom.Point2D;

import java.awt.image.BufferedImage;

import java.awt.print.Book;

import java.awt.print.PageFormat;

import java.awt.print.Paper;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

import java.awt.print.PrinterJob;

import java.text.AttributedString;



import javax.swing.JApplet;









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;

      //print string

      String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";

      //转换成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();

       



      switch(pageIndex){

         case 0:

           //设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)

           //Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput

           Font font = new Font("新宋体", Font.PLAIN, 9);

           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);

           //使用抗锯齿模式完成文本呈现



           /*g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,

          RenderingHints.VALUE_TEXT_ANTIALIAS_ON);*/

           // -1- 用Graphics2D直接输出

           //首字符的基线(右下部)位于用户空间中的 (x, y) 位置处

           

           //g2.drawLine(10,10,200,10);  

           

           Image src = Toolkit.getDefaultToolkit().getImage("d://logo.gif");

           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.drawString(str, (float)x, (float)y+1*heigth+img_Height);

           g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));

           

           g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);

           

    

           // -2- 直接构造TextLayout打印



           /*FontRenderContext frc = g2.getFontRenderContext();

           TextLayout layout = new TextLayout(str, font, frc);

           layout.draw(g2, (float)x, (float)y+2*heigth);*/

           // -3- 用LineBreakMeasurer进行打印



           /*AttributedString text = new AttributedString(str);

           text.addAttribute(TextAttribute.FONT, font);

           LineBreakMeasurer lineBreaker = new LineBreakMeasurer(text.getIterator(), frc);

           //每行字符显示长度(点)

           double width = pf.getImageableWidth();

           //首字符的基线位于用户空间中的 (x, y) 位置处

           Point2D.Double pen = new Point2D.Double (100, y+3*heigth);

           while ( (layout = lineBreaker.nextLayout( (float) width)) != null){

              layout.draw(g2, (float)x, (float) pen.y);

              pen.y += layout.getAscent();

           }*/

         return PAGE_EXISTS;

         default:

         return NO_SUCH_PAGE;

      }

      

   }







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();

     }

   }

}

 

 

分享到:
评论
2 楼 waj_615 2015-03-30  
但是打印订单不是简单的string 啊
1 楼 lovesonny 2010-03-25  
thinks 你的帮助

相关推荐

    java实现打印功能代码

    java调用打印机实现word打印功能java调用打印机实现word打印功能

    Java实现打印功能.doc

    以上就是使用Java实现打印功能的主要知识点,涵盖从设置打印参数到绘制内容的所有步骤。需要注意的是,实际的打印任务可能需要根据具体需求进行调整,比如添加页眉页脚、处理多页打印等。此外,Java也提供了...

    java实现图片打印功能

    java实现图片的打印功能,本代码打印的是75*75的二维码,纸张大小定义为120*83,A4纸等请自行定义

    Java实现Web报表打印功能.

    ### Java实现Web报表打印功能:基于iText组件的实践 #### 概述 在Web应用领域,打印功能一直是开发者面临的挑战之一。由于Web应用本质上属于瘦客户端架构,直接操作客户端设备(如打印机)存在限制。这促使业界...

    java实现自动静默打印功能(csdn)————程序.pdf

    在本篇文章中,我们主要讨论如何使用 Java 实现自动静默打印功能,实现无需弹出打印窗口即可直接打印的功能。下面将详细介绍实现思路、技术知识、技术细节和具体代码实现。 一、实现思路 要实现自动打印功能,我们...

    java 实现二维码批量打印

    在本文中,我们将深入探讨如何使用Java实现二维码批量打印,主要基于给定的标题"java 实现二维码批量打印"和描述中的技术环境。首先,我们要理解二维码(Quick Response Code)是一种二维条码,能存储大量数据,常...

    Lodop与java结合使用打印功能

    综上所述,Lodop与Java的结合使用为开发高效、灵活的打印功能提供了便利,尤其适合于条码打印需求。通过合理的集成和API调用,开发者可以构建出满足各种打印场景的应用,提高工作效率,同时保证用户体验。在实际项目...

    java实现word预览打印

    7. **打印功能**: Java提供了Java Print Service API,用于处理打印任务。开发者可以使用这个API来设置打印参数,如纸张大小、打印质量等,并将PDF文件发送到打印机。 8. **相关类文件**: `DocumentHandler.java`、...

    java实现打印.rar

    这个"java实现打印.rar"压缩包包含了一些示例代码,旨在帮助开发者理解如何在Java中实现打印功能。以下是对这些示例文件及其可能涉及的知识点的详细解释: 1. **IwbFrameEmployee.java**: 这个文件很可能包含一个...

    java实现zebra打印条形码

    在IT行业中,条形码打印是一项常见的任务,特别是...通过以上步骤,你便可以在Java中实现对Zebra斑马打印机的条形码打印功能。这个过程涉及到网络编程、字符串处理以及对打印机指令的理解,是一个综合性的IT技术实践。

    Java实现打印功能编程资料

    Java实现打印功能

    java打印功能的实现

    这个包包含了Java打印功能的主要类和接口,如`PrinterJob`类用于创建和管理打印任务,`PageFormat`类用于定义页面布局,`Printable`接口则需要被实现以定义打印内容的生成逻辑。 3. **`PrinterJob`类** `...

    记事本打印和页面设置功能Java实现

    在深入探讨具体实现之前,我们先来了解一下实现打印功能所需要的一些基础知识: 1. **`Graphics`** 类:这是Java中用于绘制的基本类,它提供了一系列的方法来处理屏幕或打印设备上的图像。 2. **`Graphics2D`** 类...

    java 打印pdf文件 也可批量打印

    本文详细介绍了如何使用Java实现PDF文件的打印功能,包括单个文件的打印以及批量打印的方法。通过这些方法,开发者可以根据实际需求灵活选择合适的打印策略。同时,文中也介绍了Adobe Reader的相关命令行参数,以...

    java打印功能实现demo

    在Java编程语言中,实现打印功能是一项常见的任务,特别是在开发企业级应用时。这个"java打印功能实现demo"示例旨在教你如何利用Java的内置打印服务API来完成这一任务。以下是一些关键知识点: 1. **Java Print ...

    在JAVA实现对FORM的打印功能.doc

    在Java编程环境中,实现对FORM(表单)的打印功能是一...理解这些概念并正确地调用它们是成功实现打印功能的关键。在实际应用中,可能还需要处理更多细节,如错误处理、用户交互(确认打印设置等)以及优化打印性能等。

    手机实现蓝牙打印功能(java)

    J2ME 实现蓝牙打印功能 dos.write(0x1D); dos.write(0x0C); //送黑标纸至打印起始位置

    Java实现斑马打印机ZPL指令打印,源码,可运行

    总的来说,Java实现斑马打印机的ZPL指令打印是一个实用的技术,它允许开发人员灵活地控制打印机的功能,实现各种复杂的打印需求。通过理解和使用这个项目,开发者可以快速集成斑马打印机功能到自己的应用中,提升...

Global site tag (gtag.js) - Google Analytics