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 :

Impression et mise en page


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut Impression et mise en page
    Bonjour,

    Je souhaiterais imprimer une image.

    Je suis arrivé à l'imprimer mais pas à la centrer sur la feuille, j'ai alors pensé qu'il fallait faire un peu de Math et soustraire la taille de la feuille à la taille de l'image le tout divisé par 2, mais l'image est un peu décalée sur la droite.


    Je me suis donc dit qu'il s'agissait des marges, j'ai donc mis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Margins margin = new Margins(0, 0, 0, 0);
                PrintDoc.DefaultPageSettings.Margins = margin;
    mais cela n'a aucun effet.

    Pour info j'utilise e.Graphics.DrawImage();

    Merci pour votre aide.

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printDoc.OriginAtMargins = true ;

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Tu as aussi la propriété HardMargin (ou un truc du genre) qui te donne ma marge minimum imposée par le matériel !

    Tu dois en tenir compte dans tes calcul !

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Je fais des tests et vous tiens au courant.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    ça marche lorsque je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Margins margin = new Margins(0, 0, 0, 0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PrintDoc.DefaultPageSettings.Margins = margin;
    PrintDoc.OriginAtMargins = true;

    Merci beaucoup.

    @+

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    Je pense que je me suis un peu emballé...

    Effectivement il faut tenir compte des HardMargin, mais le souci c'est que celle ci sont exprimées en centième de pouce. Or tous mes calculs sont en pixels.

    Du coup je n'arrive pas à obtenir le résultat escompté.

    Si quelqu'un a déjà rencontré le problème je suis preneur.

    Merci.

  7. #7
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Je te conseille vivement de faire une classe wrapper qui va gerer tes position sur la page et les conversions d'unités

    A priori lors d'une impression on utilise des unités metriques ou en pouces, le pixel n'a pas beaucoup de sens car c'est une unité virtuelle relative a la resolution de ton media !

    Et generalement on parle de pixel pour un ecran et de dot pour une imprimante

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Je te conseille vivement de faire une classe wrapper qui va gerer tes position sur la page et les conversions d'unités

    A priori lors d'une impression on utilise des unités metriques ou en pouces, le pixel n'a pas beaucoup de sens car c'est une unité virtuelle relative a la resolution de ton media !

    Et generalement on parle de pixel pour un ecran et de dot pour une imprimante

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Je n'arrive pas du tout à comprendre. Mais je tiens à préciser que c'et juste une histoire de millimétres.

    Prenons un exemple concret : j'aimerais connaitre la méthode permettant de centrer un carré de 800*800 dans un format A3.

    Quelqu'un aurait-il une idée?

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Ca s'appelle une regle de trois
    A partir du moment ou tu connais la taille de ta page (en pouces ou en mm)
    Que tu connais la résolution d'impression (Dot per inches)
    Que tu sais que to 800 x 800 veux dire 800 dot par 800 dot

    Le reste c'est de l'arithmetique de niveau CM2

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    Merci pour ce petit rappel Mathématiques mais malheureusement ça ne marche pas.

  12. #12
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Qu'entends tu par "ca ne marche pas"

    Sans savoir ce que tu fais exactement ni voir ésultat, difficile de dire ce qui marche ou pas et ou se trouve le problème !

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Voici mon code, je précise que l'image est décalée de 3 ou 4mm vers la droite et de 2 ou 3mm vers le bas. Dans ce code je n'utilise pas les HardMargins sachant que j'ai déjà fait des tests mais en vain.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private Image Plan = Image.FromFile(@"C:\Users\Desktop\test.png");
    private Margins margin = new Margins(0, 0, 0, 0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    PageSetupDialog1.Document = PrintDocument1;
    PageSetupDialog1.AllowMargins = false;
    PrintDocument1.DefaultPageSettings.Margins = PrintDocument1.PrinterSettings.DefaultPageSettings.Margins = margin;
    PrintDocument1.OriginAtMargins = true;
    PageSetupDialog1.Document.DocumentName ="test"
    PageSetupDialog1.ShowDialog();
    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
     
    float HauteurPapier;
    float LargeurPapier;
    float HardMarginX = PrintDocument1.DefaultPageSettings.HardMarginX;
    float HardMarginY = PrintDocument1.DefaultPageSettings.HardMarginY;
    float PaperX;
    float PaperY;
    float LargeurPlan;
    float HauteurPlan;
     
     
     
    if (PageSetupDialog1.PageSettings.Landscape) 
    {
         HauteurPapier =PrintDocument1.DefaultPageSettings.PaperSize.Width;
         LargeurPapier =PrintDocument1.DefaultPageSettings.PaperSize.Height;
    }
    else
    {
         LargeurPapier = PrintDocument1.DefaultPageSettings.PaperSize.Width;
         HauteurPapier PrintDocument1.DefaultPageSettings.PaperSize.Height;
    }
     
    LargeurPlan = Plan.PhysicalDimension.Width;
    HauteurPlan = Plan.PhysicalDimension.Height;
     
     
    PaperX = ((LargeurPapier  - LargeurPlan) / 2);
    PaperY = ((HauteurPapier  - (HauteurPlan)) / 2);
     
    e.Graphics.DrawImage(Plan, PaperX, PaperY,(Plan.Width), (Plan.Height));

  14. #14
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Intuitivement je dirais que si on parle de décaklage de 2 a 4 mm ca ressemble a tes hard marging qu'il faut soustraire de tes soft margins tout en tenant compte que ces hardmargin sont les position incompressible sur la page

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    Pour être plus précis voici les mesures avec le code donné ci-dessus.

    marge droite = 8.1mm
    marge gauche = 8.4mm
    marge haut = 2.0mm
    marge bas = 2.1mm

    j'ai ensuite modifié le code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     PaperX = ((LargeurPapier - LargeurPlan) / 2) - HardMarginX;
    PaperY = ((HauteurPapier - (HauteurPlan)) / 2) - HardMarginY;
    et voici les mesures :

    marge droite = 7.9mm
    marge gauche = 8.6mm
    marge haut = 1.5mm
    marge bas = 2.6mm

    On se rend compte que les marges sont décalées de -0.5mm, donc je me dit qu'il suffit de diviser par 2 les HardMargins pour que l'image soit centrée donc je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     PaperX = ((LargeurPapier - LargeurPlan) / 2) - (HardMarginX / 2);
    PaperY = ((HauteurPapier - (HauteurPlan)) / 2) - (HardMarginY /2);
    et là malheureusement le résultat est :

    marge droite = 8.1mm
    marge gauche = 8.4mm
    marge haut = 1.6mm
    marge bas = 2.4mm

    Si tu as une idée?

  16. #16
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Tu ne peux pas toucher aux HardMargin !
    Elles sont censé te donner la marge imcompressible en bordure de page !

    Par contre il peut y avoir un leger decalage entre la réalité physique de ton imprimant et la réalité theorique de ton code surtout si ca se joue sur des fractions de milimetres

    A toi d'evaluer les ajustement nécessaires avec des constantes eventuelles pour arriver au resultat voulu

    Mais je te rassure c'est un sujet qui fait couler beaucoup d'encre !!

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 44
    Points : 83
    Points
    83
    Par défaut
    En tout cas merci pour ton aide.

    Effectivement comme tu as pu le constater il s'agit de 3 - 4 mm en moyenne.
    Je pense que je vais me contenter de ce résultat.

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] [Impression] Mise en page
    Par ozzmax dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 30/05/2006, 23h05
  2. [VB6] Mise en page puis impression
    Par pier* dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/05/2006, 10h36
  3. [MFC] mise en page d'une impression
    Par Alice9 dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2005, 09h34
  4. [VB6+API][Impression] Mise en page
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 06/09/2004, 17h11

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