IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Impression du contenu d'un JTextPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut Impression du contenu d'un JTextPane
    Bonjour,

    J'ai un problème d'impression, je veut imprimer un JTextPane j'ai donc fait une classe implémentant printable qui imprime mes pages mais je ne peut pas sélectionner une page précise dans les pages a imprimer.

    En fait je voudrai pouvoir imprimer que la page 7 par exemple.

    Est il possible d'afficher le numéro de page en bas de la page ou d'ajouté des entête?

    Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    JAVA et l'impression

    Il n'y a franchement rien de pratique pour cela, que je connaisse.

    Tu vas sans doute devoir tout faire à la main, c'est à dire récupérer le texte, faire une impression simulée sur un Graphics2D et faire imprimer la 7ième page.

    Bon courage.

    Si tu trouves qq chose de simple; on veut tout savoir.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut
    Il n'y a franchement rien de pratique pour cela, que je connaisse.
    Moi non plus je découvre l'impression en java

    Tu vas sans doute devoir tout faire à la main, c'est à dire récupérer le texte, faire une impression simulée sur un Graphics2D et faire imprimer la 7ième page.
    En fait je me suis inspirer d'un exemple que j'ai modifier mais apparemment pas assez ,il utilise bien Graphics2D

    Si tu trouves qq chose de simple; on veut tout savoir.
    J'ai pas plus simple pour l'instant, voila l'exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    public class DocumentPrinter implements Printable, Pageable{
        protected int currentPage = -1;
        protected JTextPane jTextPane;
        protected double pageEndY = 0;
        protected double pageStartY = 0;
        protected PageFormat pageFormat;
        protected PrinterJob printJob;
    	private int numPages = 13;
     
        public DocumentPrinter() {
            pageFormat = new PageFormat();
            printJob = PrinterJob.getPrinterJob();
        }
        public void pageDialog() {
            pageFormat = printJob.pageDialog(pageFormat);
        }
        public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
            double scale = 2;
            Graphics2D graphics2D;
            View rootView;
            graphics2D = (Graphics2D) graphics;
     
            jTextPane.setSize((int) pageFormat.getImageableWidth(), Integer.MAX_VALUE);
            jTextPane.validate();
            rootView = jTextPane.getUI().getRootView(jTextPane);
            graphics2D.setClip((int) (pageFormat.getImageableX() / scale),
                    (int) (pageFormat.getImageableY() / scale),
                    (int) (pageFormat.getImageableWidth() / scale),
                    (int) (pageFormat.getImageableHeight() / scale));
            if (pageIndex > currentPage) {
                currentPage = pageIndex;
                pageStartY += pageEndY;
                pageEndY = graphics2D.getClipBounds().getHeight();    
            }
            graphics2D.translate(graphics2D.getClipBounds().getX(),
                    graphics2D.getClipBounds().getY());
            Rectangle allocation = new Rectangle(0,
                    (int) -pageStartY,
                    (int) (jTextPane.getMinimumSize().getWidth()),
                    (int) (jTextPane.getPreferredSize().getHeight()));
            if (printView(graphics2D, allocation, rootView)) {
                return Printable.PAGE_EXISTS;
            } else {
                pageStartY = 0;
                pageEndY = 0;
                currentPage = -1;
                return Printable.NO_SUCH_PAGE;
            }
        }
        public void print(JTextPane jtextPane) {
            setDocument(jtextPane);
            printDialog();
        }
        protected void printDialog() {
        	printJob.setPrintable(this, pageFormat);
        	printJob.setPageable(this);
            if (printJob.printDialog()) {
                try {
                    printJob.print();
                } catch (PrinterException printerException) {
                    pageStartY = 0;
                    pageEndY = 0;
                    currentPage = -1;
                    System.out.println("Error Printing Document");
                    printerException.printStackTrace();
                }
            }
        }
        protected boolean printView(Graphics2D graphics2D, Shape allocation,
                                    View view) {
            boolean pageExists = false;
            Rectangle clipRectangle = graphics2D.getClipBounds();
            Shape childAllocation;
            View childView;
     
            if (view.getViewCount() > 0) {
                for (int i = 0; i < view.getViewCount(); i++) {
                    childAllocation = view.getChildAllocation(i, allocation);
                    if (childAllocation != null) {
                        childView = view.getView(i);
                        if (printView(graphics2D, childAllocation, childView)) {
                            pageExists = true;
                        }
                    }
                }
            } else {
                if (allocation.getBounds().getMaxY() >= clipRectangle.getY()) {
                    pageExists = true;
                    if ((allocation.getBounds().getHeight() > clipRectangle.getHeight()) &&
                            (allocation.intersects(clipRectangle))) {
                        view.paint(graphics2D, allocation);
                    } else {
                        if (allocation.getBounds().getY() >= clipRectangle.getY()) {
                            if (allocation.getBounds().getMaxY() <= clipRectangle.getMaxY()) {
                                view.paint(graphics2D, allocation);
                            } else {
                                if (allocation.getBounds().getY() < pageEndY) {
                                    pageEndY = allocation.getBounds().getY();
                                }
                            }
                        }
                    }
                }
            }
            return pageExists;
        }
        protected void setContentType(String type) {
            jTextPane.setContentType(type);
        }
        public void setDocument(JTextPane jtextPane) {
            jTextPane = new JTextPane();
            setDocument(jtextPane.getContentType(), jtextPane.getDocument());
        }
        protected void setDocument(String type, Document document) {
            setContentType(type);
            jTextPane.setDocument(document);
        }
    	public int getNumberOfPages() {
    		return numPages;//TODO
    	}
    	public PageFormat getPageFormat(int pageIndex)
    			throws IndexOutOfBoundsException {
     
    		return pageFormat;
    	}
    	public Printable getPrintable(int pageIndex)
    			throws IndexOutOfBoundsException {
    		return this;
    	}
    }
    Je ne sais pas comment récupérer le nombre de page avec la méthode getNumberOfPages(); et si ça va fonctionner !

    Est ce que la méthode jTextPane.getPrintable(headerFormat, footerFormat);
    permet d'avoir un bon résultat ?

    Si vous avez une idée, je suis preneur.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    J'ai jamais utiliser les nouvelles fonctionnalités de java sur l'impression. J'étais en 1.4 lorsque j'ai du faire un éditeur de text.

    Pour ma part j'avais fais une impression sur un graphics2D, donc carrément du dessin, en gérant seul les sauts de pages, les veuves et les orphelins.

    Pour le nombre de page ca revient à peu près à calculer la dimension totale de ton graphics2D / la taille d'une page.

    Et pour imprimer que la page 7 il faut faire une translation et un cliping sur ton graphics2D sur la partie qui correspond à la page 7.

    Celà dit; j'en suis arrivé à préférer produire un pdf et laisser la fonction d'impression à acrobat. Sinon c'est carrément une libraire qu'il faudrait écrire.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut
    Effectivement je vais imprimer sur un graphic2D c'est le plus simple.

    Autrement il y avait une solution avec SimpleDoc et DocFlavor
    mais ça me parait plus compliquer.

    Comment produit tu ton pdf il y a une librairie qui le permet ou est ce que c'est une classe de la jdk qui le permet ?

    En tout cas merci pour tes réponses

    a+

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Pour faire du pdf il y a IText

    Sinon je préfère travailler avec du html plutot que du rtf (à mon avis le html devient plus universel). Avec FlyingSaucer c'est du gateau, car l'export pdf est dedans.

Discussions similaires

  1. Impression du contenu d'un GridView
    Par Perceuse-Killer dans le forum ASP.NET
    Réponses: 1
    Dernier message: 30/07/2007, 14h39
  2. [débutant] lire le contenu d'un JTextPane
    Par cyrill.gremaud dans le forum Langage
    Réponses: 9
    Dernier message: 13/07/2006, 14h41
  3. Impression du contenu d'un ScrollPane
    Par haltabush dans le forum Flash
    Réponses: 6
    Dernier message: 30/06/2006, 15h41
  4. Pb d'impression du contenu d'un textbox
    Par elkhy dans le forum IHM
    Réponses: 2
    Dernier message: 29/05/2006, 10h51
  5. [VB6] Impression du contenu de l'objet WebBrowser
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/05/2006, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo