NSImage - nach Ernte PDF ist verschwommen
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?
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]];