监视打印机的问题 请问各位前辈,能不能用Java实现对打印机的监视?要监视的内容有打印机当前状态,有几个打印任务,正在打印的任务有多少页。如能实现对打印池的监视就更好了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也没有做过,关注,应该可以,雕用API咯 能不能提供些实现思想?像应该调用哪些API什么的?谢谢了! 一个小例子import javax.swing.*;import java.awt.print.*;import java.awt.event.*;import java.awt.*;import java.io.*;class PrinterWindow extends JFrame implements ActionListener,Printable { int m,n=3,p=1,i=1; //m:总行数、n:每页打印的行数,p:总页数,i:打印的页码。 PrinterJob printerJob; JButton buttonPrint; JLabel label; JTextArea text; CharArrayWriter out; CharArrayReader in; BufferedReader readIn; Container con; PrinterWindow(String s) { super(s); setSize(360,200); setLocation(120,120); setVisible(true); label=new JLabel("单击按钮开始打印第"+i+"页"); buttonPrint=new JButton("打印第"+i+"页"); buttonPrint.addActionListener(this); text=new JTextArea(); con=getContentPane(); JPanel panel=new JPanel(new GridLayout(1,2)); panel.add(label); panel.add(buttonPrint); con.add(new JScrollPane(text),BorderLayout.CENTER); con.add(panel,BorderLayout.SOUTH); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } public void actionPerformed(ActionEvent e) { try { label.setText("正在打印第"+i+"页"); if(i==1) { out=new CharArrayWriter(); char message[]=text.getText().toCharArray(); out.write(message); //将文本区中的内容写入内存。 m=text.getLineCount(); p=(m%n==0)?(m/n):(m/n+1); in=new CharArrayReader(out.toCharArray()); readIn=new BufferedReader(in); } if(i<=p) { printerJob=PrinterJob.getPrinterJob(); PageFormat pageFormat=printerJob.pageDialog(printerJob.defaultPage()); text.setText(null); String str=null;int number=1; text.append("这是第"+i+"页\n\n"); while((number<=n)&&(str=readIn.readLine())!=null) //读入需要的行数。 { text.append(str+"\n"); number++; } boolean boo=printerJob.printDialog() ; //弹出打印对话框。 if(boo==true) { printerJob.setPrintable(this,pageFormat); printerJob.print(); i++; buttonPrint.setText("打印下一页吗?"); } } else { label.setText("打印完毕,再打一份吗?"); i=1; buttonPrint.setText("打印第"+i+"页"); in=new CharArrayReader(out.toCharArray()); readIn=new BufferedReader(in); String str=null; text.setText(null); while((str=readIn.readLine())!=null) //文本区恢复原有文本。 { text.append(str+"\n"); } out.close(); readIn.close(); in.close(); } } catch(Exception ee) { } } public int print(Graphics graphics,PageFormat pageFormat,int pageIndex) { if(pageIndex==0) //只打印一页。 { graphics.translate(80,80); text.paintAll(graphics); return Printable.PAGE_EXISTS; //通知打印机已经准备好了该打印页。 } else { return Printable.NO_SUCH_PAGE; //打印作业布置结束。 } }}public class Example{ public static void main(String args[]) { PrinterWindow win=new PrinterWindow("窗口"); }} http://publib.boulder.ibm.com/iseries/v5r2/ic2989/index.htm?info/rzahh/javadoc/PrinterFileAttrs.html java 打印程序中打印机属性设置 使用如下方法可以获得PrintJob的实例用于控制打印操作: Toolkit.getPrintJob(Frame f, String jobtitle, Properties prop) 那么对于打印属性的设置可以通过对prop的属性设置来实现,打印属性包括: awt.print.destination: 可以是"printer"或"file" awt.print.printer: 打印机名 awt.print.fileName: 打印文件名 awt.print.numCopies: 打印份数 awt.print.options: 打印命令的打印选项 awt.print.orientation: 打印方向,可以是"portrait"或"landscape" awt.print.paperSize: 纸张大小,可以是"letter","legal","executive"或"a4" 我想用Java实现对打印机的监视,举个例子:我在word中打印一篇文档,用Java写的监视程序应该能监测到向打印机添加了打印任务,并能获取打印任务的各种属性。能不能实现? ireport针打不正常及如何精确控制纸长? java 写 properties 文件 请教:毕业设计的相关知识 Linux下Java中怎样调用另一个程序和输入参数 关于java3D的问题,大家踊跃参加,我要散分啊! 在java1.4+mySql中,如何把一个类存储到数据库中,并读回? showMsg()简单问题 新手上路,多多关照!怎样成为一个熟练的java工人?呵呵 通过串口进行打印时出现乱码,请帮忙 请大家谈谈JAVA.API.DOC应该怎么用?言者有分! 请问五子棋禁手算法的思路? 请问java中全局变量应该放哪儿?
import javax.swing.*;
import java.awt.print.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
class PrinterWindow extends JFrame implements ActionListener,Printable
{
int m,n=3,p=1,i=1; //m:总行数、n:每页打印的行数,p:总页数,i:打印的页码。
PrinterJob printerJob;
JButton buttonPrint;
JLabel label;
JTextArea text;
CharArrayWriter out;
CharArrayReader in;
BufferedReader readIn;
Container con;
PrinterWindow(String s)
{
super(s);
setSize(360,200);
setLocation(120,120);
setVisible(true);
label=new JLabel("单击按钮开始打印第"+i+"页");
buttonPrint=new JButton("打印第"+i+"页");
buttonPrint.addActionListener(this);
text=new JTextArea();
con=getContentPane();
JPanel panel=new JPanel(new GridLayout(1,2));
panel.add(label);
panel.add(buttonPrint);
con.add(new JScrollPane(text),BorderLayout.CENTER);
con.add(panel,BorderLayout.SOUTH);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e)
{
try
{
label.setText("正在打印第"+i+"页");
if(i==1)
{
out=new CharArrayWriter();
char message[]=text.getText().toCharArray();
out.write(message); //将文本区中的内容写入内存。
m=text.getLineCount();
p=(m%n==0)?(m/n):(m/n+1);
in=new CharArrayReader(out.toCharArray());
readIn=new BufferedReader(in);
}
if(i<=p)
{
printerJob=PrinterJob.getPrinterJob();
PageFormat pageFormat=printerJob.pageDialog(printerJob.defaultPage());
text.setText(null);
String str=null;
int number=1;
text.append("这是第"+i+"页\n\n");
while((number<=n)&&(str=readIn.readLine())!=null) //读入需要的行数。
{
text.append(str+"\n");
number++;
}
boolean boo=printerJob.printDialog() ; //弹出打印对话框。
if(boo==true)
{
printerJob.setPrintable(this,pageFormat);
printerJob.print();
i++;
buttonPrint.setText("打印下一页吗?");
}
}
else
{
label.setText("打印完毕,再打一份吗?");
i=1;
buttonPrint.setText("打印第"+i+"页");
in=new CharArrayReader(out.toCharArray());
readIn=new BufferedReader(in);
String str=null;
text.setText(null);
while((str=readIn.readLine())!=null) //文本区恢复原有文本。
{
text.append(str+"\n");
}
out.close();
readIn.close();
in.close();
}
}
catch(Exception ee)
{
}
}
public int print(Graphics graphics,PageFormat pageFormat,int pageIndex)
{
if(pageIndex==0) //只打印一页。
{
graphics.translate(80,80);
text.paintAll(graphics);
return Printable.PAGE_EXISTS; //通知打印机已经准备好了该打印页。
}
else
{
return Printable.NO_SUCH_PAGE; //打印作业布置结束。
}
}
}
public class Example
{
public static void main(String args[])
{
PrinterWindow win=new PrinterWindow("窗口");
}
}
使用如下方法可以获得PrintJob的实例用于控制打印操作:
Toolkit.getPrintJob(Frame f, String jobtitle, Properties prop)
那么对于打印属性的设置可以通过对prop的属性设置来实现,打印属性包括:
awt.print.destination: 可以是"printer"或"file"
awt.print.printer: 打印机名
awt.print.fileName: 打印文件名
awt.print.numCopies: 打印份数
awt.print.options: 打印命令的打印选项
awt.print.orientation: 打印方向,可以是"portrait"或"landscape"
awt.print.paperSize: 纸张大小,可以是"letter","legal","executive"或"a4"