2013-03-06 22 views
0

从可变分辨率的PDFPage对象中获取NSImage的最佳方式是什么?从不同分辨率的PDFPage中提取NSImage

我有一个PDF文件显示在PDFView,我需要捕获当前页面并存储为NSImage。此外,我需要能够改变页面的分辨率(DPI)。

使用此代码,生成的图像对于A4页面仅为595x841。我需要比这更高的分辨率(高达300DPI):

PDFPage *page = _pdfView.currentPage; 
NSData *pageData = page.dataRepresentation; 
NSImage *img = [[NSImage alloc] initWithData:pageData]; 

回答

1

我终于设法排序了这一点:

CGFloat factor = 300/72; // Scale from 72 DPI to 300 DPI 
NSImage *img; // Source image 
NSSize newSize = NSMakeSize(img.size.width*factor, img.size.height*factor); 
NSImage *scaledImg = [[NSImage alloc] initWithSize:newSize]; 
[scaledImg lockFocus]; 
[[NSColor whiteColor] set]; 
[NSBezierPath fillRect:NSMakeRect(0, 0, newSize.width, newSize.height)]; 
NSAffineTransform *transform = [NSAffineTransform transform]; 
[transform scaleBy:factor]; 
[transform concat]; 
[img drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
[scaledImg unlockFocus];