2009-12-13 1 views
3

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

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

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]; 
} 

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

ответ

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_

+0

Я не думаю, что это сработало, так как мне нужно вызвать [NSPDFImageRep imageRepWithData: pdfData], который создает и возвращает объект NSPDFImageRep, инициализированный указанными данными PDF. Если бы я использовал [NSImageRep drawInRect:], как бы мне получить страницу PDF для рисования в этом прямоугольнике? –

+1

Для меня это похоже, что этот подход работает нормально. Это код: NSRect bounds = pdfImageRep.bounds; CGFloat factor = 4; NSRect rect = NSMakeRect (0, 0, bounds.size.width * factor, bounds.size.height * factor); NSImage * image = [[NSImage alloc] initWithSize: rect.size]; [блокировка изображенияFocus]; [pdfImageRep drawInRect: rect]; [image unlockFocus]; – Holtwick

2

Самый простой способ будет использовать рамки ImageIO. Загрузите данные PDF в image source, чтобы получить CGImage; подайте этот объект на image destination, чтобы сгенерировать (и при необходимости сохранить на том же шаге) данные JPEG. На последнем этапе вы можете указать разрешение среди свойств изображения; см. “Individual Image Properties” in the documentation.

Не забудьте указать finalize your destination. Это жизненно важно.