How can I print duplex in java!?
Here's my code, but it didn't work - it only works in microsoft word (so the printer can do it)
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(2));
pras.add(Sides.DUPLEX);
PrinterJob pj = PrinterJob.getPrinterJob();
PageFormat pf = pj.defaultPage();
Paper temp = pf.getPaper();
temp.setImageableArea(1, 3, temp.getWidth(), temp.getHeight());
pf.setPaper(temp);
if (pj.printDialog(pras)) {
try {
pj.setPrintable(this, pf);
pj.print(pras); // Drucken
return true;
} catch (Exception PrintException) {
.....
}
I tried to give only the attributes to print, only to the dialog, etc. etc. etc.
It print's the document 2 times, but not duplex! (also tried Sides.TWO_SIDED_LONG_EDGE..)
The Problem was my printer,... it always turn the option for duplex to be disabled.
Related
I am trying to print a pdf document using java.awt.print.PrinterJob.print (PrintRequestAttributeSet attributes). Before that, I put the necessary attributes in attributes using PrinterJob.printerDialog (attributes) and they really get there, but from everything I've tried, only the change in the number of pages that will be printed has been applied. The rest of the settings are ignored. How can I get the printer to print with the settings I want?
pdfReport - byte[] which was obtained with DatatypeConverter.parseBase64Binary from
printerService - standart "Microsoft Print to PDF"
PDDocument document = PDDocument.load(pdfReport);
try {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(printer.printerService);
HashPrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
if (job.printDialog(attributes)) {
try {
job.print(attributes);
} catch (PrinterException e) {
System.out.println(e);
}
}
} finally {
document.close();
}
P.S. : when the program is running, sun.awt.windows.WPrinterJob is used as the PrinterJob implemenjatation
How can I print a "java.awt.print.Printable" object silently to a PDF?
Few things to note:
I do not have the data as a pdf file
I'm working on existing code, so I cannot step away from the printable interface
So i can print it just fine with job.printDialog(). But I need to be able to do that silently (without user input). The available PDF printer is "Adobe PDF", I suppose others can be installed if needed.
Here's the basic code:
Printable printout = /*object*/;
Book pageable = new Book();
pageable.append(printout, pageFormat);
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();
// Add Filepath?
PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
if (ps.length == 0)
throw new IllegalStateException("No Printer found");
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(ps[0]);
job.setPrintable(printout);
I eventually decided to step away from trying to do it in java and instead used a PDF printer which has the option to print silently to a predetermined path.
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();
PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
System.out.println("Available printers: " + Arrays.asList(ps));
PrintService myService = null;
for (PrintService printService : ps) {
if (printService.getName().contains("PDF Writer - bioPDF")) {
myService = printService;
break;
}
}
if (myService == null) {
throw new IllegalStateException("bioPDF Printer not found");
}
PrinterJob job = PrinterJob.getPrinterJob();
job.setJobName(jobName);
job.setPrintService(myService);
job.setPrintable(printout);
job.print();
I want to use print product information on label printer. I have Zebra TLP 2844 This printer support EPL2 programming language. When I want to print non-ASCII character printer just print "?" instead of the correct character. What I did?
First I created a simple text file with the below content
əğüçşıö
and press CTRL+P to print. Output is ok printer print all characters normally.
But when I use EPL2 commands like below
N
A220,120,0,4,1,1,N,"əğçşıüö"
P1
My printer gives the below output
??ç??üö
How can I solve this problem? I use java print api to send command to my printer.
And this my code
PrinterJob pj = PrinterJob.createPrinterJob();
Doc doc = new SimpleDoc(sb.toString().getBytes(), DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
boolean result = false;
javax.print.PrintService printService = PrintServiceLookup.lookupPrintServices(null, null)[0];
try {
printService.createPrintJob().print(doc, null);
} catch (PrintException e) {
e.printStackTrace();
}
PrinterJob pj = PrinterJob.createPrinterJob();
Doc doc = new SimpleDoc(sb.toString().getBytes(), DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
boolean result = false;
javax.print.PrintService printService = PrintServiceLookup.lookupPrintServices(null, null)[0];
try {
printService.createPrintJob().print(doc, null);
} catch (PrintException e) {
e.printStackTrace();
}
Its not an issue with the code it's an issue with the printer. Most printers don't include those characters in their standard font set. You either need to use the character's hex to call them or, if they're not included on the font set on the printer, download a different font.
I've code up and running for sending Blob-Objects to a printer using javax.print. Everything works fine, except in some cases only the first page of multipage PDF-files is printed. The file looks normal when opened in acrobat and when I take the OutputStream that is used to feed the printjob and save it to another file I get and exact copy - so the stream seems to be okay. I have no idea why the following pages are dropped in some cases. here's my code:
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
aset.add(OrientationRequested.PORTRAIT);
aset.add(Sides.ONE_SIDED);
aset.add(MediaSizeName.ISO_A4);
aset.add(new JobName("Sammelausdruck", null));
ArrayList<String> fehlerDokumente = new ArrayList<String>();
//some standard print dialog
PrintService printService = ServiceUI.printDialog(null, 50, 50,
PrintServiceLookup.lookupPrintServices(null, aset), PrintServiceLookup.lookupDefaultPrintService(),
null, aset);
if (printService != null) {
DocPrintJob docjob = printService.createPrintJob();
aset.remove(JobName.class);
aset.add(new JobName(dok.getDokbezeichnung(), null));
File file = <some PDF-file>;
try {
FileInputStream psStream = new FileInputStream(file);
if (file.exists() && !file.isDirectory()) {
DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
SimpleDoc doc = new SimpleDoc(psStream, psInFormat, null);
docjob.print(doc, aset);
}
} catch (FileNotFoundException e) {
...
} catch (PrintException e) {
...
}
}
}
Any ideas? I'm even interested in debug-ideas.
thank you
Edit:
In some very rare cases the printer (a professional office-printer with a touchscreen) provides an error-message that no matching paper is found for the given page-size and the pagesize shown is slightly off Din-A4 (210,2 x 295,8 or somthing like that). In this cases, if i manually tell the printer to use Din-A4, the printjob continues. I don't know if that has a complete different cause or is just another peculiarity of the same problem. I also tried to fiddle around with the MediaPrintableArea Attribute, but that didn't help either.
I am printing a .txt file using DocPrintJob. This works fine.
The file will be printed from a Dot Matrix Printer. Now, the issue which I am facing is -:
As per my requirement, the paper needs to set back automatically to
perforated position after printing one record.
But while printing directly from the application, the paper is not automatically setting back to perforated position.
But while giving print of file manually by opening in notepad, printing happens properly with automatic paper adjustment i.e. the paper sets back to the perforated position for next printing
I tried using line feeds and carriage returns at the end of each page. But it didn't work out.
Is there any way out to set the adjustment of printer through code?
Here is my sample code -:
private static void print(String fileName) throws FileNotFoundException, PrintException {
FileInputStream textStream;
textStream = new FileInputStream(fileName);
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc mydoc = new SimpleDoc(textStream, flavor, null);
// Set the printer Name
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(new PrinterName(service.getName(), null));
// Set the paper size and orientation
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(new MediaPrintableArea(0, 0, 4, 9, MediaPrintableArea.INCH));
printRequestAttributeSet.add(OrientationRequested.LANDSCAPE);
InputStream is = null;
try {
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(1));
DocPrintJob job = service.createPrintJob();
PrintJobWatcher pjw = new PrintJobWatcher(job);
job.print(mydoc, printRequestAttributeSet);
pjw.waitForDone();
}catch(Exception e){
e.printStackTrace();
}
finally{
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}