Hi,

> On 9 Jun 2015, at 01:45, [email protected] wrote:
> 
> 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…

This is possible.

> 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).

You’re not using Java's printing API correctly. An INPUT_STREAM DocFlavor is for
client formatted print data and cannot be used with Printable / Pageable which 
are
for use with service formatted print data.

See: 
http://docs.oracle.com/javase/8/docs/technotes/guides/jps/spec/printing2d.fm2.html
 
<http://docs.oracle.com/javase/8/docs/technotes/guides/jps/spec/printing2d.fm2.html>
And: 
https://docs.oracle.com/javase/8/docs/technotes/guides/jps/spec/printing2d.fm1.html
 
<https://docs.oracle.com/javase/8/docs/technotes/guides/jps/spec/printing2d.fm1.html>

However, you never do anything with the “flavor” variable anyway.

> The attributes were used to select the Printer Service, but no printer was
> selected when I did this. Now, they are not used…

Actually the attributes are never used in your code.

> 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 ?

You've created a PrintRequestAttributeSet however you never do anything
with it. You can pass it to the PrinterJob as follows:

PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDPageable(doc));
job.print(aset);

— John

> 
> 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.

Reply via email to