Impostare la cartella di default del printDialog

di il
5 risposte

Impostare la cartella di default del printDialog

Buongiorno,
sto utilizzando PrinterJob.printDialog per stampare da Java.
quando chiamo printDialog mi compare la finestra di selezione della stampante in cui c'è la spunta per "Print to File".
Se la seleziono e pigio su Print mi compare la finestra di diaologo per la scelta della cartella e del nome del documento da produrre.
Tale finestra si posiziona automaticamente nella cartella in cui sta venendo eseguito il programma.
Io invece vorrei poter scegliere da programma la cartella a cui puntare.

Qualcuno sa dirmi se e come si possa fare ad impostare la cartella di default del printDialog?

5 Risposte

  • Re: Impostare la cartella di default del printDialog

    03/02/2023 - ZioCrick ha scritto:


    sto utilizzando PrinterJob.printDialog per stampare da Java.

    Qualcuno sa dirmi se e come si possa fare ad impostare la cartella di default del printDialog?

    Sì si può. Devi usare l'altro printDialog, quello che riceve un PrintRequestAttributeSet.

    File out = new File("C:\\blabla\\output.prn");
    
    PrintRequestAttributeSet attrSet = new HashPrintRequestAttributeSet();
    attrSet.add(new Destination(out.toURI()));
    
    // .....
    job.printDialog(attrSet);

    Attenzione, il printDialog() senza argomenti usa direttamente la dialog nativa. Mentre printDialog(PrintRequestAttributeSet) usa per default una dialog “cross platform” fatta in Java. Ma si può impostare di nuovo quella nativa con:

    attrSet.add(DialogTypeSelection.NATIVE);

    Si possono settare molti altri attributi, basta guardare la interfaccia Attribute e le tante implementazioni predefinite.

    Nota: se si imposta il Destination, il checkbox “Print To File” è già marcato. Non so se si possa evitare, dovrei andare a spulciare tutti gli attributi per vedere se ce n'è uno utile.

  • Re: Impostare la cartella di default del printDialog

    Ecco!  Anche questa volta mi hai indicato una soluzione che avevo già indagato ma che nella documentazione non ci avevo capito un tubo! 

    Però…

    adesso mi punta correttamente alla cartella che specifico, ma non mi salva alcun file.

    Ho provato con l'estensione .pdf che con il printDialog precedente funzionava, poi anche con l'estensione .prn come hai indicato tu… ma nulla.
    Non crea proprio il file.

    Che altro devo modificare?

  • Re: Impostare la cartella di default del printDialog

    Aggiornamento.

    Ho scoperto che usando  

    job.printDialog(attrSet);

    ma aggiungendo prima il 

    attrSet.add(DialogTypeSelection.NATIVE);

    mi stampa il documento, ma mi sballa completamente le proporzioni, tagliandomi via delle fette della pagina.

    Ho provato anche ad impostare i margini a zero ma non cambia.

    Non ci sto capendo nulla. :-(

  • Re: Impostare la cartella di default del printDialog

    Prova questo:

    PrinterJob job = PrinterJob.getPrinterJob();
    PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
    File file = new File("C:\\Users\\User\\Documents\\PrintedFiles");
    if (!file.exists()) {
       file.mkdirs();
    }
    DocPrintJob printJob = job.getPrintService().createPrintJob();
    attr.add(new Destination(file.toURI()));
    job.setPrintService(printJob.getPrintService());
    if (job.printDialog(attr)) {
       try {
           job.print(attr);
       } catch (PrinterException e) {
           e.printStackTrace();
       }
    }

  • Re: Impostare la cartella di default del printDialog

    Grazie debugPro per il suggerimento!

    Ho visto solo ora il tuo messaggio perchè non mi è arrivata la mail di notifica della risposta, come avviene di solito.

    Ho provato ciò che suggerisci, ma mi stampa il documento con un margine fisso di un pollice che non riesco a far sparire, per cui mi taglia via una fetta del testo a sinistra  a destra e in basso.

    Ti riporto il codice che uso:

    File fiOut = new File("percordo del file...");
       PrintRequestAttributeSet prAttrSet = new HashPrintRequestAttributeSet();
       prAttrSet.add(new Destination(fiOut.toURI()));    
       prAttrSet.add(DialogTypeSelection.NATIVE);  
       
    PrinterJob pj = PrinterJob.getPrinterJob();
       PageFormat pf = pj.defaultPage();
    
       Paper doc = new Paper();
       doc.setImageableArea(0, 0, doc.getWidth(), doc.getHeight());
       pf.setPaper(doc);
       pj.setPrintable((Printable) this, pf);
    
       DocPrintJob printJob = pj.getPrintService().createPrintJob();
       try {
         pj.setPrintService(printJob.getPrintService());
       } catch (PrinterException ex) {
         ex.printStackTrace();
       }
       if (pj.printDialog(prAttrSet)) {
         try {
           pj.print();
         } catch (PrinterException ex) {
           ex.printStackTrace();
         }
       }
Devi accedere o registrarti per scrivere nel forum
5 risposte