Domanda

Sto cercando di ritagliare una NSImage che contiene un PDF. Quando si stampa Sto usando drawInRect di NSImage per averlo disegnare solo quello che mi serve -. E questo funziona alla grande

Ma, ora invece sto cercando di creare un nuovo NSImage di solo l'area ritagliata. Ho giocato con lui per un po ', poi ho trovato questo codice sul 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];
}

Questo funziona, ma il NSImage restituito è sfocata, e non più adatto per la stampa. Tutte le idee?

È stato utile?

Soluzione

lockFocus / unlockFocus esegue raster disegno alla cache dell'immagine. Ecco perché è a bassa risoluzione “sfocata” -è e possibilmente fuori registro. Avete bisogno di disegno vettoriale.

Usa PDF Kit. In primo luogo, impostare la casella di ritaglio di ciascuna pagina al tuo rettangolo. Si dovrebbe quindi essere in grado di creare il vostro ritagliata NSImage dalla dataRepresentation del PDFDocument.

Altri suggerimenti

Ecco il codice per eseguire ciò che ha risposto Peter Hosey. Grazie!

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]];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top