Printing pdf files using java -
i want print document using java however, program successful printer not printing anything. why that? solutions this? if printer not pdf supported, there way print pdf file or docx files?
package useprintingserviceinjava; import java.io.bufferedinputstream; import java.io.fileinputstream; import java.io.inputstream; import javax.print.doc; import javax.print.docflavor; import javax.print.docprintjob; import javax.print.printservice; import javax.print.printservicelookup; import javax.print.simpledoc; import javax.print.event.printjobadapter; import javax.print.event.printjobevent; public class useprintingserviceinjava { private static boolean jobrunning = true; public static void main(string[] args) throws exception { inputstream is; = new bufferedinputstream(new fileinputstream("paper_sensor.pdf")); docflavor flavor = docflavor.input_stream.pdf; printservice service = printservicelookup.lookupdefaultprintservice(); docprintjob printjob = service.createprintjob(); printjob.addprintjoblistener(new jobcompletemonitor()); doc doc = new simpledoc(is, docflavor.input_stream.autosense, null); printjob.print(doc, null); while (jobrunning) { thread.sleep(1000); } system.out.println("exiting app"); is.close(); } private static class jobcompletemonitor extends printjobadapter { @override public void printjobcompleted(printjobevent jobevent) { system.out.println("job completed"); jobrunning = false; } } }
this code researched still not print. below code based on research:
package javaapplication24; import java.io.bufferedinputstream; import java.io.fileinputstream; import java.io.inputstream; import javax.print.doc; import javax.print.docflavor; import javax.print.docprintjob; import javax.print.printservice; import javax.print.printservicelookup; import javax.print.simpledoc; import javax.print.event.printjobevent; import javax.print.event.printjoblistener; public class handleprintjobevents { public static void main(string[] args) throws exception { // create pdf doc flavor try ( // open image file inputstream = new bufferedinputstream(new fileinputstream("c:\\users\\justine\\documents\\thesis document\\paper_sensor.pdf"))) { // create pdf doc flavor docflavor flavor = docflavor.input_stream.pdf; // locate default print service environment. printservice service = printservicelookup.lookupdefaultprintservice(); // create , return printjob capable of handling data // of supported document flavors. docprintjob printjob = service.createprintjob(); // register listener notified when job complete printjob.addprintjoblistener(new printjobmonitor()); // construct simpledoc specified // print data, doc flavor , doc attribute set. doc doc = new simpledoc(is, docflavor.input_stream.autosense, null); // print document specified job attributes. printjob.print(doc, null); } } private static class printjobmonitor implements printjoblistener { @override public void printdatatransfercompleted(printjobevent pje) { // called notify client data has been // transferred print service, , client may free // local resources allocated data. } @override public void printjobcanceled(printjobevent pje) { // called notify client job canceled // user or program. } @override public void printjobcompleted(printjobevent pje) { // called notify client job completed successfully. } @override public void printjobfailed(printjobevent pje) { // called notify client job failed complete // , have resubmitted. } @override public void printjobnomoreevents(printjobevent pje) { // called notify client no more events delivered. } @override public void printjobrequiresattention(printjobevent pje) { // called notify client error has occurred // user might able fix. } }
}
thank :) *i tried 2 printers still can't print.
i checked code here @ place. cannot print don't have printer around, however, can add printer queue without printing (it starts searching printer infinitely).
especially since said got exception sun.print.printjobflavorexception
, seems logical printer indeed not support pdf printing. verify case, try following:
printservice service = printservicelookup.lookupdefaultprintservice(); int count = 0; (docflavor docflavor : service.getsupporteddocflavors()) { if (docflavor.tostring().contains("pdf")) { count++; } } if (count == 0) { system.err.println("pdf not supported printer: " + service.getname()); system.exit(1); } else { system.out.println("pdf supported printer: " + service.getname()); }
edit:
i used brother dcp-j552dw. following code worked me, except page margin (which of course can adjusted):
public static void main(string[] args) throws ioexception { fileinputstream in = new fileinputstream("test.pdf"); doc doc = new simpledoc(in, docflavor.input_stream.autosense, null); printservice service = printservicelookup.lookupdefaultprintservice(); try { service.createprintjob().print(doc, null); } catch (printexception e) { e.printstacktrace(); } }
the printer did not respond immediately, setting connection took 20 seconds.
Comments
Post a Comment