import javax.print.PrintServiceLookup;
import javax.print.PrintService;
import javax.print.DocFlavor;
import javax.print.ServiceUI;
import javax.print.attribute.*;
import javax.swing.UIManager;
import javax.print.DocPrintJob;
import javax.print.attribute.standard.Copies;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;
import javax.print.SimpleDoc;
import java.io.ByteArrayInputStream;class Pr {
class myPrintJob extends PrintJobAdapter {
public void printDataTransferCompleted(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,已成功地将数据传输到打印服务,客户端可以释放分配给该数据的本地资源。");
}
public void printJobCanceled(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,作业已被用户或程序取消。");
}
public void printJobCompleted(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,作业已成功完成。");
}
public void printJobFailed(PrintJobEvent pje) {
System.out.println("调用此方法来通知客户端,无法成功完成作业,必须重新提交该作业。");
}
public void printJobNoMoreEvents(PrintJobEvent pje) {
System.out.println("调用此方法来通知客户端,不需要再提供事件.");
}
public void printJobRequiresAttention(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,可能会发生一些用户可纠正的问题(例如打印机缺纸).");
}}
PrintService se = null;
PrintService[] services = null;
PrintRequestAttributeSet attrs = null;
DocFlavor flavor = null;
PrintService select = null;
DocPrintJob job = null;
String str = null;
ByteArrayInputStream os = null;
DocAttributeSet das = new HashDocAttributeSet();
SimpleDoc doc = null;
public Pr() {
se = PrintServiceLookup.lookupDefaultPrintService();
services = PrintServiceLookup.lookupPrintServices(null, null);
attrs = new HashPrintRequestAttributeSet();
flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
str = "这是个测试!";
os = new ByteArrayInputStream(str.getBytes());
doc = new SimpleDoc(os, flavor,null);
}
public void showDialog() {
select = ServiceUI.printDialog(null,200,200,services,se,flavor,attrs);
job = select.createPrintJob();
job.addPrintJobListener(new myPrintJob());
attrs.add(new Copies(2));
doc = new SimpleDoc(os, flavor,null);
if (select != null)
go();
}
public void go() {
try {
job.print(doc,attrs);
} catch (Exception e) {
e.printStackTrace();
}
}
}public class Test { public static void main(String[] args) throws Exception {
Pr p = new Pr();
p.showDialog();
}
}以上是我学习JDK1.4的打印API,试验写的.
打印总是不能打印出预期的结果.首先中文是乱码,还有就是不能打印完全.
注册了临听器myPrintJob,但不知里面应该如何写.
请帮小弟看一下.
import javax.print.PrintService;
import javax.print.DocFlavor;
import javax.print.ServiceUI;
import javax.print.attribute.*;
import javax.swing.UIManager;
import javax.print.DocPrintJob;
import javax.print.attribute.standard.Copies;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;
import javax.print.SimpleDoc;
import java.io.ByteArrayInputStream;class Pr {
class myPrintJob extends PrintJobAdapter {
public void printDataTransferCompleted(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,已成功地将数据传输到打印服务,客户端可以释放分配给该数据的本地资源。");
}
public void printJobCanceled(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,作业已被用户或程序取消。");
}
public void printJobCompleted(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,作业已成功完成。");
}
public void printJobFailed(PrintJobEvent pje) {
System.out.println("调用此方法来通知客户端,无法成功完成作业,必须重新提交该作业。");
}
public void printJobNoMoreEvents(PrintJobEvent pje) {
System.out.println("调用此方法来通知客户端,不需要再提供事件.");
}
public void printJobRequiresAttention(PrintJobEvent pje) {
System.out.println(
"调用此方法来通知客户端,可能会发生一些用户可纠正的问题(例如打印机缺纸).");
}}
PrintService se = null;
PrintService[] services = null;
PrintRequestAttributeSet attrs = null;
DocFlavor flavor = null;
PrintService select = null;
DocPrintJob job = null;
String str = null;
ByteArrayInputStream os = null;
DocAttributeSet das = new HashDocAttributeSet();
SimpleDoc doc = null;
public Pr() {
se = PrintServiceLookup.lookupDefaultPrintService();
services = PrintServiceLookup.lookupPrintServices(null, null);
attrs = new HashPrintRequestAttributeSet();
flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
str = "这是个测试!";
os = new ByteArrayInputStream(str.getBytes());
doc = new SimpleDoc(os, flavor,null);
}
public void showDialog() {
select = ServiceUI.printDialog(null,200,200,services,se,flavor,attrs);
job = select.createPrintJob();
job.addPrintJobListener(new myPrintJob());
attrs.add(new Copies(2));
doc = new SimpleDoc(os, flavor,null);
if (select != null)
go();
}
public void go() {
try {
job.print(doc,attrs);
} catch (Exception e) {
e.printStackTrace();
}
}
}public class Test { public static void main(String[] args) throws Exception {
Pr p = new Pr();
p.showDialog();
}
}以上是我学习JDK1.4的打印API,试验写的.
打印总是不能打印出预期的结果.首先中文是乱码,还有就是不能打印完全.
注册了临听器myPrintJob,但不知里面应该如何写.
请帮小弟看一下.
整理一下问题.
class myPrintJob extends PrintJobAdapter {
public void printDataTransferCompleted(PrintJobEvent pje) {}
public void printJobCanceled(PrintJobEvent pje) {}
public void printJobCompleted(PrintJobEvent pje) {}
public void printJobFailed(PrintJobEvent pje) {}
public void printJobNoMoreEvents(PrintJobEvent pje) {}
public void printJobRequiresAttention(PrintJobEvent pje) {}
}class Pr {
PrintService se = null;
PrintService[] services = null;
PrintRequestAttributeSet attrs = null;
DocFlavor flavor = null;
PrintService select = null;
DocPrintJob job = null;
String str = null;
ByteArrayInputStream os = null;
DocAttributeSet das = new HashDocAttributeSet();
SimpleDoc doc = null; public Pr() {
se = PrintServiceLookup.lookupDefaultPrintService();
services = PrintServiceLookup.lookupPrintServices(null, null);
attrs = new HashPrintRequestAttributeSet();
flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
str = "This is test!"; //将要打印的字符串
os = new ByteArrayInputStream(str.getBytes());
doc = new SimpleDoc(os, flavor,null);
}
public void showDialog() {
select = ServiceUI.printDialog(
null,200,200,services,se,flavor,attrs);
job = select.createPrintJob();
job.addPrintJobListener(new myPrintJob());
attrs.add(new Copies(2));
doc = new SimpleDoc(os, flavor,null);
if (select != null)
go();
} public void go() {
try {
job.print(doc,attrs);//打印
} catch (Exception e) {
e.printStackTrace();
}
}
}public class Test {
public static void main(String[] args) throws Exception {
Pr p = new Pr();
p.showDialog();
}
}
其实主要想问的是怎么写监听打印完成的监听器.
我重写了所有PrintJobAdapter的方法,发现调用两个方法//已成功地将数据传输到打印服务,客户端可以释放分配给该数据的本地资源。
public void printDataTransferCompleted(PrintJobEvent pje)
//调用此方法来通知客户端,不需要再提供事件。
public void printJobNoMoreEvents(PrintJobEvent pje)
现在调用job.print(doc,attrs);打印机有反应,但只打第一个字符,有时只打一小段字符串.从没用过JDK1.4的打印API,请那位看一下那里错了.