Classe pour imprimer une "tableView"

RocouRocou Membre
06:46 modifié dans API AppKit #1
Quelqu'un a-t-il développé une classe que je pourrais intégrer facilement à  mes applications afin d'imprimer une tableView?

Ou mieux, un "object" à  glisser dans le "MainMenu.xib" de Interface Builder?
«1

Réponses

  • schlumschlum Membre
    06:46 modifié #2
    ça veut rien dire " imprimer une tableView "... Y a 50 000 façons de faire, à  peu près une par tabView existante dans une application.

    D'ailleurs, y a déjà  celle par défaut d'Apple.
  • Philippe49Philippe49 Membre
    06:46 modifié #3
    Le model d'une table view, c'est en général une NSArray dataSource d'un même type d'objets RowData

    Un truc comme ça (à  tester)
    NSMutableString * string=NSMutableString alloc] init];<br />for(RowData rowData in dataSource) {<br /> &nbsp;[string appendString:[rowdata description;
    }
    NSString * error=nil;
    [string writeToFile:path atomically:YES encoding: NSMacOSRomanStringEncoding error:&error];

    description est à  redéfinir dans l'objet RowData

    Autrement, on peut transformer une NSArray en property list
  • schlumschlum Membre
    06:46 modifié #4
    Euh... Je pense qu'il parlait d'imprimer... sur une imprimante quoi  :)
  • Philippe49Philippe49 Membre
    06:46 modifié #5
    Là  effectivement il n'a pas dit si il s'agit d'une HP ou d'une Epson  ;D
  • NoNo Membre
    06:46 modifié #6
    dans 1234979501:

    [...] afin d'imprimer une tableView?


    dans 1234984651:

    [...] à  peu près une par tabView existante dans une application.


    dans 1235007849:

    Euh... Je pense qu'il parlait d'imprimer... sur une imprimante quoi  :)


    Euh... je pense qu'il parlait d'une NSTableView... une table quoi :)

    Sinon, il y a un truc et astuce qui donne une méthode.
    Mais c'est de la bonne vieille programmation, comme à  l'ancienne.
    Rien qui se dépose dans un .xib et qui permettrait à  Rocou de se la couler douce...
  • RocouRocou Membre
    06:46 modifié #7
    dans 1234984651:

    ça veut rien dire " imprimer une tableView "... Y a 50 000 façons de faire, à  peu près une par tabView existante dans une application.

    Tout de même. Il y a toujours des colonnes et des lignes.
    Sous RealBasic, il existe une classe "ListBoxPrinter" que l'on "glisse" sur une "tableView" (une "ListBox" sous RB).
    Ensuite, il suffit dans le code associé au menu imprimer (ou a un bouton) d'écrire:
    LBPrinter.print(MaListBox,true)
    C'est tout. On peut toujours aller modifier la classe pour adapter le forme du listing obtenu si on veut.

    Bon tant pis pour la classe tout faite...
  • RocouRocou Membre
    06:46 modifié #8
    dans 1235031169:


    Euh... je pense qu'il parlait d'une NSTableView... une table quoi :)

    Ben bien sûr! "What else"?  :)
    dans 1235031169:

    Sinon, il y a un truc et astuce qui donne une méthode.
    Mais c'est de la bonne vieille programmation, comme à  l'ancienne.
    Rien qui se dépose dans un .xib et qui permettrait à  Rocou de se la couler douce...

    Merci. Néanmoins, je trouve curieux que personne n'ai pensé à  créer une classe basique. Pour ma part, j'ai autre chose à  faire que de me palucher du code pour gérer les sauts de page, les marges, etc.
  • RocouRocou Membre
    06:46 modifié #9
    dans 1235031169:

    Sinon, il y a un truc et astuce qui donne une méthode.
    Mais c'est de la bonne vieille programmation, comme à  l'ancienne.

    Pour être vieux, c'est vieux. Le résultat est immonde  :)
  • schlumschlum Membre
    06:46 modifié #10
    dans 1235031169:

    dans 1234979501:

    [...] afin d'imprimer une tableView?


    dans 1234984651:

    [...] à  peu près une par tabView existante dans une application.


    dans 1235007849:

    Euh... Je pense qu'il parlait d'imprimer... sur une imprimante quoi  :)


    Euh... je pense qu'il parlait d'une NSTableView... une table quoi :)


    Oui, je parlais bien aussi de TableView, mon clavier a rippé  :)
  • schlumschlum Membre
    06:46 modifié #11
    dans 1235032110:

    dans 1234984651:

    ça veut rien dire " imprimer une tableView "... Y a 50 000 façons de faire, à  peu près une par tabView existante dans une application.

    Tout de même. Il y a toujours des colonnes et des lignes.
    Sous RealBasic, il existe une classe "ListBoxPrinter" que l'on "glisse" sur une "tableView" (une "ListBox" sous RB).
    Ensuite, il suffit dans le code associé au menu imprimer (ou a un bouton) d'écrire:
    LBPrinter.print(MaListBox,true)
    C'est tout. On peut toujours aller modifier la classe pour adapter le forme du listing obtenu si on veut.

    Bon tant pis pour la classe tout faite...


    Les TableView Cocoa sont peut-être plus complexe que les TableView RealBasic aussi...
    Avec tous les types de colonnes possibles (sans compter l'infinité de types avec des NSCell perso), les options graphiques, possibilités de redimensionner un peu tout pour l'utilisateur, etc.

    Je ne vois pas comment une classe générique pourrait faire certains choix quant à  certains rétrécissements (ou agrandissements afin d'afficher la totalité des données) de colonne ou autre.
  • Philippe49Philippe49 Membre
    06:46 modifié #12
    Et si on veut faire une impression non stylisée, [myTableView print:nil] ... , print: étant une méthode de NSView.
  • schlumschlum Membre
    06:46 modifié #13
    dans 1235040609:

    Et si on veut faire une impression non stylisée, [myTableView print:nil] ... , print: étant une méthode de NSView.


    Oui, c'est ce que je disais, la méthode par défaut d'Apple  :P
    ça imprime ce qu'on voit à  l'écran en gros... (sans tenir compte des cas où les dimensions dépassent de la feuille ou autre).
  • Philippe49Philippe49 Membre
    06:46 modifié #14
    et donc :

    dans 1234984651:

    ça veut rien dire " imprimer une tableView "... Y a 50 000 façons de faire, à  peu près une par tabView existante dans une application.


    et si on veut faire une impression plus fine, il faut construire un document à  imprimer en parcourant le model, cela dépendant de ce qu'il y a dans la dite table view.
  • Nebuchad34Nebuchad34 Membre
    06:46 modifié #15
    Tiens, tiens, il se trouve que j'ai bataillé tout ce week end pour justement imprimer une tableView (entre autres informations à  contenir dans une même page).

    Le meilleur moyen que j'ai trouvé pour être maà®tre de la mise en page et parvenir à  mes fins assez simplement, c'est générer du html depuis le code dans une webView "invisible" (j'ai trouvé l'idée sur ce forum je ne sais plus où) avant d'imprimer le contenu de la webView.

    ça marche nicquel !


  • RocouRocou Membre
    06:46 modifié #16
    dans 1235040037:

    Les TableView Cocoa sont peut-être plus complexe que les TableView RealBasic aussi...
    Avec tous les types de colonnes possibles (sans compter l'infinité de types avec des NSCell perso), les options graphiques, possibilités de redimensionner un peu tout pour l'utilisateur, etc.

    Je ne vois pas comment une classe générique pourrait faire certains choix quant à  certains rétrécissements (ou agrandissements afin d'afficher la totalité des données) de colonne ou autre.

    Je pense que tu n'as pas compris. Je ne cherche pas à  faire une impression de la copie conforme du NSTableView que l'utilisateur peut voir à  l'écran. Je veux juste en imprimer le contenu.
    Exemple, voici une NSTableView
    Client        adresse              ville
    dujardin      rue de pinsons      Paris
    Dupont        av de Cocoa        Lyon

    Trois colonnes, deux lignes, plus les entêtes. Comment dois-je faire pour imprimer cela? Je me fiche des fioritures (pour le moment)

  • schlumschlum Membre
    06:46 modifié #17
    J'ai très bien compris...
    Je disais juste que la méthode par défaut d'Apple faisait une copie conforme de ce qu'on voit à  l'écran (sans se préoccuper des dépassements de marges etc.).

    Mais ça ne change rien à  l'affaire... Là  ton tableau ne contient que tu texte, mais ce n'est pas le cas de toutes les TableView loin de là  (d'où l'impossibilité de faire une classe générique d'impression).
  • schlumschlum Membre
    06:46 modifié #18
    Concernant l'impression de tableaux avec des textes (pas trop longs), il y a un chapitre dédié à  ça dans Cocoa par la Pratique.
  • RocouRocou Membre
    06:46 modifié #19
    dans 1235389710:

    Concernant l'impression de tableaux avec des textes (pas trop longs), il y a un chapitre dédié à  ça dans Cocoa par la Pratique.

    Oui, je l'ai lu et relu et je n'ai rien compris.
    J'ai l'édition pour OS X 10.2 ainsi que la 3e edition (qui s'intitule "Programmation Cocoa sous Mac OS X"). L'exemple est le même dans les deux éditions et reste hélas, très nébuleux.
  • Nebuchad34Nebuchad34 Membre
    06:46 modifié #20
    j'insiste mais le passage par la html est une très bonne solution, et notamment pour garder la main sur la mise en page, c'est à  dire dépassement de marges, etc...
  • schlumschlum Membre
    06:46 modifié #21
    Euh, ce chapitre est loin d'être nébuleux, c'est le cas le plus simple d'impression de tableau  ;)
    (que du texte avec des textes " courts ").
    Si ça c'est nébuleux, qu'est-ce que ça serait si je mettais le code d'une classe qui fait vraiment de l'impression (en tenant compte des marges définies, du format défini etc.)  :P


    L'impression c'est simplement avoir une vue blanche de la taille de la feuille moins les marges, et dessiner dedans (des chaà®nes, des images, des vues...)
  • RocouRocou Membre
    06:46 modifié #22
    dans 1235396974:

    Euh, ce chapitre est loin d'être nébuleux, c'est le cas le plus simple d'impression de tableau  ;)
    (que du texte avec des textes " courts ").
    Si ça c'est nébuleux, qu'est-ce que ça serait si je mettais le code d'une classe qui fait vraiment de l'impression (en tenant compte des marges définies, du format défini etc.)  :P


    L'impression c'est simplement avoir une vue blanche de la taille de la feuille moins les marges, et dessiner dedans (des chaà®nes, des images, des vues...)

    Je ne doute pas une seconde que cela te paraisse clair mais c'est de moi qu'il s'agit  ;)
    - Je ne sais pas où mettre le code (dans mon controleur? dans un autre?).
    - Je ne comprends pas par quoi et a quel moment sont appelées les méthode décrites
    - Je ne suis pas sûr d'avoir compris ce qu'est une "vue". Un tableau dans lequel je met ce que je veux? Est-ce ce tableau qui sera imprimé?

    J'aimerais pouvoir relier un bouton à  une action "imprimer". Que dois-je mettre dans cette action? Est-ce possible?

    Je pense qu'il me manque le petit "déclic". Ce n'est pas une histoire de complexité, je suis sûr de pouvoir imprimer ce que je voudrais quand j'aurais compris le principe de l'impression. (je l'ai compris dans les grandes lignes: un NSView, l'objet à  imprimer, un NSPrintInfo pour les options d'impression et un NSPrintOperation pour lancer le processus d'impression)

    Aurais-tu un lien vers un exemple?
  • RocouRocou Membre
    06:46 modifié #23
    dans 1235396706:

    j'insiste mais le passage par la html est une très bonne solution, et notamment pour garder la main sur la mise en page, c'est à  dire dépassement de marges, etc...

    Merci, je vais aller voir cela mais cela m'oblige à  me plonger dans la documentation Web dont je ne connais pas le moindre octet. Or je ne demande pas la lune mais une impression tout ce qu'il y a de plus basique, le contenu de ma NSTableView, les entêtes de colonnes et un saut de page qui ne coupe pas une ligne en deux.
  • schlumschlum Membre
    06:46 modifié #24
    Non, une vue ce n'est pas un tableau, c'est juste un rectangle dans lequel on dessine ce qu'on veut.
    S'il y a plusieurs pages, il y a plusieurs vues (toutes de la même taille).

    Pour ton tableau, tu dois utiliser la méthode "- (void)drawAtPoint:(NSPoint)point" de NSAttributedString en différents points de la vue
    En testant éventuellement les "- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options"
  • RocouRocou Membre
    06:46 modifié #25
    dans 1235067286:

    Tiens, tiens, il se trouve que j'ai bataillé tout ce week end pour justement imprimer une tableView (entre autres informations à  contenir dans une même page).

    Le meilleur moyen que j'ai trouvé pour être maà®tre de la mise en page et parvenir à  mes fins assez simplement, c'est générer du html depuis le code dans une webView "invisible" (j'ai trouvé l'idée sur ce forum je ne sais plus où) avant d'imprimer le contenu de la webView.

    ça marche nicquel !

    As-tu un lien, un exemple de code afin de voir par où il faut commencer?
  • mpergandmpergand Membre
    06:46 modifié #26
    Encore plus simple, tu te fais une fenêtre avec un NSTextView, tu ajoutes le texte avec insertText:

    @Client  \t\t  adresse    \t\t  ville\n
    @dujardin \t\t  rue de pinsons  \t\t Paris\n
    @Dupont  \t\t  av de Cocoa  \t\t  Lyon\n

    faudra utiliser stringWithFormat pour créer ces NSStrings.

    puis Pomme-P

    Et voilà  !
  • schlumschlum Membre
    06:46 modifié #27
    dans 1235411039:

    dans 1235067286:

    Tiens, tiens, il se trouve que j'ai bataillé tout ce week end pour justement imprimer une tableView (entre autres informations à  contenir dans une même page).

    Le meilleur moyen que j'ai trouvé pour être maà®tre de la mise en page et parvenir à  mes fins assez simplement, c'est générer du html depuis le code dans une webView "invisible" (j'ai trouvé l'idée sur ce forum je ne sais plus où) avant d'imprimer le contenu de la webView.

    ça marche nicquel !

    As-tu un lien, un exemple de code afin de voir par où il faut commencer?


    Ben... Celui de Cocoa par la Pratique qui est téléchargeable et qui fait quasi-exactement la même chose.
  • RocouRocou Membre
    06:46 modifié #28
    dans 1235416273:

    Ben... Celui de Cocoa par la Pratique qui est téléchargeable et qui fait quasi-exactement la même chose.

    Téléchargeable où ça?  :o
  • RocouRocou Membre
    06:46 modifié #29
    ça y est!  :adios!:

    J'arrive à  imprimer le contenu de mes NSTableview, avec des cadres, des entêtes, choix de la fonte, etc. Il s'agit bien du contenu de la NSTableview puisque l'impression consiste à  récupérer les données en vrac et de construire complètement la vue à  imprimer.

    Maintenant, il me reste à  régler des détails:
    setShowsPrintPanel:YES me permet d'afficher la fenêtre de confirmation de l'impression mais celle-ci est en anglais. Comment faire pour que ce soit la langue par défaut qui soit prise en compte?
  • schlumschlum Membre
    06:46 modifié #30
    à‰tonnant... de quelle fenêtre parles-tu ?
  • CéroceCéroce Membre, Modérateur
    06:46 modifié #31
    dans 1235642439:

    setShowsPrintPanel:YES me permet d'afficher la fenêtre de confirmation de l'impression mais celle-ci est en anglais. Comment faire pour que ce soit la langue par défaut qui soit prise en compte?


    Et ton appli, elle est en quelle langue ?
Connectez-vous ou Inscrivez-vous pour répondre.