从PDFPage中提取不同分辨率的NSImage

时间:2013-03-06 11:49:02

标签: cocoa pdf nsimage

NSImage对象获取PDFPage的最佳方法是什么?具有可变分辨率?

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

使用此代码,A4页面的结果图像仅为595x841。我需要更高的分辨率(高达300DPI):

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

1 个答案:

答案 0 :(得分: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];