문제
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 키트를 사용하십시오. 먼저 각 페이지의 작물 상자를 사각형으로 설정하십시오. 그런 다음 자른 nsimage를 dataRepresentation
pdfdocument의.
다른 팁
Peter Hosey가 대답 한 내용을 수행하는 코드는 다음과 같습니다. 감사!
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]];
제휴하지 않습니다 StackOverflow