Привет всем. Я пытаюсь создать PNG-изображения (миниатюры) из pdf для своего приложения, для этого я использовал пару ответов из стека overflow, приведенный ниже, код, который я использую `-
- (Недействительными) pdfToImageConverter {
NSURL* pdfFileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"ebook" ofType:@"pdf"]];
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfFileUrl);
CGPDFPageRef page;
CGRect aRect = CGRectMake(0, 0, 100, 200); // thumbnail size
NSUInteger totalNum = CGPDFDocumentGetNumberOfPages(pdf);
for(int i = 0; i < totalNum; i++ ) {
CGPDFPageRef myPageRef=CGPDFDocumentGetPage(pdf, i+1);
aRect=CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox);
UIGraphicsBeginImageContext(CGSizeMake(383, 383*(aRect.size.height/aRect.size.width)));
CGContextRef context = UIGraphicsGetCurrentContext();
UIImage* thumbnailImage;
//thumbnailImage=[[UIImage alloc] init];
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, aRect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetGrayFillColor(context, 1.0, 1.0);
CGContextFillRect(context, aRect);
// Grab the PDF page
page = CGPDFDocumentGetPage(pdf, i + 1);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, aRect, 0, true);
// And apply the transform.
CGContextConcatCTM(context, pdfTransform);
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
CGContextDrawPDFPage(context, page);
// Create the new UIImage from the context
thumbnailImage = [UIGraphicsGetImageFromCurrentImageContext() retain];
//Use thumbnailImage (e.g. drawing, saving it to a file, etc)
CGContextRestoreGState(context);
NSString *documentsPath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingFormat:@"/page_%d.png",i+1];
NSData *imagedata;//=[[NSData alloc] init];
imagedata=[UIImagePNGRepresentation(thumbnailImage) retain];
[thumbnailImage release];
[imagedata writeToFile:documentsPath atomically:YES];
[imagedata release];
UIGraphicsEndImageContext();
}
CGPDFDocumentRelease(pdf);
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"message" message:@"images creation completed" delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
[alert show];
[alert release];
} `
* Проблема: * Вышеупомянутый код хорошо работает в симуляторе и работает в устройстве для создания некоторых изображений (до 30 миниатюр). Я использовал анализатор для проверки утечек памяти, но выше нет утечек код, но я все еще не могу создать все миниатюры. Я использую ebook.pdf (300 МБ), который содержит 1037 страниц. Поэтому мне нужно 1037 миниатюр.
* Вопрос: *
1. Есть ли проблемы с кодом?
2.Какую ошибку я делаю в приведенном выше блоке кода?
3. Есть ли другой механизм для создания изображений в формате png из PDF?
Заранее спасибо, ваши предложения важнее для меня.