Question

Je suis en train de rogner une NSImage qui contient un fichier PDF. Lors de l'impression que je me sers de drawInRect NSImage pour l'avoir tirer seulement ce que je dois -. Et cela fonctionne très bien

Mais, maintenant au lieu que je suis en train de créer une nouvelle NSImage de seulement la zone recadrée. Je jouais avec elle pendant un certain temps, puis trouvé ce code sur CocoaBuilder:

- (NSImage *) imageFromRect: (NSRect) rect
{
  NSAffineTransform * xform = [NSAffineTransform transform];

  // translate reference frame to map rectangle 'rect' into first quadrant
  [xform translateXBy: -rect.origin.x
                  yBy: -rect.origin.y];

  NSSize canvas_size = [xform transformSize: rect.size];

  NSImage * canvas = [[NSImage alloc] initWithSize: canvas_size];
  [canvas lockFocus];

  [xform concat];

  // Get NSImageRep of image
  NSImageRep * rep = [self bestRepresentationForDevice: nil];

  [rep drawAtPoint: NSZeroPoint];

  [canvas unlockFocus];
  return [canvas autorelease];
}

Cela fonctionne, mais le retour NSImage est floue, et ne convient plus pour l'impression. Toutes les idées?

Était-ce utile?

La solution

lockFocus / unlockFocus effectue le dessin raster dans le cache de l'image. Voilà pourquoi il est -it basse résolution est « floue » et peut-être un repérage incorrect. Vous avez besoin de dessin vectoriel.

Utiliser le kit PDF. Tout d'abord, mettre la boîte de culture de chaque page à votre rectangle. Vous devriez alors être en mesure de créer votre NSImage recadrée de la dataRepresentation du PDFDocument.

Autres conseils

Voici le code à exécuter ce que Peter a répondu Hosey. Merci!

PDFDocument *thePDF = [[PDFDocument alloc] initWithData:pdfData];
PDFPage *thePage = [thePDF pageAtIndex:0];
NSRect pageCropRect = NSMakeRect(0, 100, 100, 100);

[thePage setBounds:pageCropRect forBox:kPDFDisplayBoxMediaBox];
NSImage *theCroppedImage = [[NSImage alloc] initWithData:[thePage dataRepresentation]];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top