"concaténer" des pages à  imprimer

RocouRocou Membre
11:12 modifié dans API AppKit #1
Bonjour,

Dans mon application je génère des documents d'une seule page que je propose illico d'imprimer.
ça fonctionne très bien.

Aujourd'hui, ces documents, générés chaque jour, sont devenus très nombreux et il est pénible de devoir cliquer sur imprimer à  chaque document.
Je voudrais donc générer un document uniquement contenant tous les autres mais je ne sais pas trop comment m'y prendre.
Voici mon code actuel:

&nbsp;  	<br /><br />NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];<br />	&nbsp;  <br />NSPrintOperation *printOp;<br />&nbsp; &nbsp; &nbsp;  <br />Bordereau *pbordereau; //NB: Bordereau est une classe décrivant mon document d&#039;une seule page<br /><br />int i=0;<br />for (i=0;i&lt;[ListeTruc count];i++)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pbordereau = [[Bordereau alloc] initWithFrame:NSMakeRect(0,0,1000,1000)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [pbordereau initWithDonnesBordereau: [ListeTruc objectAtIndex:i]];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printOp = [NSPrintOperation printOperationWithView:pbordereau printInfo:printInfo];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [printOp runOperation];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [pbordereau release];<br />&nbsp; &nbsp; &nbsp;  }<br />

Réponses

  • CéroceCéroce Membre, Modérateur
    11:12 modifié #2
    Je ne suis pas très sûr de moi (il y a peut-être plus simple) mais ce que je ferais serait de dessiner dans un contexte PDF; tu pourrais alors enregistrer la page en PDF.
  • RocouRocou Membre
    11:12 modifié #3
    Merci pour cette piste.
    Pour le moment, je travaille sur une autre idée: mettre tous mes "Bordereau" dans un mutableArray et créer une nouvelle classe "document" qui serait charger d'imprimer toutes les pages. Je ne suis pas sûr de moi non plus...
  • laudemalaudema Membre
    11:12 modifié #4
    Ayant fait comme le conseille Ceroce, mettre plusieurs documents dans un pdf créé pour l'occasion, ça n'est pas très compliqué et ça offre tous les avantages du pdf quand on veut visualiser ou imprimer.
    <br />			NSImage *image = [[NSImage alloc] initWithContentsOfURL:url];			<br />			if (! pdfscans) pdfScans = [[PDFDocument alloc]init];//pdfScans est une variable d&#039;instance<br />			PDFPage *newPage =[[PDFPage alloc]initWithImage:(CIImage*)image];<br />			NSUInteger pageCount = [pdfScans pageCount];<br />			[pdfScans insertPage:newPage atIndex:pageCount];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [newPage release];<br />//...<br />
    
  • RocouRocou Membre
    11:12 modifié #5
    dans 1316717181:

    Ayant fait comme le conseille Ceroce, mettre plusieurs documents dans un pdf créé pour l'occasion, ça n'est pas très compliqué et ça offre tous les avantages du pdf quand on veut visualiser ou imprimer.
    <br />			NSImage *image = [[NSImage alloc] initWithContentsOfURL:url];			<br />			if (! pdfscans) pdfScans = [[PDFDocument alloc]init];//pdfScans est une variable d&#039;instance<br />			PDFPage *newPage =[[PDFPage alloc]initWithImage:(CIImage*)image];<br />			NSUInteger pageCount = [pdfScans pageCount];<br />			[pdfScans insertPage:newPage atIndex:pageCount];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [newPage release];<br />//...<br />
    


    Merci pour ton aide.
    ça à  l'air simple en effet mais je ne vois pas comment associer ma classe Bordereau avec newPage. Visiblement on a le choix entre initWithImage ou init tout court. Mon Bordereau n'étant pas une image, je ne sais pas du tout comment m'y prendre.

  • RocouRocou Membre
    septembre 2011 modifié #6
    Youpi! J'en ai chi* mais j'ai réussi  :D

    Pas en utilisant PDFPage, malgré tout mes efforts, cela ne donnait rien.
    J'ai utilisé des subView que j'ai ajoutées à  ma vue principale en les décalant d'une page à  chaque fois.

    Voici mon code:

    &nbsp;  	NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];<br />	&nbsp;  <br />NSPrintOperation *printOp;<br />&nbsp; &nbsp; &nbsp;  <br />Bordereau *pbordereau;<br /><br />NSView *totalBordereau = [[NSView alloc] initWithFrame:NSMakeRect(0,0,1000,1000*[ListeTruc count])];<br />NSView *sousVue=[[NSView alloc] initWithFrame:NSMakeRect(0,0,1000,1000)];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />int i=0;<br />for (i=0;i&lt;[ListeTruc count];i++)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pbordereau = [[Bordereau alloc] initWithFrame:NSMakeRect(0,0,1000,1000)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [pbordereau initWithDonnesBordereau: [maListeBordereau objectAtIndex:i]];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printOp = [NSPrintOperation printOperationWithView:pbordereau printInfo:printInfo];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sousVue=[printOp view];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [sousVue setFrameOrigin:NSMakePoint(0.0,1000.0*i)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [totalBordereau addSubview:sousVue];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [pbordereau release];<br />&nbsp; &nbsp; &nbsp;  }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br /><br />&nbsp; &nbsp; <br /> [printInfo setOrientation:NSPortraitOrientation];<br /> printOp = [NSPrintOperation printOperationWithView:totalBordereau printInfo:printInfo];<br /><br /> [printOp setShowsPrintPanel:YES];<br /> [printOp setShowsProgressPanel:YES];<br />&nbsp; &nbsp; <br /> [printOp runOperation];<br />
    
  • laudemalaudema Membre
    11:12 modifié #7
    Désolé j'arrive trop tard. Au cas où tu en aurais besoin plus tard tu peux utiliser la printOperation pour en faire un pdf, tu peux aussi partir de la contentView  .
    Au cas où tu voudrais quand même offrir aussi un pdf directement à  tes utilisateurs..
    Sinon, quand tu as un pdf tu peux te déplacer dans les pages, les copier pour les recoller dans un autre etc. ...
  • RocouRocou Membre
    11:12 modifié #8
    dans 1316789631:

    Désolé j'arrive trop tard. Au cas où tu en aurais besoin plus tard tu peux utiliser la printOperation pour en faire un pdf, tu peux aussi partir de la contentView  .
    Au cas où tu voudrais quand même offrir aussi un pdf directement à  tes utilisateurs..
    Sinon, quand tu as un pdf tu peux te déplacer dans les pages, les copier pour les recoller dans un autre etc. ...

    Oui, j'ai essayé tout ceci mais tout ce qui sortait c'était une page blanche. J'ai provisoirement laissé tomber.
    De toutes les façons, merci pour l'aide, c'est en bossant sur la doc concernant les pdf que l'idée des subView m'est venue  :)
Connectez-vous ou Inscrivez-vous pour répondre.