Impression et marges

muqaddarmuqaddar Administrateur
04:43 modifié dans API AppKit #1
Béjir,

Je crée une vue pour une impression, mais les marges par défaut (quel que soit le format de papier sélectionné) sont très grandes. Un truc du genre 4 cm que ce soti du A4 ou du Letter US... Ce qui doit correspondre à  un certain nombre de points... définis dans les marges...

Enfin, je trouve ça bizarre... faut-il les forcer par le code avec setMargin ? Car peu de monde va changer les marges en général dans la boà®te de dialogue custom print...

Me fais-je comprendre ?  ???

Réponses

  • muqaddarmuqaddar Administrateur
    04:43 modifié #2
    C'est bon, j'ai trouvé, oubliez-moi.  :p :p

    C'est juste que je ne comprenais pas pourquoi les marges par défaut sont si grandes.
  • VeillardVeillard Membre
    04:43 modifié #3
    C'était quoi la réponse ?  ???
  • VeillardVeillard Membre
    04:43 modifié #4
    Je déterre ce vieux thread sur les marges.

    Je n'arrive pas à  me débarasser moi aussi des ces marges trop grandes. J'ai essayé ceci :
    NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];<br />[printInfo setLeftMargin:10.0];<br />etc...
    


    Mais ça ne change rien  :-\\

    Une idée ???
  • muqaddarmuqaddar Administrateur
    04:43 modifié #5
    Je me souviens plus comment j'avais fait, mais de mémoire c'était aller beaucoup mieux quand j'avais redéfini le papier par défaut (A4) dans les prefs système -> impression -> A4
  • VeillardVeillard Membre
    04:43 modifié #6
    J'ai essayé, tout est bien paramétré mais j'ai toujours ces marges monstrueuses...
  • muqaddarmuqaddar Administrateur
    04:43 modifié #7
    T'es vraiment sûr d'être en A4 au moment de l'impression ?
  • VeillardVeillard Membre
    04:43 modifié #8
    Oui, j'ai tout essayé...
  • BruBru Membre
    04:43 modifié #9
    Je pense que tu effectues tes opérations pour l'impression dans le mauvais ordre.

    Typiquement, l'ordre est :
    1 - je récupère le sharedPrinterInfo.
    2 - je modifie les marges (via set...Margin:).
    3 - j'initialise l'impression par +[NSPrintOperation printOperationWithView:] (cela affiche le dialogue d'impression).
    4 - je déclenche l'impression par -[NSPrintOperation runOperation].

    Je n'ai jamais eu de problème de marge (même quand j'utilise un leftMargin à  0 : dans ce cas, mon impression est tronquée sur son côté gauche).

    Cet ordre des opérations est celui recommandé par Apple.
    Est-ce le même que tu effectues ?

    .
  • VeillardVeillard Membre
    04:43 modifié #10
    A priori cela me semble correct...

    - (IBAction)print:(id)sender<br />{<br />&nbsp; &nbsp; NSView *myPrintView = [[profilView window] contentView];<br />	<br />&nbsp; &nbsp; NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];<br /><br />&nbsp; &nbsp; [printInfo setLeftMargin:10.0];<br />&nbsp; &nbsp; [printInfo setRightMargin:10.0];<br /><br />&nbsp; &nbsp; NSPrintOperation *printOpView;<br />&nbsp; &nbsp; printOpView = [NSPrintOperation printOperationWithView:myPrintView printInfo:printInfo];<br />&nbsp; &nbsp; [printOpView setShowPanels:YES];<br />&nbsp; &nbsp; [printOpView runOperation];<br />}<br />
    
  • muqaddarmuqaddar Administrateur
    04:43 modifié #11
    Favouille, je regarde mon code, et je ne vois pas ce qui aurait pu faire la différence à  l'époque... j'aurais du le noter.
  • BruBru Membre
    04:43 modifié #12
    dans 1153811127:

    A priori cela me semble correct...


    - retire [printOpView setShowPanels:YES];
    - remplace printOpView = [NSPrintOperation printOperationWithView:myPrintView printInfo:printInfo];
      par printOpView = [NSPrintOperation printOperationWithView:myPrintView];
    - met 0 à  setLeftMargin (pour test)

    Chez moi, ça marche comme cela, donc il n'y a pas de raison pour que chez toi ça diffère.

    .
  • VeillardVeillard Membre
    04:43 modifié #13
    Excellent, merci ça marche !!! On va pouvoir économiser quelques arbres... 
  • VeillardVeillard Membre
    04:43 modifié #14
    Juste une petite question...

    Quand je fais "imprimer" par le menu, j'ai les marges d'origine (énormes !). Je lance ensuite l'impression en cliquant sur le bouton imprimer de ma fenêtre (pas par le menu), et là  ça marche, normal puisque c'est directement relié à  :
    - (IBAction)print:(id)sender<br />{<br />&nbsp; &nbsp; NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];<br /><br />&nbsp; &nbsp; [printInfo setHorizontallyCentered:YES];<br />&nbsp; &nbsp; [printInfo setVerticallyCentered:NO];<br />&nbsp; &nbsp; [printInfo setTopMargin:20.0];<br />&nbsp; &nbsp; [printInfo setBottomMargin:20.0];<br />&nbsp; &nbsp; [printInfo setLeftMargin:10.0];<br />&nbsp; &nbsp; [printInfo setRightMargin:10.0];<br />&nbsp; &nbsp; NSPrintOperation *printOp = [NSPrintOperation printOperationWithView:_plongeesTableView];<br />&nbsp; &nbsp; [printOp runOperation];<br />}<br />
    


    Enfin quand je repasse par le menu "imprimer" ça fonctionne cette fois-ci correctement.

    Vous avez une explication j'en suis sûr mais laquelle ?
    Faut-il initialiser l'impression au chargement de l'appli ?

    Merci pour vos lumières  ;)
  • BruBru Membre
    04:43 modifié #15
    L'explication est simple :
    au chargement de l'appli, un NSPrinterInfo par défaut est créé.
    Dans ce printerInfo, les marges sont énormes.

    En imprimant par le menu, tu ne fais que demander le lancement de l'impression (qui utilise le pinterInfo par défaut, avec les grandes marges).

    Ensuite, dans la méthode d'action de ton bouton, tu modifies les marges du printerInfo, donc toutes les impressions suivantes seront faites avec les nouvelles marges, et quelques soit l'origine de la demande (bouton ou menu).

    Conclusion, si tu modifies le printerInfo juste après la fin du lancement de l'appli, tu devrais avoir les marges comme tu le veux.

    .
  • VeillardVeillard Membre
    04:43 modifié #16
    D'ac il me semblait bien qu'il y avait quelque chose comme ça. Je vais me pencher sur le problème.

    Merci Bru 
Connectez-vous ou Inscrivez-vous pour répondre.