wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 2

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1 Discussion fermée
 
Accueil » Accueil forums » Création de composants spécifiques
» page imprimable spécifique
Conversation (Résolue) : page imprimable spécifique
03-01-2008 09:53:43  page imprimable spécifique #1
Ivory69 (Membre)
Inscrit le : 09-10-2007
Messages: 69
Snippets: 0
Tutoriels: 0
Hors ligne
Salut @ tous !

Je partage mon problème pour savoir si vous avez déjà réalisé quelquechose de similaire. Vous cassez pas le crâne dessus par contre, je le poste au cas où.
Je vous explique : j'ai d'un côté des bouts de texte et de l'autre des images de taille fixe 150 par 150 pixels. Je veux associer les deux pour aboutir à une page A4 imprimable.
Le résultat attendu est le suivant : la feuille A4 vue à l'orientation portrait est partagée 2/3 1/3 dans le sens de la largeur. Sur la partie de gauche (2/3) on a les textes, sur celle de droite, les photos disposées les unes à la suite des autres.
Je pensais faire ça avec l'aide d'une page HTML (wxHTML) style comme dans l'exemple wxRichText (on peut voir la page sous forme HTML). Ceci dit je ne sais pas si mon idée de départ est judicieuse, quelqu'un a une meilleure idée ?
04-01-2008 09:30:59  Re: page imprimable spécifique #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Tu peux passer par le système d'impression intégré à wxWidgets.
Ça te permet de récupérer un wxDC associé à la page à imprimer, et tu peut donc t'en servir pour "dessinner" les images au bon endroit, ou "écrire" le texte associé.

Pour faire simple, il faut dériver une classe wxPrintout, dont la méthode "OnPrintPage(int pageNum)" sera appelée chaque fois que c'est nécessaire.
De plus, ça te permettrait de faire un "aperçu avant impression" très facilement.

Si tu as besoin de plus d'infos là dessus, n'hésites pas...

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
04-01-2008 09:42:32  Re: page imprimable spécifique #3
Ivory69 (Membre)
Inscrit le : 09-10-2007
Messages: 69
Snippets: 0
Tutoriels: 0
Hors ligne
Salut Xav,

Merci de ta réponse, ça fait plaisir d'avoir une piste sérieuse sur laquelle taffer. Le "wxDC" dont tu parles est une instance de wxPrinterDC c'est ça ? En tout cas de bon outils en perspective. Comme tu l'as suggéré je pense que je vais utiliser wxPrintout pour construire ma page. Après j'ai vu qu'il existait une classe wxPostScriptDC qui permet de générer des .ps ça pourrait peut être me servir pour sauvegarder la page en un format multi-plateforme.
Je vais tester ça ce weekend, je te tiens au courant, et encore merci!
04-01-2008 11:20:31  Re: page imprimable spécifique #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Le wxDC que tu peux récupérer, depuis la classe wxPrintout avec la méthode GetDC() correspond au wxDC avec lequel tu vas devoir "dessinner".
- Dans le cas d'une impression, c'est le DC de l'imprimante
- Dans le cas d'un aperçu avant impression, c'est celui de la fenêtre d'aperçu.
Tu n'as du coup rien à modifier dans ton code suivant si tu es en aperçu, ou en impression.

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
11-04-2008 08:54:06  Re: page imprimable spécifique #5
cfdev (Membre)
Lieu: Alpes de Haut Provence
Inscrit le : 08-11-2007
Messages: 127
Snippets: 4
Tutoriels: 0
Site web
Hors ligne
Bonjour,

je remonte ce post car je me lance dans l'impression :)
jusqu'à la ca ne se passe pas trop mal, affichage de la fenêtre aperçu impression d'une page...

Je voudrais savoir comment fonctionne la gestion des pages exactement ?
c'est à nous de les gérer dans la fonction "OnPrintPage(int pageNum)" ?

ex : j'ai une liste a imprimer, il faut que je sache s'il y a plus de X lignes je dois faire 2 pages ?

merci

GNU Linux Power !
Slacker
11-04-2008 14:51:28  Re: page imprimable spécifique #6
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Normalement, la méthode wxPrintout::HasPage(int pageNum) est appelée pour "compter" le nombre de pages du document, et c'est à toi de répondre "oui ou non, mon document possède la page n°...".

Mais tu peux aussi répondre que ton document ne possède qu'une seule page, et lors de l'impression de cette page, appeler wxDC::EndPage pour passer à la page suivante.

Si les lignes de ta liste sont "simples" (elles ne risquent pas d'être affichées sur plusieurs lignes), tu peux rapidement savoir si elles tiendront sur une ou plusieurs page en utilisant wxDC::GetTextExtend

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
11-04-2008 16:39:29  Re: page imprimable spécifique #7
cfdev (Membre)
Lieu: Alpes de Haut Provence
Inscrit le : 08-11-2007
Messages: 127
Snippets: 4
Tutoriels: 0
Site web
Hors ligne
Comme un bout de code vaut mieux qu'un long discourt :

voici comment je procède pour 1 page, et donc si j'ai bcp de client, j'ai tjs qu'une seule page...

Code wxWidgets:

 
bool mPrintList::OnPrintPage(int page)
{
// Get the logical pixels per inch of screen and printer
    int ppiScreenX, ppiScreenY;
    GetPPIScreen(&ppiScreenX, &ppiScreenY);
    int ppiPrinterX, ppiPrinterY;
    GetPPIPrinter(&ppiPrinterX, &ppiPrinterY);
    // This scales the DC so that the printout roughly represents the the screen
    // scaling. The text point size _should_ be the right size but in fact is
    // too small for some reason. This is a detail that will need to be
    // addressed at some point but can be fudged for the moment.
    float scale = (float)((float)ppiPrinterX/(float)ppiScreenX);
    int pageWidthMM, pageHeightMM;
    GetPageSizeMM(&pageWidthMM, &pageHeightMM);
    // Draw 50 mm by 50 mm L shape
    float logUnitsFactor = (float)(ppiPrinterX/(scale*25.4));
 
    wxDC *dc = GetDC();
    if (dc)
    {
        // Draw page numbers at top left corner of printable area, sized so that
        // screen size of text matches paper size.
        MapScreenSizeToPage();
        //Contour de page
        dc->DrawRectangle(10,15,(wxCoord)(logUnitsFactor*(pageWidthMM-10)),(wxCoord)(logUnitsFactor*(pageHeightMM-5)) );
 
        wxChar buf[100];
        wxSprintf(buf, _("wxTinyManager Liste des clients - Page %d"), page);
        dc->DrawText(buf, 25, 25);
        wxSprintf(buf, _("Nombre de client(s) : %d"), m_frameMain->CountClient+1);
        dc->DrawText(buf, 25, 50);
        //-------------------------------------------------------------------------
        ///Liste les clients
        TiXmlHandle hdl(m_frameMain->doc);
        m_frameMain->elemClient = hdl.FirstChildElement().FirstChildElement().Element();
        int i=50;
        while (m_frameMain->elemClient)
            {
                wxSprintf(buf,wxString((m_frameMain->elemClient->Attribute("Name")),wxConvUTF8)+ wxT("  ") +wxString((m_frameMain->elemClient->Attribute("FirstName")),wxConvUTF8) + wxT("  Tel: ") +wxString((m_frameMain->elemClient->Attribute("Tel")),wxConvUTF8)  + wxT("  Mail: ") +wxString((m_frameMain->elemClient->Attribute("Mail")),wxConvUTF8));
                dc->DrawText(buf, 25, i+=50);
                wxSprintf(buf,wxString((m_frameMain->elemClient->Attribute("Add")),wxConvUTF8));
                dc->DrawText(buf, 25, i+=25);
                m_frameMain->elemClient = m_frameMain->elemClient->NextSiblingElement();
            }
        return true;
    }
    else
        return false;
 
}


merci ++

GNU Linux Power !
Slacker
Menu forum (navigation):
Pages: 1 Discussion fermée
 
Accueil » Accueil forums » Création de composants spécifiques
» page imprimable spécifique