2011-07-29 64 views
5

大家好我正在处理Objective-C。我以前的问题是How can I edit PDF files in an iOS application? 经过大量的谷歌搜索后,我发现了以下内容。在UIWebView中显示PDF,使用C/javascript提取数据并进行编辑。我仍然不确定这个程序。现在我已计划是将pdf文件转换为文本文件

1)显示PDF

2)当用户想要编辑的PDF我隐蔽的PDF文本,让他能够编辑

3)试着拯救WIL将内容转换回pdf。

这是一个继续前进的方式?我与第1步。现在我如何转换PDF - >文本和文本 - > PDF。

在此先感谢

回答

2

当加载自定义文档类型(DOC,PPT,PDF等)转换成一个UIWebView,web视图返回零HTML字符串,即使是通过JavaScript。提取PDF文本here有几点建议。

但是将字符串转换回PDF是不同的。如果您想保留原始PDF的格式,我相当肯定这是不可能的,因为NSAttributedString iOS上没有做太多。但是,这会为纯文本或NSAttributedString工作,如果可能的:

NSData *PDFDataFromString(NSString *str) { 
    NSMutableData *data = [NSMutableData data]; 

    //Create an NSAttributedString for CoreText. If you find a way to translate 
    //PDF into an NSAttributedString, you can skip this step and simply use an 
    //NSAttributedString for this method's argument. 

    NSAttributedString* string = [[[NSAttributedString alloc] initWithString:str] autorelease]; 

    //612 and 792 are the dimensions of the paper in pixels. (8.5" x 11") 
    CGRect paperRect = CGRectMake(0.0, 0.0, 612, 792); 

    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef) string); 
    CGSize requiredSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, [string length]), NULL, CGSizeMake(paperRect.size.width - 144, 1e40), NULL); 

    //Subtract the top and bottom margins (72 and 72), so they aren't factored in page count calculations. 
    NSUInteger pageCount = ceill(requiredSize.height/(paperRect.size.height - 144)); 
    CFIndex resumePageIndex = 0; 
    UIGraphicsBeginPDFContextToData(data, paperRect, nil); 

    for(NSUInteger i = 0; i < pageCount; i++) 
    { 

    //After calculating the required number of pages, break up the string and 
    //draw them into sequential pages. 

     UIGraphicsBeginPDFPage(); 
     CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
     CGContextSaveGState (currentContext); 
     CGContextSetTextMatrix(currentContext, CGAffineTransformIdentity); 
     CGMutablePathRef framePath = CGPathCreateMutable(); 

     //72 and 72 are the X and Y margins of the page in pixels. 
     CGPathAddRect(framePath, NULL, CGRectInset(paperRect, 72.0, 72.0)); 

     CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, CFRangeMake(resumePageIndex, 0), framePath, NULL); 
     resumePageIndex += CTFrameGetVisibleStringRange(frameRef).length; 
     CGPathRelease(framePath); 
     CGContextTranslateCTM(currentContext, 0, paperRect.size.height); 
     CGContextScaleCTM(currentContext, 1.0, -1.0); 
     CTFrameDraw(frameRef, currentContext); 
     CFRelease(frameRef);  
     CGContextRestoreGState (currentContext); 
    } 
    CFRelease(framesetter); 
    UIGraphicsEndPDFContext(); 
    return data; 
}