您的位置:

java打印功能,java打印控件

本文目录一览:

java怎么实现打印机打印

接口 PrintService 是 DocPrintJob 的工厂。PrintService 描述了打印机的功能,并可查询它来了解打印机支持的属性

1 package com.tj.print; 2  3 import java.io.File; 4 import java.io.FileInputStream; 5  6 import javax.print.Doc; 7 import javax.print.DocFlavor; 8 import javax.print.DocPrintJob; 9 import javax.print.PrintService;10 import javax.print.PrintServiceLookup;11 import javax.print.ServiceUI;12 import javax.print.SimpleDoc;13 import javax.print.attribute.DocAttributeSet;14 import javax.print.attribute.HashDocAttributeSet;15 import javax.print.attribute.HashPrintRequestAttributeSet;16 import javax.swing.JFileChooser;17 18 public class PrintDemo1 {19     public static void main(String[] args) {20         JFileChooser fileChooser = new JFileChooser(); // 创建打印作业21         int state = fileChooser.showOpenDialog(null);22         if (state == fileChooser.APPROVE_OPTION) {23             File file = fileChooser.getSelectedFile(); // 获取选择的文件24             // 构建打印请求属性集25             HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();26             // 设置打印格式,因为未确定类型,所以选择autosense27             DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;28             // 查找所有的可用的打印服务29             PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);30             // 定位默认的打印服务31             PrintService defaultService = PrintServiceLookup32                     .lookupDefaultPrintService();33             // 显示打印对话框34             PrintService service = ServiceUI.printDialog(null, 200, 200,35                     printService, defaultService, flavor, pras);36             if (service != null) {37                 try {38                     DocPrintJob job = service.createPrintJob(); // 创建打印作业39                     FileInputStream fis = new FileInputStream(file); // 构造待打印的文件流40                     DocAttributeSet das = new HashDocAttributeSet();41                     Doc doc = new SimpleDoc(fis, flavor, das);42                     job.print(doc, pras);43                 } catch (Exception e) {44                     e.printStackTrace();45                 }46             }47         }48     }49 }

在java中什么是打印?什么是打印功能?

如楼上所言,标准打印输出,system.out.println( );如果不加ln则不换行打印输出(默认带ln),当然更多时候是用键盘敲syso然后alt+/会直接打印输出system.out.println( );

java(web)打印 通常是怎么实现的

Web系统中,打印功能一直是个老大难问题,因此产生了很多第三方的控件,多数要收费,而且跟自己的系统结合有一定的麻烦。系统采用J2EE技术,jsp打印问题同样存在于OA中。

打印方式有三种:一是不经过任何修改,直接调用javascript中的window.print()打印。二根据客户要求的报表格式,编写相应格式的html,装载数据打印,同样调用window.print()打印,只是对html的格式要求比较高。三是通过客户提供的word格式,通过xml配置文件与数据库的数据进行关联,自动装载数据到word中打印,这里是利用客户端的word进行打印。

第一种几乎不用编写程序,最简单快捷,这里会遇到几个问题,只能打印表单内容,按钮不希望打印出来;页眉页脚不想打印出来;IE的titile不想打印出来。

如何在java web项目中实现打印功能,比如一

你可以了解下jatoolsprint 目前所遇到的打印问题都可以解决。

不过要装一个控件。大小60K.

这是他们网上的介绍。你可以了解下。

jatoolsPrinter (杰表.打印控件)是一款实现网页套打的专用工具。作为web应用开发者,我们经常会遇到在浏览器中打印报表、票据的需求,这些需求浏览器本身的打印功能一般不能满足, 如精确分页,套打等。这就需要有一种能解决常见的浏览器端打印问题的软件工具,这也是 jatoolsPrinter 的研发背景。

jatoolsPrinter 的特点是可以直接对web页面进行精确的分页打印。jatoolsPrinter 通过在网页中嵌入控件,解决了web客户端精确打印,批量打印,打印配置自动保留等问题。 具体功能有:

支持设置打印参数,指定输出打印机、纸张类型,打印方向(横、竖)等 。

支持html格式的页脚、页眉设置,也就是说,页脚页眉可设置图片等,如公司logo。

支持程序分页与自动分页。

支持打印参数自动保留,待下一次打印同一票据时,自动设置,这使客户端也可以控制打印参数。

支持打印预览,支持预览时指定页、指定份数打印。

支持直接打印指定票据的URL。

支持票据及其附件的批量打印。

支持取得本机中的可用打印机,可用纸张类型列表,帮您设计出更友好的参数设置界面。

支持回调,可以帮助您在打印后自动处理有关事务,比如打印后自动关闭窗口、自动递交表单数据等。

支持票据套打时,底图仅在打印预览时显示,不输出到打印机。

小巧,整个控件只有60K。不需要额外的软件包支持。

与您项目采用的技术标准无关,J2EE、.NET 项目均可。

IE 5.5+ 中适用。

java如何实现打印功能?

Print.java--打印内容定义

[code]

import java.awt.*;

import java.awt.event.*;

import java.awt.print.*;

import java.awt.image.*;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.border.*;

import javax.swing.event.*;

import java.util.*;

import java.io.*;

public class Print implements Printable{

int m_wPage;

int m_hPage;

int m_orientation;

Printable m_target;

int maxNumPage=1;

String title="数据表格打印";

Font titleFont=new Font("黑体",Font.BOLD,14);

boolean hasTail=true;

int tailAlign=0;

int headAlign=0;

int topSpace=0;

int leftSpace=0;

int yStart=0;

int yEnd=0;

int xStart=topSpace;

int xEnd=0;

int x=0,y=0;

String strTemp="打印内容";

public void doPrint(){

try{

m_orientation=PageFormat.PORTRAIT;

//设置打印对象,默认纸张

PrinterJob prnJob=PrinterJob.getPrinterJob();

PageFormat pageFormat=prnJob.defaultPage();

pageFormat.setOrientation(m_orientation);

m_wPage=(int)(pageFormat.getWidth());

m_hPage=(int)(pageFormat.getHeight());

//将待打印的窗体根据默认纸张设置传入打印对象

prnJob.setPrintable(this,pageFormat);

if(!prnJob.printDialog()) return;

prnJob.print();

}catch(PrinterException ex){

ex.printStackTrace();

System.err.println("打印错误:"+ex.toString());

}

}

/**

* 初始化打印参数

*/

public void initPrintParameter()

{

}

/**

*构造打印内容,以送打印机打印

*/

public int print(Graphics pg,PageFormat pageFormat,

int pageIndex) throws PrinterException{

//初始化打印参数

initPrintParameter();

//将画布设置为页面大小

pg.translate((int)pageFormat.getImageableX(),

(int)pageFormat.getImageableY());

int wPage=0;

int hPage=0;

//根据打印机页面设置调整画布大小

if(pageFormat.getOrientation()==pageFormat.PORTRAIT){

wPage=(int)pageFormat.getImageableWidth();

hPage=(int)pageFormat.getImageableHeight();

}

else{

wPage=(int)pageFormat.getImageableWidth();

wPage+=wPage/2;

hPage=(int)pageFormat.getImageableHeight();

pg.setClip(0,0,wPage,hPage);

}

wPage=wPage-2*leftSpace;

hPage=hPage-2*topSpace;

xStart=leftSpace;

xEnd=wPage-2;

//为画布设置颜色和字体

int y=topSpace;

pg.setFont(titleFont);

pg.setColor(Color.black);

//画标题,并使其居中

Font fn=pg.getFont();

FontMetrics fm=pg.getFontMetrics();

y+=fm.getAscent();

alignText(title,pg,y,xStart,xEnd,headAlign);

y+=30;

x=leftSpace+2;

Font headerFont=new Font("宋体",Font.BOLD,14);

pg.setFont(headerFont);

fm=pg.getFontMetrics();

int h=fm.getAscent();

yStart=y-1;

y+=h;

pg.setFont(headerFont);

fm=pg.getFontMetrics();

int header=y;

h=fm.getHeight();

//计算行高,每页行数,总行数和指定页码的起始行、结束行

int rowH=Math.max(h,10);

int tailH=rowH+30;

int rowPerPage=0;

int leftPix=0;

if(hasTail){

rowPerPage=(hPage-header-tailH)/rowH;

leftPix=(hPage-header-tailH)%rowH;

yEnd=hPage-leftPix-tailH+2;

}

else{

rowPerPage=(hPage-header)/rowH;

leftPix=(hPage-header)%rowH;

yEnd=hPage-leftPix+2;

}

pg.drawString(strTemp,x,y);

//画表格边框

pg.drawLine(xStart,yStart,xStart,yEnd);

pg.drawLine(xStart,yStart,xEnd,yStart);

pg.drawLine(xEnd,yStart,xEnd,yEnd);

pg.drawLine(xStart,yEnd,xEnd,yEnd);

//打印页码

if(hasTail){

int pageNumber=pageIndex+1;

String s="第"+pageNumber+"页";

alignText(s,pg,yEnd+30,xStart,xEnd,tailAlign);

}

System.gc();

return PAGE_EXISTS;

}

/**

* 文字排列,坐标在y处,显示范围(start-end)

* 0表示居中显示,1表示左对齐,2表示右对齐

*/

private void alignText(String s,Graphics pg,int y,int start,

int end,int mode){

Font fn=pg.getFont();

FontMetrics fm=pg.getFontMetrics();

int wString=fm.stringWidth(s);

int x=start;

switch(mode)

{

case 0:

if((end-start-wString)0) x=start+(end-start-wString)/2;

break;

case 1:

break;

case 2:

if((end-start-wString)0) x=start+(end-start-wString);

break;

}

pg.drawString(s,x,y);

}

public static void main(String[] args){

Print p=new Print();

p.doPrint();

}

}

[code]

运行方法:

javac -d . Print.java

java Print

自己运行一下

用java怎样实现批量打印

下面是实现Java批量打印功能的具体工具类,其中的Info类和UserClass为具体的快递面单中要打印的信息,以参数的方式传递过来,循环调用Java PrinterJob服务进行打印;这里的快递尺寸已经调整好,可以使用,如需添加只要根据实际的面单进行调整,也可以专门写一个接口类的形式来创建快递面单的尺寸,本人没有尝试;如遇问题欢迎留言,共同探讨!

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

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.util.HashMap;

import java.util.List;

import java.util.Map;

import javax.swing.JOptionPane;

import com.myprint.model.Info;

import com.myprint.model.UserClass;

public class PrintUtil implements Printable{

/**

* 纸张尺寸

*/

private double width;

private double height;

/**

* 打印起始坐标

*/

private double startX;

private double startY;

//打印页数

private int pages;

//打印数据坐标

private MapString, Float pcoord;

//发件方信息

private SenderInfo info;

//打印数据源

private ListUserClass sourcelist;

//private int PAGES = 0;

//private PrintPaper printpaper;

private UserObject obj;

public PrintUtil(){}

public PrintUtil(int expkind, UserObject obj, ListObject sourcelist)

{

this.pcoord = this.pcoord == null ? new HashMapString, Float() : this.pcoord;

this.pcoord.clear();

this.info = info;

this.sourcelist = sourcelist;

switch(expkind)

{

case 0: //EMS

this.width = 652;

this.height = 360;

this.startX = 30;

this.startY = 80;

this.pages = this.sourcelist == null ? 0 : this.sourcelist.size();

pcoord.put("nameX", 30F);

pcoord.put("nameY", 80F + 30F);

pcoord.put("numX", 30F + 90F);

pcoord.put("numY", 80F + 30F);

pcoord.put("cmpX", 30F);

pcoord.put("cmpY", 80F + 60F);

pcoord.put("addrX", 30F);

pcoord.put("addrY", 80F + 90F);

pcoord.put("RnameX", 30F + 290F);

pcoord.put("RnameY", 80F + 30F);

pcoord.put("RnumX", 30F + 390);

pcoord.put("RnumY", 80F + 30);

pcoord.put("RcmpyX", 30F + 280);

pcoord.put("RcmpyY", 80F + 55);

pcoord.put("RaddrX", 30F + 280);

pcoord.put("RaddrY", 80F + 90);

break;

case 1://顺风快递

this.width = 632;

this.height = 412;

this.startX = 40;

this.startY = 30;

this.pages = this.sourcelist == null ? 0 : this.sourcelist.size();

pcoord.put("nameX", 285F);

pcoord.put("nameY", 126F);

pcoord.put("numX", 200F);

pcoord.put("numY", 185F);

pcoord.put("cmpX", 120F);

pcoord.put("cmpY", 126F);

pcoord.put("addrX", 120F);

pcoord.put("addrY", 145F);

pcoord.put("RnameX", 275F);

pcoord.put("RnameY", 240F);

pcoord.put("RnumX", 200F);

pcoord.put("RnumY", 300F);

pcoord.put("RcmpyX", 130F);

pcoord.put("RcmpyY", 240F);

pcoord.put("RaddrX", 130F);

pcoord.put("RaddrY", 270F);

break;

case 2://申通快递

this.width = 652;

this.height = 360;

this.startX = 30;

this.startY = 80;

this.pages = this.sourcelist == null ? 0 : this.sourcelist.size();

pcoord.put("nameX", 42F);

pcoord.put("nameY", 100F);

pcoord.put("numX", 62F);

pcoord.put("numY", 200F);

pcoord.put("cmpX", 42F);

pcoord.put("cmpY", 126F);

pcoord.put("addrX", 42F);

pcoord.put("addrY", 155F);

pcoord.put("RnameX", 320F);

pcoord.put("RnameY", 100F);

pcoord.put("RnumX", 330F);

pcoord.put("RnumY", 200F);

pcoord.put("RcmpyX", 310F);

pcoord.put("RcmpyY", 126F);

pcoord.put("RaddrX", 310F);

pcoord.put("RaddrY", 155F);

break;

default:

break;

}

}

/**

* @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 {

//转换成Graphics2D

Graphics2D g2 = (Graphics2D) gra;

//设置打印颜色为黑色

g2.setColor(Color.black);

switch(pageIndex){

case 0:

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

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

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

float[] dash1 = {2.0f};

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

g2.drawString(info.getSname() == null ? "" : info.getSname(), pcoord.get("nameX"), pcoord.get("SnameY"));

g2.drawString(info.getSnum() == null ? "" : info.getSnum(), pcoord.get("numX"), pcoord.get("numY"));

g2.drawString(info.getScmp() == null ? "" : info.getScmp(), pcoord.get("cmpX"), pcoord.get("cmpY"));

g2.drawString(info.getSaddr() == null ? "" : info.getSaddr(), pcoord.get("addrX"), pcoord.get("addrY"));

g2.drawString(obj.getRname() == null ? "" : obj.getRname(), pcoord.get("rnameX"), pcoord.get("rnameY"));

g2.drawString(obj.getRnum() == null ? "" : obj.getRnum(), pcoord.get("rnumX"), pcoord.get("rnumY"));

g2.drawString(obj.getRcmpy() == null ? "" : obj.getRcmpy(), pcoord.get("rcmpyX"), pcoord.get("rcmpyY"));

g2.drawString(obj.getRaddr() == null ? "" : obj.getRaddr(), pcoord.get("raddrX"), pcoord.get("raddrY"));

return PAGE_EXISTS;

default:

return NO_SUCH_PAGE;

}

}

// 打印内容到指定位置

public void printContent()

{

if (sourcelist != null sourcelist.size() 0) // 当打印内容不为空时

{

//PAGES = printpaper.getSourcelist().size(); // 获取打印总页数

// 书、文档

Book book = new Book();

// 设置成竖打

PageFormat pf = new PageFormat();

pf.setOrientation(PageFormat.PORTRAIT);

// 通过Paper设置页面的空白边距和可打印区域。

Paper p = new Paper();

p.setSize(this.width,this.height);//纸张大小

p.setImageableArea(this.startX,this.startY, this.width,this.height);//设置打印区域

pf.setPaper(p);

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

book.append(this, pf);

//获取打印服务对象

PrinterJob job = PrinterJob.getPrinterJob();

// 设置打印类

job.setPageable(book);

try {

//直接打印

for(UserObject obj: sourcelist)

{

this.obj= obj;

job.print();

}

//}

} catch (PrinterException e) {

e.printStackTrace();

}

}

else

{

// 如果打印内容为空时,提示用户打印将取消

JOptionPane.showConfirmDialog(null,

"对不起, 打印内容为空, 打印取消!",

"提示", JOptionPane.DEFAULT_OPTION,

JOptionPane.WARNING_MESSAGE);

}

}

}