Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31

    Esportare JTable in PDF e stamparlo

    Ciao ragazzi. Ho una JTable, come posso fare a creare un file PDF che la contenga e che me la stampi?
    In pratica io visualizzo la JTable all'interno di un JFrame, clicco sul pulsante "Stampa" e vorrei che mi si aprisse il file pdf che la contiene. Non deve per forza partire la stampa da sola, posso anche farlo a mano dal file che si apre. Come posso fare? Ho esplorato tutto il web, copiato sul mio progetto codici di altre classi che ho trovato su internet e cercato di adattarle al mio caso ma niente, non riesco proprio Ho installato la libreria iText anche ma nulla... Per favore, grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Mi sono imbattuta anche in quella pagina e ho provato quel codice ma mi dava errore sulle ultime righe, dove dice "MainWindow", mi chiedeva se volessi creare una nuova classe così chiamata, quindi non riconosceva quella parola...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    dove dice "MainWindow", mi chiedeva se volessi creare una nuova classe così chiamata, quindi non riconosceva quella parola...
    Quella è una riga di "logging", puoi ignorarla.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Quella è una riga di "logging", puoi ignorarla.
    Questo è il codice, ho tolto la parte di sotto... C'è un if perchè ho anche altri casi... comunque non capisco perchè mi dà errore alla parentesi graffa... dice: "Syntax error, insert "Finally" to complete TryStatement.... Non ho capito che vuol dire, se aggiungo la parola Fnally non cambia niente
    codice HTML:
    public void actionPerformed(ActionEvent event) {
            String com=event.getActionCommand();
            if(com==S)
            {
                JTable table=f.getPanel().getTabella();
                try {
                    Document doc = new Document();
                    PdfWriter.getInstance(doc, new FileOutputStream("table.pdf"));
                    doc.open();
                    PdfPTable pdfTable = new PdfPTable(table.getColumnCount());
                    //adding table headers
                    for (int i = 0; i < table.getColumnCount(); i++) {
                        pdfTable.addCell(table.getColumnName(i));
                    }
                    //extracting data from the JTable and inserting it to PdfPTable
                    for (int rows = 0; rows < table.getRowCount() - 1; rows++) {
                        for (int cols = 0; cols < table.getColumnCount(); cols++) {
                            pdfTable.addCell(table.getModel().getValueAt(rows, cols).toString());
    
                        }
                    }
                    doc.add(pdfTable);
                    doc.close();
                    System.out.println("done");
                } 
            }
        }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Ok ho lasciato i catch vuoti e adesso funziona! Mi ha creato il mio pdf con la mia JTable, adesso come faccio a farlo aprire direttamente? Devo aggiungere a quello stesso codice qualcosa che una volta creato il pdf me lo apra pure, come posso fare?

    EDIT. Ci sono riusciuta, adesso si apre anche! Ci sono solo due piccoli problemi:
    1) Non mi visualizza l'ultima riga della JTable
    2) Se uso percorsi per il salvataggio miei li accetta, se uso percorsi universali (tipo C:\\tabella.pdf") ho il permesso negato e non me li crea. Mi servirebbe un percorso universale nel caso in cui il software dovesse essere testato su un altro pc.
    Ultima modifica di raissa95; 06-01-2017 a 19:04

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Aggiorno: Sono riuscita a risolvere il problema dell'ultima riga.
    Ora rimane solo un problema: Devo salvare il file pdf per forza su un percorso specifico del mio pc, se uso semplicemente C:\\ (in modo tale che sia presente su tutti i pc e non abbia problemi) non funziona. Avevo letto in giro che bisogna avere i permessi. Come fare?
    Grazie

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    se uso semplicemente C:\\ (in modo tale che sia presente su tutti i pc e non abbia problemi) non funziona. Avevo letto in giro che bisogna avere i permessi. Come fare?
    In generale ci sono almeno 3 possibilità:

    a) Se è una applicazione "grafica" come nel tuo caso, puoi usare JFileChooser (e il suo openSaveDialog) per chiedere all'utente dove salvare il file. Tu ottieni un java.io.File e usi questo per FileOutputStream.

    b) Scrivi un file nella directory "corrente" (o in una sotto-directory, assicurandoti prima con mkdir() di File che la directory esista/sia creata). Ovviamente l'utente deve sapere come impostare la directory corrente quando avvia la applicazione e sapere che il file se lo aspetta lì.

    c) Scrivi un file in una locazione fissa ma "nota", come ad esempio nella "home" directory dell'utente o più sotto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    In generale ci sono almeno 3 possibilità:

    a) Se è una applicazione "grafica" come nel tuo caso, puoi usare JFileChooser (e il suo openSaveDialog) per chiedere all'utente dove salvare il file. Tu ottieni un java.io.File e usi questo per FileOutputStream.

    b) Scrivi un file nella directory "corrente" (o in una sotto-directory, assicurandoti prima con mkdir() di File che la directory esista/sia creata). Ovviamente l'utente deve sapere come impostare la directory corrente quando avvia la applicazione e sapere che il file se lo aspetta lì.

    c) Scrivi un file in una locazione fissa ma "nota", come ad esempio nella "home" directory dell'utente o più sotto.
    Grazie per i suggerimenti, ho optato per la possibilità n.1 e sono riuscita a creare il mio JFileChooser, che mi prende il percorso e con quello mi crea il pdf per poi subito dopo aprirlo (in modo tale che l'utente clicchi su stampa all'interno del pdf). Mi chiedevo però se esiste qualche metodo che imposta di default il nome da assegnare al file da salvare e l'utente se vuole può modificarlo. Parlo proprio dell'area in cui si inserisce il nome da salvare. Al momento la casella è vuota e non salva fino a quando non inserisco un nome. Io vorrei inserirci "Prenotazioni discipline.pdf", così l'utente clicca direttamente su Salva. E' possibile?

    Questo il mio codice, privato delle cose inutili:

    codice HTML:
    public void actionPerformed(ActionEvent e) {
            JTable table=f.getPanel().getTabella();
            
            JFileChooser scelta = new JFileChooser("C:\\");
            scelta.showSaveDialog(f);
            scelta.setDialogTitle("Percorso in cui salvare il file pdf");
            scelta.setApproveButtonText("Seleziona");
            scelta.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            File fileName=scelta.getSelectedFile();
          
    try {
                Document doc = new Document();
                PdfWriter.getInstance(doc, new FileOutputStream(fileName));
                doc.open();
                PdfPTable pdfTable = new PdfPTable(table.getColumnCount());
                //adding table headers
                for (int i = 0; i < table.getColumnCount(); i++) {
                    pdfTable.addCell(table.getColumnName(i));
                }
                //extracting data from the JTable and inserting it to PdfPTable
                for (int rows = 0; rows < table.getRowCount(); rows++) {
                    for (int cols = 0; cols < table.getColumnCount(); cols++) {
                        pdfTable.addCell(table.getModel().getValueAt(rows, cols).toString());
    
                    }
                }
                doc.add(pdfTable);
                doc.close();
            } catch (DocumentException ex) {
                
            } catch (FileNotFoundException ex) {
                
            }
            Process p = null;
            try {
                p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+fileName);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                p.waitFor();
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            f.setVisible(false);
    
        }

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Qui danno due soluzioni leggermente diverse, ecco il link.

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.