문제

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]];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top