1

我正在尝试使用NSView对象保存 PDF 文件。这是Square类(的子类NSView)的实现。

@implementation Square

- (id)initWithColor:(NSColor *)aColor;
{
if (self = [super init])
{
    self.frame = NSMakeRect(0, 0, 50, 50);
    self.color = aColor;
}
return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
[self.color set];
NSRectFill(dirtyRect);

}

这是 my DrawView- sublcass 的实现的一部分NSView

- (void)awakeFromNib
{
squareGroup = [[NSMutableArray alloc] init];
}

- (void)addSquare:(Square *)square
{
[squareGroup addObject:square];
[self addSubview:square];
}

- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor whiteColor] set];
NSRectFill(dirtyRect);
}

我可以单击按钮RedBlue添加Square蓝色或红色的对象,当我单击时,Save我想保存DrawView带有Square对象的白色。我现在可以移动Square物体,DrawView所以每个Square物体都在不同的地方。

我的保存方法如下所示(在DrawView课堂上):

- (void)saveAsPDF
{
NSString *homeDirectory = NSHomeDirectory();
NSURL *fileURL = [NSURL fileURLWithPath:[homeDirectory stringByAppendingPathComponent:@"file.pdf"]];

CGRect mediaBox = self.bounds;
CGContextRef ctx = CGPDFContextCreateWithURL((__bridge CFURLRef)(fileURL), &mediaBox, NULL);

CGPDFContextBeginPage(ctx, NULL);

for (Square *square in squareGroup) {
    [square.layer renderInContext:ctx];
}

[self.layer renderInContext:ctx];

CGPDFContextEndPage(ctx);
CFRelease(ctx);
}

结果我在主目录中只有空白文件。

我的保存方法有什么问题?我怎样才能正确地做到这一点?

4

1 回答 1

2

这里有一个非常有用的教程可以帮助你

他们提出了两种方法:第一种是这样,但第二种更全面,值得一看。

(void)didEnd:(NSSavePanel *)sheet
returnCode:(int)code
saveFormat:(void *)saveType
{
if (code == NSOKButton)
{
    if (pageIt)
    {

    }
    else
    {
        NSRect r = [textView bounds];
        NSData *data = [textView dataWithPDFInsideRect:r];

        [data writeToFile:[sheet filename] atomically:YES];
    }
}
}
于 2013-01-28T19:58:06.083 回答