Frage

Ich versuche, eine NSImage zu beschneiden, die eine PDF enthält. Beim Drucken I NSImage des drawInRect verwenden es nur zu haben, zu zeichnen, was ich brauche -. Und das funktioniert super

Aber jetzt stattdessen Ich versuche, eine neue NSImage nur den beschnittenen Bereich zu erstellen. Ich spielte mit ihm für eine Weile fand dann diesen Code auf 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];
}

Dies funktioniert, aber der zurück NSImage ist verschwommen, und nicht mehr für den Druck geeignet. Irgendwelche Ideen?

War es hilfreich?

Lösung

lockFocus / unlockFocus führt Raster auf das Bild des Cache zeichnen. Deshalb ist es „verschwommen“ -e sind mit niedriger Auflösung und möglicherweise falsch ausgerichtet. Sie benötigen Vektorzeichnung.

Verwenden Sie PDF-Kit. Zuerst stellen Sie die Zuschneiderahmen jeder Seite zu Ihren Rechteck. Sie sollten dann in der Lage sein, Ihre abgeschnitten NSImage vom dataRepresentation des PDFDocument zu erstellen.

Andere Tipps

Hier ist der Code auszuführen, was Peter Hosey beantwortet. Dank!

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]];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top