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] Imprimer un JTextArea


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut [Impression] Imprimer un JTextArea
    Bonjour

    Je me retrouve face au problème suivant.Je dispose d'un JTextArea. Bien, je veux pouvoir faire imprimer ce JTextArea. J'ai donc crée la classe suivante :
    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
     
    import java.awt.print.*;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JOptionPane;
    import java.awt.image.BufferedImage;
     
    /**
     *
     * @author  GLDavid
     */
    public class Imprimer extends javax.swing.JPanel implements Printable {
     
        private BufferedImage bImage;
     
        //Creates a new instance of Imprimer
        public Imprimer() {
            bImage = new BufferedImage(ProjectWindow.jTextArea1.getWidth(), ProjectWindow.jTextArea1.getHeight(), BufferedImage.TYPE_INT_RGB);
            java.awt.Graphics g = bImage.getGraphics();
            ProjectWindow.jTextArea1.printAll(g);
            setSize(ProjectWindow.jTextArea1.getWidth(), ProjectWindow.jTextArea1.getHeight());
            repaint();
            printme();
        }
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (bImage != null)
                g.drawImage(bImage, 0, 0, null);
            else {
                JOptionPane.showMessageDialog(null,
                "Problem to print the canvas",
                "Error",
                JOptionPane.ERROR_MESSAGE);
            }
        }
     
        public void printme() {
            PrinterJob pj = PrinterJob.getPrinterJob();
            pj.setPrintable(this);
            try {
                pj.print();
            } catch ( Exception e ) {
                JOptionPane.showMessageDialog(null, ""+e, "Error", JOptionPane.ERROR_MESSAGE);;
            }
        }
     
        public int print(Graphics g, PageFormat pf, int index) throws PrinterException {
            if (index > 0) {
                return(NO_SUCH_PAGE);
            } else {
                Graphics2D g2d = (Graphics2D)g;
                g2d.translate(pf.getImageableX(), pf.getImageableY());
                this.paint(g2d);
                return(PAGE_EXISTS);
            }
        }
     
    }
    Seulement, au final, l'impression n'est pas complète et elle est même assez grossière.
    Comment faire pour réaliser une meilleure impression d'un JTextArea ?

    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Tu peut essayer avec quelque chose comme ca :

    la classe pour imprimer :

    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
    public class Print implements Printable{
    	String toPrint;
     
    	public Print(String toPrint){
    		this.toPrint = toPrint;
    	}
     
    	public int print(Graphics g, PageFormat pf, int indexPage){
    		int margeGauche = 50;
    		int margeHaut = 25;
     
    		if(indexPage > 0) return NO_SUCH_PAGE;
    		Graphics2D g2 = (Graphics2D)g;
    		g2.setFont(new Font("Times New Roman", Font.PLAIN, 12));
     
    		g2.drawString(toPrint,margeGauche ,margeHaut);
     
    		return PAGE_EXISTS;
    	}
    }
    La méthode depuis ta classe ou tu as ta TextArea :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void print(){
    		PrinterJob tache = PrinterJob.getPrinterJob();
     
    		try {tache.setPrintable(new Print(textArea.getText());
    		} catch (IOException e1) {e1.printStackTrace();
    		} catch (MessagingException e1) {e1.printStackTrace();}
     
    		if(! tache.printDialog()) return;
     
    		try { tache.print();
    		} catch(Exception e) { System.out.println("impossible d’imprimer");}
    	}

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    Salut

    Merci wichtounet pour ta réponse, mais ça imprime une page blanche et je te promet qu'il n'y a pas d'encre sympathique dans mon imprimante.
    Où peut bien être l'erreur ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    Heureusement la FAQ est là : http://java.developpez.com/sources/?...PrintJTextPane
    Je l'ai donc adapté à mon JTextArea :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    protected JTextArea getJTextArea1() {
    		if (jTextArea1 == null) {
    			//jTextArea1 = new JTextArea();
    			jTextArea1 = new TextResults();
    			//jTextArea1.setEditable(false);
    			jTextArea1.setEditable(false);
    		}
    		//return jTextArea1;
    		return jTextArea1;
    	}
    Et la classe TextResults:
    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
     
    import java.awt.print.Printable;
    import java.io.Serializable;
     
    import javax.swing.JTextArea;
    import java.awt.Graphics2D;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.print.PageFormat;
    import java.awt.print.PrinterException;
     
    public class TextResults extends JTextArea implements Printable, Serializable {
     
    	public TextResults(){
    	}
     
    	public int print(Graphics g, PageFormat pf, int pi) throws PrinterException
    	{
    		Graphics2D g2 = (Graphics2D)g;
    		g2.setColor(Color.black);
     
    		Dimension d = this.getSize(); //get size of document
    		double panelWidth = d.width; //width in pixels
    		double panelHeight = d.height; //height in pixels
     
    		double pageHeight = pf.getImageableHeight(); //height of printer page
    		double pageWidth = pf.getImageableWidth(); //width of printer page
     
    		double scale = pageWidth/panelWidth;
    		int totalNumPages = (int)Math.ceil(scale * panelHeight / pageHeight);
    		//make sure not print empty pages
    		if(pi >= totalNumPages)
    		{ 
    			return Printable.NO_SUCH_PAGE;
    		}
    		//shift Graphic to line up with beginning of print-imageable region
    		g2.translate(pf.getImageableX(), pf.getImageableY());
    		//shift Graphic to line up with beginning of next page to print
    		g2.translate(0f, - pi * pageHeight);
    		//scale the page so the width fits...
    		g2.scale(scale, scale);
    		this.paint(g2); //repaint the page for printing
    		return Printable.PAGE_EXISTS;
    	}
     
    }
    Il me reste un petit détail cependant : L'impression est très bien mais il me coupe des lignes en fin de pages. Comment faire pour éviter ce problème ?
    Merci d'avance de vos réponses !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

Discussions similaires

  1. [Impression]imprimer différents format
    Par sebus dans le forum Général Java
    Réponses: 21
    Dernier message: 26/12/2005, 17h14
  2. [impression] imprimer le contenu d'une url
    Par FFF dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 30/11/2005, 15h07
  3. [Impression] Imprimer avec jbuilder
    Par joker34 dans le forum JBuilder
    Réponses: 3
    Dernier message: 15/11/2005, 13h15
  4. [Impression] Imprimer un JTable
    Par VincenzoR dans le forum Composants
    Réponses: 4
    Dernier message: 04/05/2004, 18h41

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