Webページのスクリーンショットを取る。
- [WebController capturePage:] を用意し、InterfaceBuilderでキャプチャボタンのターゲットに指定する。5月ぐらいに検証したときのコードをそのまま貼付けて使った。
WebController.m
- (IBAction)capturePage:(id)sender
{
// (0) ready for capture
[_web_window orderOut:nil];
// (1) filename
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDesktopDirectory, NSUserDomainMask, YES);
NSString* path = [NSString stringWithFormat:@"%@/test.png",
[paths objectAtIndex:0], nil];
// (2) size
NSRect rect = [[[[_web_view mainFrame] frameView] documentView] bounds];
[_web_window setContentSize:rect.size];
// (3) capture
[[[[_web_view mainFrame] frameView] documentView] lockFocus];
NSBitmapImageRep* bitmap_rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:rect];
[[[[_web_view mainFrame] frameView] documentView] unlockFocus];
NSData* data = [bitmap_rep representationUsingType:NSPNGFileType
properties:[NSDictionary dictionary]];
[data writeToFile:path atomically:YES];
// (4) restore window
[_web_window setFrame:[self webWindowFrame] display:YES];
[_web_window makeKeyAndOrderFront:nil];
}
動かしてみる。ページが表示されたら右上のボタンを押す。
するとデスクトップに test.png が作成される。
開くと該当ページのスクリーンショット画像が入っているのがわかる。
ソース:WebPageScreenshotUtility-02.zip