私は小さなデモを書くだけです。その機能はすべて、QLPreviewView を使用して Pages ファイルをすばやく表示することです。アプリを実行すると、スクロールして Pages ファイルのコンテンツを表示できます。[PNG に保存] ボタンをクリックすると、アプリは現在表示されているコンテンツを PNG 画像ファイルに保存します。save メソッドで実装を取得できます。そのメソッドで2つの実装を試しましたが、どちらも機能しませんでした。ウィンドウの背景色で満たされた空白の画像を取得しました。ここでアドバイスしますか?ありがとう。
コードとアプリのスクリーン ショットは、http://dr.ibuick.com/updUにあります。
#import <Cocoa/Cocoa.h>
#import <Quartz/Quartz.h>
#import <QuickLook/QuickLook.h>
#import "IBAppDelegate.h"
@interface IBAppDelegate (QLPreviewItem) <QLPreviewItem>
@end
@implementation IBAppDelegate (QLPreviewItem)
- (NSURL *)previewItemURL
{
return self.resolvedFileURL;
}
- (NSString *)previewItemTitle
{
return [self.originalURL absoluteString];
}
@end
@implementation IBAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
_resolvedFileURL = [NSURL fileURLWithPath:@"/Users/buick/Desktop/1.pages"];
_originalURL = [NSURL fileURLWithPath:@"/Users/buick/Desktop/1.pages"];
_previewView = [[QLPreviewView alloc] initWithFrame:NSMakeRect(0, 50, 480, 360)
style:QLPreviewViewStyleNormal];
[_previewView setPreviewItem:self];
[self.window.contentView addSubview:_previewView];
}
- (IBAction)save:(id)sender {
// Method 1
[_previewView lockFocus];
NSBitmapImageRep* rep = [_previewView
bitmapImageRepForCachingDisplayInRect:_previewView.bounds];
[_previewView cacheDisplayInRect:_previewView.bounds toBitmapImageRep:rep];
[_previewView unlockFocus];
[[rep representationUsingType:NSPNGFileType properties:nil]
writeToFile:@"/Users/buick/Desktop/1.png" atomically:YES];
// Method 2
[_previewView lockFocus];
NSBitmapImageRep *bits;
bits = [[NSBitmapImageRep alloc]
initWithFocusedViewRect:[_previewView visibleRect]];
[_previewView unlockFocus];
NSData *imageData;
NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber
numberWithFloat:0.9] forKey:NSImageCompressionFactor];
imageData = [bits representationUsingType:NSJPEGFileType
properties:imageProps];
[imageData writeToFile:@"/Users/buick/Desktop/1.png" atomically:YES];
}
@end