1

我在将 PDF 页面另存为 UIImage 时遇到了一些问题...该 pdf 是从 Internet 加载的,并且只有一页(原始 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 上,可能是它降低了图片的质量……你能建议我如何保持质量吗?请帮助并给我一些建议

谢谢

4

1 回答 1

1
CGContextTranslateCTM(context, 0.0, 900);//320
  • 这里通常翻译操作的最后一个参数应该是上下文的高度或您为其创建图像的矩形的高度。所以,我认为它应该是 1024(你已经采取了图像上下文的高度是 1024 所以在这里我假设状态栏不存在)。这可以消除裁剪问题。我在您的代码中注意到的更多内容,您应该在对上下文进行任何操作之前保存图形的状态。您正在保存它,但经过几次操作。
  • 上面的代码将尝试使其高度适合,因此如果实际页面的高度大于您的上下文高度,那么它将按比例缩小。所以你可以明显地看到页面周围的空白。
  • 还有一件事,如果您的原始 pdf 页面中有空格,那么据我所知,没有办法消除它。
于 2011-11-27T14:41:32.227 回答