我正在尝试裁剪包含PDF的NSImage.在打印时我正在使用NSImage的drawInRect来让它只绘制我需要的东西 - 而且效果很好.
但是,现在我正试图创建一个仅裁剪区域的新NSImage.我玩了一段时间,然后在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]; }
这样可行,但返回的NSImage模糊,不再适合打印.有任何想法吗?
lockFocus
/ unlockFocus
对图像的缓存执行光栅绘制.这就是为什么它"模糊" - 低分辨率和可能错误注册.你需要矢量绘图.
使用PDF工具包.首先,将每页的裁剪框设置为矩形.然后,您应该能够从dataRepresentation
PDFDocument 创建裁剪的NSImage .