Hello,
I'm a french beginner either in Java and using PDFBox...
I want to use PDFBox to print PDF files stored on a disk.
No problem to get the PDF from disk, but my problem is to print the PDF
file with correct attributes...
I have "simple" PDF files (format A4, portrait, no duplex print), but I
have also other attributes (A3 and/or Landscape and/or duplex) that can
change.
And I want a complete Silent print...
I've tried with this class, but this doesn't work :
public class PDFmanager {
private String filename;
private String size;
//private String orientation;
private Integer copies;
private PrintService printer;
private PrintRequestAttributeSet aset;
private DocAttributeSet asetD;
private DocFlavor flavor;
public PDFmanager(String size, boolean duplex) {
super();
flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintRequestAttributeSet aset = new
HashPrintRequestAttributeSet();
if (size == "A4"){
aset.add(MediaSizeName.ISO_A4);
;
} else if (size == "A3"){
aset.add(MediaSizeName.ISO_A3);
}
if (duplex){
aset.add(Sides.TWO_SIDED_LONG_EDGE);
} else {
aset.add(Sides.ONE_SIDED);
}
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(null, null);
if (pservices.length > 0) {
for (PrintService selprinter : pservices) {
System.out.println("Printer: " + selprinter.getName()+"
Attr : "+ selprinter.getAttributes().toString());
/* TODO : modifier MYPRINTER par nom imprimante STE */
if (selprinter.getName().equals("\\\\svgendc01
\\PNGEN0029")) {
printer = selprinter;
}
}
}
}
public void printPDF() throws IOException, PrinterException {
if (!(printer == null)) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setCopies(copies);
job.setPrintService(printer);
PDDocument doc = PDDocument.load(filename);
doc.silentPrint(job);
//doc.print();
doc.close();
} else {
JOptionPane.showMessageDialog(null,
"Pas d'imprimante valide pour l'impression des
Notices !",
"Erreur",
JOptionPane.WARNING_MESSAGE);
}
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public Integer getCopies() {
return copies;
}
public void setCopies(Integer copies) {
this.copies = copies;
}
public PrintService getPrinter() {
return printer;
}
public void setPrinter(PrintService printer) {
this.printer = printer;
}
}
I use INPUT_STREAM.AUTOSENSE because INPUT_STREAM.PDF doesn't work...
And the printer I select can print with any of selected attributes (Kyocera
FS-C8100DN).
The attributes were used to select the Printer Service, but no printer was
selected when I did this. Now, they are not used...
But, the printing is not correct (no A3, content not adjusted to page
format...).
Is it possible to set attributes at the moment I start the print ?
Maybe I'm not using PDFBox the right way....
What can I do ?
Cordialement / Best regards
Thierry MATHEY
IT EDI Expert
Havells-Sylvania
[email protected]
T +33 (0)1 55 51 11 64
M +33 (0)6 71 01 87 06
This e-mail and any attachments may contain confidential and privileged
information. If you are not the intended recipient, please notify the sender
immediately by return e-mail, delete this e-mail and destroy any copies. Any
dissemination or use of this information by a person other than the intended
recipient is prohibited and may be unlawful.