Génération PDF

Répondre
doc
Messages : 187
Enregistré le : dim. févr. 26, 2017 4:39 pm

lun. févr. 27, 2023 9:45 am

Bonjour,

Je souhaites rajouter un item "Générer et afficher le PDF" dans le menu contextuel des listes de devis, factures, etc...

J'ai vu que je pouvais le faire en passant par setupElement() et un PredicateRowAction puis un AbstractSheetXml mais je bloque justement sur ce dernier point, à savoir créer un AbstractSheetXml à partir d'un SQLRow que je récupère depuis l'ActionEvent:

Code : Tout sélectionner

public class ViewPDFAction extends PredicateRowAction {

    protected static AbstractSheetXml createAbstractSheet(SQLRow row) {

       ...
       // créer l'AbstractSheetXml à partir du SQLRow en fonction du type (devis, facture, etc...) et la renvoyer
       ...
       
        return sheet;
    }

    public ViewPDFAction(final String foreignField) {
        super(new AbstractAction("Générer et afficher le PDF", FontIcon.of(LineAwesomeSolid.FILE_PDF, 24)) {

            @Override
            public void actionPerformed(ActionEvent ev) {
                System.out.println("Open PDF file...");
                System.out.println(IListe.get(ev).fetchSelectedRow().mapToString());
                final AbstractSheetXml sheet = createAbstractSheet(IListe.get(ev).fetchSelectedRow());

                File file = sheet.getOrCreatePDFDocumentFile(true);

                 if(!Desktop.isDesktopSupported()){
                     System.out.println("Desktop is not supported");
                     return;
                 }
        
                Desktop desktop = Desktop.getDesktop();
                 if(file.exists()) desktop.open(file);
            }
        }, true);

    }

    public ViewPDFAction() {
        this(null);
    }

}
ou peut être passer par MouseSheetXmlListeListener ??
doc
Messages : 187
Enregistré le : dim. févr. 26, 2017 4:39 pm

lun. févr. 27, 2023 10:57 am

Problème résolu, si ça intéresse qqn:

Code : Tout sélectionner

public class ViewPDFAction extends PredicateRowAction {

    protected static Class<? extends AbstractSheetXml> getSheetClass(SQLRow row) {
        String table = row.getTable().getName();

        return switch (table) {
            case "DEVIS" -> DevisXmlSheet.class;
            case "SAISIE_VENTE_FACTURE" -> VenteFactureXmlSheet.class;
            case "COMMANDE_CLIENT" -> CommandeClientXmlSheet.class;
            case "AVOIR_CLIENT" -> AvoirClientXmlSheet.class;
            case "COMMANDE" -> CommandeXmlSheet.class;
            case "AVOIR_FOURNISSEUR" -> AvoirFournisseurXmlSheet.class;
            case "BON_DE_LIVRAISON" -> BonLivraisonXmlSheet.class;
            default -> throw new IllegalStateException("Invalid table: " + table);
        };
    }

    protected static AbstractSheetXml createAbstractSheet(SQLRow row) {
        try {
            Constructor<? extends AbstractSheetXml> ctor = getSheetClass(row).getConstructor(SQLRow.class);
            AbstractSheetXml sheet = ctor.newInstance(row);
            return sheet;
        } catch (Exception e) {
            ExceptionHandler.handle("sheet creation error", e);
        }
        return null;
    }
    
    public ViewPDFAction(final String foreignField) {
        super(new AbstractAction("Générer et afficher le PDF", FontIcon.of(LineAwesomeSolid.FILE_PDF, 16)) {

            @Override
            public void actionPerformed(ActionEvent ev) {
                final AbstractSheetXml sheet = createAbstractSheet(IListe.get(ev).fetchSelectedRow());
                File file;
                try {
                    file = sheet.getOrCreatePDFDocumentFile(true);

                    //first check if Desktop is supported by Platform or not
                    if(!Desktop.isDesktopSupported()){
                        System.out.println("Desktop is not supported");
                        return;
                    }
            
                    Desktop desktop = Desktop.getDesktop();
                    if(file.exists()) desktop.open(file);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }, true);

    }

    public ViewPDFAction() {
        this(null);
    }

}

SRI
Messages : 256
Enregistré le : mer. mars 15, 2017 8:50 pm

mar. mars 07, 2023 1:41 pm

Ce n'est pas pour moi, mais c'est toujours sympa de voir quelqu'un se plonger dans le code.
Utilisateur Cloud avec un contrat de maintenance.
Répondre