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

C# Discussion :

Generer un Document Imprimable


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Par défaut Generer un Document Imprimable
    Bonjour,

    Pour un stage, j'ai pour projet de faire une application de gestion de magasin,
    Je souhaiterai faire des listings de piece imprimable.

    Mes recherches m'ont permis de trouver une fonction permettant d'afficher une preview d'impression en resultat, donc ce que je cherche a obtenir.

    Mais je n'ai pas trouver de solution pour remplir mon document comme je le souhaite.

    Je souhaiterai pouvoir rediger mon document en ecrivant un titre, une reference quelques donnée puis faire le listing de toute les pieces ligne par ligne et que cela prenne le nombre de page qu'il est necessaire si le listing est plus long.

    J'ai vu pas mal de solution, comme en faire un fichier PDF, ou autre, mais je n'ai pas besoin de l'enregistrer juste gerer un affichage d'un document que je genere.

    Connaissez-vous les methodes a utiliser ? ou une documentation clair pour generer ce genre de Document.

    La seule solution que j'ai trouver est de generer un formulaire, et d'en imprimer l'image bitmap ...


    Merci de votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 62
    Par défaut
    Première chose, il faut déjà savoir si tu vas travailler en winform ou en WPF.

    Les système d'impression ne fonctionne pas du tout de la même manière.

    Essaye déjà par travaille avec la méthode graphics.DrawString pour le remplissage de ta page et la classe PrintDocument de Drawing.Printing pour la mise en page avant impression.

    Avec celà, j'ai réussi à créer des impressions d'étiquettes avec font type, font size différent.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2003
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 274
    Par défaut
    Première chose, il faut déjà savoir si tu vas travailler en winform ou en WPF.
    Il y a aussi le web (ASP).

    Si tu as vu comment faire un pdf ou que tu realises ce genre de document, infosam76 a justement realise une application qui affiche et permet d'imprimer un pdf : l'article se trouve ici

    Il y a des dizaines de solutions sur internet, a toi de voir celle qui te correspond le mieux.

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Par défaut
    Bonjour,

    Merci de votre aide, je suis donc sous winform et j'ai donc grace a vous trouvez la méthode graphics.drawstring.

    Je ne post pas souvent, et ma recherche bien que specifique n'etait pas vraiment trouvable.

    donc mon but etait d'imprimer un rapport, une liste de piece sur une palette, de prendre en compte le nombre de page etc, en passant par l'aperçu avant l'impression pour que l'utilisateur se rende compte de ce qu'il fait et puisse l'annuler.

    Si quelqu'un passe par la et recherche a faire la meme chose que moi.
    Voila un exemple de code a adapter celon vos données bien sur :

    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
    131
    132
    133
    134
    135
    136
    137
     
    using System;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Printing;
    using System.Windows.Forms;
    using projetStageInit.Class;
     
    namespace projetStageInit
    {
    	public partial class Palette : Form
    	{
    		private DataTable maTablePalette = null;
    		private int nombrePageTotal,pageCourante=1,nombreLignePage = 40,numeroPalette = -1,placemententete = 525;
    		private int nombreArticle = 0,indiceLigne = 0,indiceBoucle =0,margeGauchePremiereColonne = 50;
    		private int margeGaucheDeuxiemeColonne = 200,margeGaucheTroisiemeColonne = 700,margeGaucheQuatiremeColonne = 750;
    		private float x1 = 0,y1 = 200.0F,x2 = 1500.0F,y2 = 200.0F;
     
    		public Palette()
    		{
    			InitializeComponent();
    		}
     
    		void ButtonValiderClick(object sender, EventArgs e)
    		{
    			if(Int32.TryParse(saisieTextBox.Text,out numeroPalette) && numeroPalette>0)
    			{
     
    				// initialisation de la requete de l'impression
    				myDataSetResult = Connection.selectInBase("select a.NumPlan,a.numRepere,a.travee,a.carre,a.rack," +
    				                                          "a.casier,a.etage,a.libelleArticle,e.quantite from Article a ,EntreeSortie e  " +
    				                                          "where a.idArticle=e.idArticle and e.idLieu=1 and  a.palette='"+numeroPalette.ToString()+"'");
    				maTablePalette = myDataSetResult.Tables[0];
    				nombreArticle = maTablePalette.Rows.Count;
    				nombrePageTotal = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(nombreArticle)/Convert.ToDouble(nombreLignePage)));
     
     
     
    				PrintDocument document = new PrintDocument();
    				document.DocumentName = string.Format("Palette");
    				document.PrintPage += document_PrintPage;
    				printPreviewDialog1.Document = document;
    				printPreviewDialog1.Size = new System.Drawing.Size(800,700);
    				printPreviewDialog1.ShowDialog();
    			}
    			else
    			{
    				MessageBox.Show("Le numero de Palette doit etre un entier positif");
    			}
    		}
     
    		private void document_PrintPage(Object sender, PrintPageEventArgs e)
    		{
    			Font printFontPalette = new Font("Arial",94);
    			printFontPalette = new Font(printFontPalette, FontStyle.Bold);
    			Font printFont = new Font("Arial", 14);
     
    			indiceLigne=0;
     
     
     
    			// Entete de page
    			e.Graphics.DrawString("P " + numeroPalette.ToString(), printFontPalette, Brushes.Black, 30 , 32);
    			Pen blackPen = new Pen(Color.Black, 3);
    			Rectangle rect = new Rectangle(500, 100, 350, 50);
    			e.Graphics.DrawRectangle(blackPen, rect);
    			e.Graphics.DrawLine(blackPen, x1, y1, x2, y2);
    			Font printFontentete = new Font("Arial", 14);
     
     
    			// travée rack casier etage
    			e.Graphics.DrawString("travée", printFontentete, Brushes.Black, placemententete , 70);
    			e.Graphics.DrawString("rack", printFontentete, Brushes.Black, placemententete + 80 , 70);
    			e.Graphics.DrawString("casier", printFontentete, Brushes.Black, placemententete +160 , 70);
    			e.Graphics.DrawString("étage", printFontentete, Brushes.Black, placemententete + 240 , 70);
     
    			printFontentete = new Font(printFontentete, FontStyle.Bold);
     
    			if(nombreArticle>0)
    			{
    				e.Graphics.DrawString(maTablePalette.Rows[0]["travee"].ToString().Trim(), printFontentete, Brushes.Black, placemententete + 10, 110);
    				e.Graphics.DrawString(maTablePalette.Rows[0]["rack"].ToString().Trim(), printFontentete, Brushes.Black, placemententete + 80 +10, 110);
    				e.Graphics.DrawString(maTablePalette.Rows[0]["casier"].ToString().Trim(), printFontentete, Brushes.Black, placemententete + 160+10 , 110);
    				e.Graphics.DrawString(maTablePalette.Rows[0]["etage"].ToString().Trim(), printFontentete, Brushes.Black, placemententete + 240+10 , 110);
    			}
    			else
    			{
    				e.Graphics.DrawString("PAS D'OUTIL CORRESPONDANT", printFont, Brushes.Black, placemententete , 110);
    				pageCourante=0;
    			}
     
     
    			e.Graphics.DrawString("N° plan", printFontentete, Brushes.Black, margeGauchePremiereColonne , 225);
    			e.Graphics.DrawString("Designation de l'article", printFontentete, Brushes.Black, margeGaucheDeuxiemeColonne + 10 , 225);
    			e.Graphics.DrawString("Rep:", printFontentete, Brushes.Black, margeGaucheTroisiemeColonne + 10 , 225);
    			e.Graphics.DrawString("Qté", printFontentete, Brushes.Black, margeGaucheQuatiremeColonne + 10 , 225);
     
    			for (int i = indiceBoucle; i < nombreArticle;i++)
    			{
    				e.Graphics.DrawString(maTablePalette.Rows[i]["NumPlan"].ToString().Trim(), printFont, Brushes.Black, margeGauchePremiereColonne , indiceLigne * 17 + 250);
    				e.Graphics.DrawString("| " + maTablePalette.Rows[i]["libelleArticle"].ToString().Trim(), printFont, Brushes.Black, margeGaucheDeuxiemeColonne , indiceLigne * 17 + 250);
    				e.Graphics.DrawString("| " + maTablePalette.Rows[i]["numRepere"].ToString().Trim(), printFont, Brushes.Black, margeGaucheTroisiemeColonne , indiceLigne * 17 + 250);
    				e.Graphics.DrawString("| " + maTablePalette.Rows[i]["quantite"].ToString().Trim(), printFont, Brushes.Black, margeGaucheQuatiremeColonne, indiceLigne * 17 + 250);
     
    				indiceLigne++; // Une fois toute les colonne ajoutées on incrémente la ligne
    				indiceBoucle++;
     
     
    				// si on a rentrer le bon nombre de ligne , on passe a la page suivante
    				bool pagesup = indiceBoucle % nombreLignePage  == 0 && indiceBoucle!=nombreArticle;
    				if (e.HasMorePages = pagesup)
    				{
    					// pied de page des pages normal
    					x1 = 0;
    					y1 = 1050.0F;
    					x2 = 1500.0F;
    					y2 = y1;
     
    					// Draw line to screen.
    					e.Graphics.DrawLine(blackPen, x1, y1, x2, y2);
    					e.Graphics.DrawString(pageCourante.ToString() + "/" +nombrePageTotal.ToString(), printFont, Brushes.Black, 400 , 1125);
    					pageCourante++;
    					return ;
    				}
     
     
    			}
    			x1 = 0;
    			y1 = 1100.0F;
    			x2 = 1500.0F;
    			y2 = y1;
    			e.Graphics.DrawLine(blackPen, x1, y1, x2, y2);
    			e.Graphics.DrawString(pageCourante.ToString() +"/"+nombrePageTotal.ToString(), printFont, Brushes.Black, 400 , 1125);
    		}
    	}
     
    }

  5. #5
    Membre éprouvé Avatar de Zeckard
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 108
    Par défaut
    Bonjour,

    Personnellement, je te conseillerai de te pencher sur Crystal Reports. Ça a l'avantage de pouvoir faire ce que tu veux de ton listing par la suite. Impression, création de fichiers, affichage (CrystalReportsViewer) etc...

    Et tu t'embêteras moins qu'à dessiner chacun de tes labels, image ou autres.

    Un peu de documentation :
    - Création et mise en forme d'états Crystal Reports avec VS .NET (c'est en VB mais c'est facilement applicable
    - Documentation MSDN

  6. #6
    Membre averti
    Homme Profil pro
    Developpeur Electronique/Info. Indus. - option bricolage
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur Electronique/Info. Indus. - option bricolage

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut
    Tu as aussi ReportViewer que tu peux utiliser, intégré à VisualStudio de Cro$oft. Il a l'avantage d'etre gratuit a défaut d'etre puissant

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.90).aspx

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/04/2007, 19h38
  2. Création d'un document (imprimable, aperçu, exportable)
    Par Anified dans le forum C++Builder
    Réponses: 5
    Dernier message: 24/01/2007, 12h55
  3. [VB.NET] Generer un document Word
    Par alfonsebrown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/04/2006, 14h56
  4. meilleur solution pour créer un document imprimable???
    Par martimacfly dans le forum XML/XSL et SOAP
    Réponses: 26
    Dernier message: 08/07/2004, 10h09
  5. [word] Generer un document avec des champs
    Par webbulls dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/04/2004, 10h47

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