Преобразование страниц PDF в изображения с помощью COCOA

У меня проблема с преобразованием PDF в изображения. Я хотел бы создать файл изображения для каждой страницы в документе PDF.

Это код, который я использую, и он отлично работает. Каждая страница преобразуется в изображение, но у меня проблема с разрешением изображения. Я не знаю, как установить разрешение выходных изображений. Кто-нибудь может мне помочь?

NSData *pdfData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost/test/test.pdf"]];


NSPDFImageRep *img = [NSPDFImageRep imageRepWithData:pdfData]; 
 NSFileManager *fileManager = [NSFileManager defaultManager];
 int count = [img pageCount]; 
 for(int i = 0 ; i < count ; i++) { 
  [img setCurrentPage:i]; 
  NSImage *temp = [[NSImage alloc] init]; 
  [temp addRepresentation:img]; 
  NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:[temp TIFFRepresentation]]; 
  NSData *finalData = [rep representationUsingType:NSJPEGFileType properties:nil]; 
  NSString *pageName = [NSString stringWithFormat:@"Page_%d.jpg", [img currentPage]]; 
  [fileManager createFileAtPath:[NSString stringWithFormat:@"%@/%@", @"/Users/mac/Desktop/", pageName] contents:finalData attributes:nil];
 }

Большое спасибо!


person Primoz Rome    schedule 13.12.2009    source источник


Ответы (2)


Поскольку NSPDFImageRep является подклассом NSImageRep, нельзя ли использовать метод [NSImageRep drawInRect:]?

Ссылка: http://developer.apple.com/mac/library/documentation/cocoa/reference/ApplicationKit/Classes/NSImageRep_Class/Reference/Reference.html#//apple_ref/doc/uid/20000346-drawInRect_

person refulgentis    schedule 13.12.2009
comment
Я не думаю, что это сработает, поскольку мне нужно вызвать [NSPDFImageRep imageRepWithData:pdfData], который создает и возвращает объект NSPDFImageRep, инициализированный указанными данными PDF. Если бы я использовал [NSImageRep drawInRect:], как бы я получил PDF-страницу для рисования в этом прямоугольнике? - person Primoz Rome; 13.12.2009
comment
Для меня похоже, что этот подход работает нормально. Это код: NSRect bounds = pdfImageRep.bounds; CGFloat фактор = 4.; NSRect rect = NSMakeRect(0, 0, bounds.size.width * фактор, bounds.size.height * фактор); NSImage *image = [[NSImage alloc] initWithSize:rect.size]; [изображение блокировки фокуса]; [pdfImageRep drawInRect:прямая]; [изображение разблокировать фокус]; - person Holtwick; 20.02.2013

Самый простой способ — использовать фреймворк ImageIO. Передайте данные PDF в источник изображения, чтобы получить CGImage ; передать этот объект в назначение изображения для создания (и, при необходимости, сохранения на том же шаге) данных JPEG. На последнем шаге вы можете указать разрешение среди свойств изображения; см. «Индивидуальные свойства изображения» в документации.

Не забудьте завершить пункт назначения. Это жизненно важно.

person Peter Hosey    schedule 15.12.2009