сохранение изображения со страницы CGPDfDocument не совсем вписывается в UIImageview - PullRequest
1 голос
/ 27 ноября 2011

У меня возникли проблемы с сохранением страницы PDF в виде UIImage ... PDF загружен из Интернета и содержит одну страницу (исходный PDF был разделен на несколько) ... но преобразованное изображение иногда обрезается.... иногда он маленький и оставляет пустое пространство, когда помещается в UIImageview ...

вот код

-(UIImage *)imageFromPdf:(NSString *) pdfUrl{

NSURL *pdfUrlStr=[NSURL URLWithString:pdfUrl];

CFURLRef docURLRef=(CFURLRef)pdfUrlStr;


UIGraphicsBeginImageContext(CGSizeMake(768, 1024)); //840, 960
NSLog(@"save begin");

CGContextRef context = UIGraphicsGetCurrentContext();

//CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("/file.pdf"), NULL, NULL);

CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL(docURLRef);

NSLog(@"save complete");

CGContextTranslateCTM(context, 0.0, 900);//320

CGContextScaleCTM(context, 1.0, -1.0);

CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1);

CGContextSaveGState(context);


CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, CGRectMake(0, 0, 768, 1024), 0, true);

CGContextConcatCTM(context, pdfTransform);

CGContextDrawPDFPage(context, page);

CGContextRestoreGState(context);

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext();

return resultingImage;

}

кстати, я подготовил свойUIImageview с помощью кодировки, подобной этой

self.PDFImageVIew.contentMode  = UIViewContentModeScaleAspectFit;
self.PDFImageVIew.clipsToBounds = YES;

Я просто хочу, чтобы это изображение идеально вписывалось в UIImageview, и, может быть, оно снижает качество изображения ... У вас есть предложение, как я могу также сохранить качество?Пожалуйста, помогите и дайте мне предложение

спасибо

1 Ответ

1 голос
/ 27 ноября 2011
CGContextTranslateCTM(context, 0.0, 900);//320
  • Здесь обычно последним параметром операции перевода должна быть высота контекста или высота прямоугольника, для которого вы создаете изображение. Итак, я думаю, что это должно быть 1024 (Вы взяли высоту контекста изображения равной 1024, поэтому здесь я предполагаю, что строка состояния отсутствует). Это может устранить проблему обрезки. Еще несколько вещей, которые я отметил в вашем коде, вы должны сохранить состояние графики перед любой операцией в контексте. Вы сохраняете его, но после нескольких операций.
  • Приведенный выше код будет пытаться подогнать его по высоте, поэтому, если высота фактической страницы больше, чем высота вашего контекста, она будет уменьшена. так что вы можете видеть пробел вокруг страницы.
  • Еще одна вещь, если ваша оригинальная pdf-страница содержит пробелы, то, насколько я знаю, ее невозможно устранить.
...