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

Windows Forms Discussion :

[C#] IMPRESSION : Tenir compte des marges physiques de l'imprimante


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 18
    Points
    18
    Par défaut [C#] IMPRESSION : Tenir compte des marges physiques de l'imprimante
    Bonjour.

    Je développe un logiciel qui dois imprimer des documents en n'utilisant que le framework .NET 1.1 en C# (VS 2003). Pour cela j'utilise la classe PrintDocument. Dans mes documents je dois centrer du texte sur la page (comme le N° de page par exemple). Le problème est que la totalité de mon document imprimé subit un décalage de quelques milimètres correspontant aux marges physiques de l'imprimante. Du coup mon texte n'est pas centré sur la page à la sortie de l'imprimante alors qu'il l'est sur l'apperçu avant impression.

    Ma question est : est il possible de récupérer la taille de cette marge sachant qu'elle doit être différente pour chaque imprimante ? Et sinon, est-il possible d'utiliser des coordonnées réelles de la page plutot que des coordonnées relatives à la zone imprimable.

    Merci pour vos lumières.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 18
    Points
    18
    Par défaut GetDeviceCaps
    Bonjour,

    J'ai trouvé une piste qui pourrait répondre à ma question.
    Dans le GDI Win32 il y a la fonction GetDeviceCaps qui prend en paramètre le Handle de l'imprimante et le nom du paramètre qui nous interesse.

    Je peux donc utiliser l'écriture suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int l_margeX = GetDeviceCaps(this.printDialog1.PrinterSettings.CreateMeasurementGraphics().GetHdc(), PHYSICALOFFSETX);
    int l_margeY = GetDeviceCaps(this.printDialog1.PrinterSettings.CreateMeasurementGraphics().GetHdc(), PHYSICALOFFSETY);
    Le problème c'est que C# ne comprend pas cette fonctions par défaut, ni les constantes utilisées en paramètre d'ailleurs.

    C'est la première fois que je suis confronté à l'utilisation des GDI, savez vous quel using je dois faire, quelles reférences ...

    Merci


    Source : lien msdn

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 52
    Points : 58
    Points
    58
    Par défaut
    bonjour,

    j'ai le même problème et je cherche aussi à déterminer la marge physique de l'imprimante.

  4. #4
    Membre du Club
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Points : 65
    Points
    65
    Par défaut
    Le post est très vieux, mais j'ai trouvé la solution alors la voici :

    Pour appeler la procédure "GetDeviceCaps" il faut la déclarer de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [DllImport("gdi32.dll")]
    static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
    Les constantes sont des int :
    PHYSICALOFFSETX = 112
    PHYSICALOFFSETY = 113

    Source : http://pinvoke.net/default.aspx/gdi32.GetDeviceCaps

    Edit : Pour utiliser DllImport il faut faire un using de System.Runtime.InteropServices;

    Et les constantes il faut bien sur les déclarer

Discussions similaires

  1. [vba] ne pas tenir compte des majuscules/minuscules
    Par bungler dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/07/2007, 10h07
  2. Recherche sans tenir compte des accents
    Par killerjeff dans le forum Access
    Réponses: 6
    Dernier message: 27/01/2007, 11h19
  3. Réponses: 2
    Dernier message: 11/01/2007, 12h28
  4. Réponses: 1
    Dernier message: 17/08/2006, 21h27
  5. Ne pas tenir compte des accents dans une requete
    Par zamanika dans le forum Installation
    Réponses: 8
    Dernier message: 08/11/2004, 20h49

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