سؤال

وأنا أحاول اقتصاص NSImage الذي يحتوي على PDF. عند الطباعة أستخدمه drawInRect NSImage لأنها قد رسم فقط ما أحتاج - وهذا يعمل كبيرة

ولكن، الآن بدلا أحاول إنشاء 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 يؤدي النقطية رسم على مخبأ للصورة. هذا هو السبب في أنها منخفضة الدقة "ضبابية"، انها وربما misregistered. تحتاج ناقلات الرسم.

استخدم PDF عدة. أولا، تعيين مربع محصول كل صفحة إلى المستطيل الخاص. يجب أن تكون ثم قادرا على خلق NSImage بك اقتصاص من dataRepresentation من PDFDocument.

نصائح أخرى

وهنا هو رمز لأداء ما أجاب بطرس 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