Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Come effettuare una stampa di un file da java?

    buon giorno a tutti,
    la mia domanda è abbastanza esplicativa del mio problema.
    Ho provato un po di soluzioni ma proprio non riesco a trovare un modo per stampare un file con java...intendo file di qualsiasi formato...sto continuando a sbattere la testa sulle librerie JDIC,sono fantastiche...ma mi legano alla macchina...e non sempre funzionano.
    Come posso fare???
    ringrazio anticipatamente per le risposte che darete.

  2. #2
    ho trovato il modo di utilizzare il metodo print della classe Printable dopo averla estesa.
    ma forse sbaglio da qualche parte perchè il documento viene inviato alla stampante ma non viene stampato.

    questo è il codice...

    public class PrintDocument implements Printable {
    File file;
    public void init(File file){
    try{
    this.file=file;
    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.setPrintable(this);
    if(pj.printDialog())
    pj.print();

    }catch(Exception ex){
    //
    }
    }

    public int print(Graphics grap,PageFormat pageFormat, int pageIndex) throws PrinterException{

    if(pageIndex > 0)
    return NO_SUCH_PAGE;
    try{
    ByteArrayOutputStream bytese=XMLUtils.getOutFromIn(XMLUtils.fileInputStr eam(file));
    grap.drawBytes(bytese.toByteArray(),1,bytese.size( ), (int)pageFormat.getImageableX(),(int)pageFormat.ge tImageableY()+5);

    }catch(FileNotFoundException ex){
    //
    }

    return PAGE_EXISTS;
    }


    }

    _-----------------
    Ringrazio ancora se qualcuno ha qualche risposta da dare in merito...

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Innanzitutto usare drawBytes non è raccomandato, la documentazione dice: Use of this method is not recommended as each byte is interpreted as a Unicode code point in the range 0 to 255, and so can only be used to draw Latin characters in that range. .

    Anche ammesso che ti possa andare bene per i caratteri che devi stampare (e tra l'altro, l'offset iniziale dell'array è 0, non 1), bisogna vedere se interpreta correttamente i caratteri di controlli (e mi riferisco alla questione del newline ... altrimenti come andrebbero a capo le tue linee??).

    A parte tutto questo, però tu stampi tutto in una unica pagina .... ma ci sta tutto? Perché la suddivisione del testo su più pagine devi farla tu, non la fa lui in automatico. Avevo spiegato in questa discussione come funziona la stampa con la Printing API.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Allora ciò che devo fare io è stampare un file (in questo caso PDF ma potrebbe essere di qualsiasi formato) già pronto e fatto.Per quanto ho visto fino adesso anche nei vari forum in giro,sono stampe di disegno o comunque creazioni fatte con java...io quindi non conosco a prescindere ciò che verrà stampato...
    Come posso fare?
    Grazie mille...mi hai aiutato capire perchè mandando in stampa non stampavo nulla.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Originariamente inviato da pie_scv87
    Allora ciò che devo fare io è stampare un file (in questo caso PDF ma potrebbe essere di qualsiasi formato) già pronto e fatto.Per quanto ho visto fino adesso anche nei vari forum in giro,sono stampe di disegno o comunque creazioni fatte con java...io quindi non conosco a prescindere ciò che verrà stampato...
    Allora no, non puoi .... non così. Usando la Printing API tu hai solo a disposizione un Graphics(/Graphics2D) su cui puoi disegnare testi e figure geometriche usando i metodi messi a disposizione. Insomma la pagina la devi comporre tu con del codice sfruttanto le primitive di disegno.

    Se invece hai un file qualunque già fatto (testo, binario, es. PDF o altro) non puoi usare la Printing API pensando di "buttare" sulla pagina dei byte. Che tra l'altro come ho anche riportato sopra, il drawBytes() quei byte li intende come caratteri, non dati binari.

    Da Java 6 c'è la classe java.awt.Desktop che ha il metodo print(File f) per stampare un file. Verrà usato il comando di print della applicazione associata alla estensione del file (questo almeno per Windows). L'unica cosa è che da quello che so e che ho già avuto modo di vedere, usa la stampante di default, non puoi cambiarla.
    Per versioni precedenti di Java si può usare la libreria JDIC, che ha delle funzionalità equivalenti.

    In alternativa, basterebbe lanciare un qualche comando (specifico del sistema operativo) o un qualche tool per eseguire la stampa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    ok speravo fosse possibile...Ho già usato i metodi della classe Desktop...purtroppo mi vincola però.Infatti dipendo troppo dalla macchina in cui sono,e il metodo print va a vedere la stampante predefinita e il reader predefinito...se io porto l'applicativo su una macchina senza (prendendo in esempio i PDF) Adobe Acrobat Reader e senza una connessione ad internet sono fregato...Il rimedio l'ho trovato comunque...apriro il reader e farò fare all'utente la stampa 'manualmente'.
    Grazie mille comunque.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.