Pergunta

Eu estou tentando cortar uma NSImage que contém um PDF. Ao imprimir Estou usando drawInRect de NSImage para tê-lo desenhar apenas o que eu preciso -. E isso funciona muito bem

Mas, agora, em vez Eu estou tentando criar uma nova NSImage de apenas a área cortada. Eu joguei com ele por um tempo, então encontrei este código em 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];
}

Isso funciona, mas o NSImage retornado é embaçada, e não mais adequado para impressão. Alguma idéia?

Foi útil?

Solução

lockFocus / unlockFocus executa raster desenho para o cache da imagem. É por isso que “borrada” baixa resolução que -é de e possivelmente misregistered. Você precisa de desenho vetorial.

Use PDF Kit. Primeiro, defina a caixa de corte de cada página para o seu retângulo. Você deve então ser capaz de criar seu cortada NSImage do dataRepresentation do PDFDocument.

Outras dicas

Aqui está o código para executar o que Peter Hosey respondeu. Obrigado!

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]];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top