2012-06-11 70 views
0

下面的代码来自iOS开发中心:http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/GeneratingPDF/GeneratingPDF.htmliOS - 创建分页pdf的

问题是,事情似乎是一团糟。例如,它在声明这样的参数之前引用“Context”和“currentRange”。任何人都可以做出正面或反面的?也许我应该在“UIGraphicsBeginPDFPage”函数中声明其他位置?我知道你需要在.m文件中有“#import”。

- (CFRange)renderPage:(NSInteger)pageNum withTextRange:(CFRange)currentRangeandFramesetter:(CTFramesetterRef)framesetter 
{ 
// Get the graphics context. 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

// Put the text matrix into a known state. This ensures 
// that no old scaling factors are left in place. 
CGContextSetTextMatrix(Context, CGAffineTransformIdentity); 

// Create a path object to enclose the text. Use 72 point 
// margins all around the text. 
CGRect frameRect = CGRectMake(72, 72, 468, 648); 
CGMutablePathRef framePath = CGPathCreateMutable(); 
CGPathAddRect(framePath, NULL, frameRect); 

// Get the frame that will do the rendering. 
// The currentRange variable specifies only the starting point. The framesetter 
// lays out as much text as will fit into the frame. 
CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, currentRange, framePath, NULL); 
CGPathRelease(framePath); 

// Core Text draws from the bottom-left corner up, so flip 
// the current transform prior to drawing. 
CGContextTranslateCTM(currentContext, 0, 792); 
CGContextScaleCTM(currentContext, 1.0, -1.0); 

// Draw the frame. 
CTFrameDraw(frameRef, currentContext); 

// Update the current range based on what was drawn. 
currentRange = CTFrameGetVisibleStringRange(frameRef); 
currentRange.location += currentRange.length; 
currentRange.length = 0; 
CFRelease(frameRef); 

return currentRange; 
} 

- (void)drawPageNumber:(NSInteger)pageNum 
{ 
NSString* pageString = [NSString stringWithFormat:@"Page %d", pageNum]; 
UIFont* theFont = [UIFont systemFontOfSize:12]; 
CGSize maxSize = CGSizeMake(612, 72); 

CGSize pageStringSize = [pageString sizeWithFont:theFont 
           constrainedToSize:maxSize 
            lineBreakMode:UILineBreakModeClip]; 
CGRect stringRect = CGRectMake(((612.0 - pageStringSize.width)/2.0), 
           720.0 + ((72.0 - pageStringSize.height)/2.0) , 
           pageStringSize.width, 
           pageStringSize.height); 

[pageString drawInRect:stringRect withFont:theFont]; 
} 

回答

1

currentRange是该方法的一个参数。它看起来像你在那里失去了一个空间:currentRangeandFramesetter应该是currentRange andFramesetter

Context是一个错字,应该是currentContext。代码编译以外。

+0

啊,是的,我确实删除了这个空间。因为我没有导入Coretext,所以在该行发生错误。在我知道如何解决它之前,我通过currentRange和andFramesetter在意外事故中分解了。谢谢,错误现在都消失了。 –