Impression sur un préimprimé en Java

djidja -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'ai besoin d'aide,

j'ai réalisé une application en Java avec éclipse , j'ai dois ajouter une option qui permettra à un utilisateur donné d'imprimer des données provenant de mon application(base de données) , sauf que les pages d'imprimante ne sont pas vierges mais déjà préparées et contiennent des données.
Le programme doit pour chaque donné le placé à son emplacement prévu.
par exemple j'aurai un formulaire : nom: .....(ici j'ai dois écrire le nom de l'utilisateur qui provient de ma base de données).
j'espère que ma question est clair et je trouve parmi vous qui peut m'aider .
s'il vous plais c'est urgent.
merci d'avance


A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu peux faire un template en HTML par exemple, le remplir avec les données que tu veux, puis imprimer ce fichier HTML. Avec un peu de CSS ça peut rendre très bien.
Tu peux également faire pareil avec n'importe quel autre format de fichier.

import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class Start
{
    public static final String CSS_TEMPLATE = "h1 {color:blue}";
    
    public static final String HTML_TEMPLATE =
          "<head>"
        + "<title>Rapport #firstname #lastname</title>"
        + "<style type='text/css' media='print'>" + CSS_TEMPLATE + "</style>"
        + "</head>"
        + "<body>"
        + "<h1>Rapport</h1>"
        + "<ul>"
        + "<li>Nom : #lastname</li>"
        + "<li>Prénom : #firstname</li>"
        + "</ul>"
        + "</body>";
    
    public static void main(String[] args) throws Exception
    {
        String report = HTML_TEMPLATE;
        
        report = report.replaceAll("#firstname", "Bill");
        report = report.replaceAll("#lastname", "Gates");
        
        File toPrint = File.createTempFile("toprint", ".html");        
        toPrint.deleteOnExit();
        
        OutputStream content = new FileOutputStream(toPrint);
        content.write(report.getBytes());
        content.close();

        Desktop.getDesktop().print(toPrint);
    }
}
0
djidja
 
merci pour ta repense,mais est ce que ce code réalise l'impression sur une feuille pré-imprimé?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je n'avais pas compris au premier abord ce que tu entendais par "feuille pré imprimé"
Cependant ça reste possible, il faudrait juste s'arranger pour ne mettre sur la page que les éléments à remplir. Si on repart sur le principe du HTML, le CSS permet de faire cela, il faudra juste indiquer pour chaque élément la localisation du texte. Ça demande un travail de réglage mais ça se fait.

Exemple :

import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class Start
{
    public static final String CSS_TEMPLATE = 
          "body { font-size:12pt; margin:none; border:none; padding:none; } "
        + "div { position:absolute } "
        + "#lastname { margin-top:4cm; margin-left:10cm; } "
        + "#firstname { margin-top:5cm; margin-left:10cm; } ";

    public static final String HTML_TEMPLATE =
          "<head>"
     // + "<style type='text/css' media='screen'>" + CSS_TEMPLATE + "</style>"
        + "<style type='text/css' media='print'>" + CSS_TEMPLATE + "</style>"
        + "</head>"
        + "<body>"
        + "<lastname/>"
        + "<firstname/>"
        + "</body>";

    public static void main(String[] args) throws Exception
    {
        String report = HTML_TEMPLATE;

        report = report.replaceAll("<lastname/>", "<div id='lastname'>Bill</div>");
        report = report.replaceAll("<firstname/>", "<div id='firstname'>Gates</div>");

        File toPrint = File.createTempFile("toprint", ".html");        
        toPrint.deleteOnExit();

        OutputStream content = new FileOutputStream(toPrint);
        content.write(report.getBytes());
        content.close();

     // Desktop.getDesktop().open(toPrint);
        Desktop.getDesktop().print(toPrint);
    }
}
0
djidja
 
merci, j'ai pas bien compris mais je vais essayer.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Voici un petit code pour t'aider :

package ccm.kx.print;

import java.awt.Color;

public class Test
{
    public static void main(String[] args)
    {
        Document doc = new Document("Rapport Bill Gates");
        
        // Exemple : écrire "Gates" à 4cm du haut de la feuille, 10 cm à gauche, en noir et taille 12.
        doc.addElement(new Element("lastname", "Gates", 4, 10, Color.BLACK, 12));
        doc.addElement(new Element("firstname", "Bill", 5, 10, Color.BLACK, 12));
        
        Document.open(doc); // ouvrir la feuille avec un navigateur internet
        Document.print(doc); // imprimer la feuille
    }
}
package ccm.kx.print;

import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
import java.util.TreeMap;

public class Document
{
    private final Map<String, Element> map;
    private final String title;
    
    private final static Desktop desktop = Desktop.getDesktop();
    
    public Document(String title)
    {
        this.title = title;
        map = new TreeMap<String, Element>();
    }
    
    public void addElement(Element element)
    {
        map.put(element.getKey(), element);
    }
    
    private static File tempFile(Document document) throws IOException
    {
        File toPrint = File.createTempFile("toprint", ".html");
        toPrint.deleteOnExit();
        
        OutputStream content = new FileOutputStream(toPrint);
        content.write(document.toString().getBytes());
        content.close();
        
        return toPrint;
    }
    
    public static void print(Document document)
    {
        try
        {
            desktop.print(tempFile(document));
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }
    
    public static void open(Document document)
    {
        try
        {
            desktop.open(tempFile(document));
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }
    
    public String toString()
    {
        StringBuilder doc = new StringBuilder();
        doc.append("<html>\n<head>\n<title>")
            .append(title).append("</title>\n")
            .append("<style type='text/css'>\n")
            .append("body { margin:none; border:none; padding:none; }\ndiv { position:absolute }\n");
        
        for (Element element : map.values())
            doc.append(element.getCss()).append("\n");
        
        doc.append("</style>\n</head>\n<body>\n");
        
        for (Element element : map.values())
            doc.append(element.getHtml()).append("\n");
        
        doc.append("</body>\n</html>");
        
        return doc.toString();
    }
}
package ccm.kx.print;

import java.awt.Color;

public class Element
{
    private String key;
    private String value;
    private double top;
    private double left;
    private double size;
    private Color color;
    
    public Element(String key, String value, double top, double left, Color color, double size)
    {
        this.key = key;
        this.value = value;
        this.top = top;
        this.left = left;
        this.color = color;
        this.size = size;
    }
    
    public String getKey()
    {
        return key;
    }
    
    private static String toHex(int val)
    {
        String s = Integer.toHexString(val);
        
        switch (s.length())
        {
            case 0 :
                return "00";
            case 1 :
                return "0" + s;
            case 2 :
                return s;
            default :
                return s.substring(0, 2);
        }
    }
    
    public String getCss()
    {
        return "#" + key + " {color:#" + toHex(color.getRed()) + toHex(color.getGreen()) + toHex(color.getBlue()) 
                + "; font-size:" + size + "pt; margin-top:" + top + "cm; margin-left:" + left + "cm; } ";
    }
    
    public String getHtml()
    {
        return "<div id='" + key + "'>" + value + "</div>";
    }
}
0