如何在ios应用程序中将pdf页面转换为文本文件

时间:2014-01-23 07:09:30

标签: ios iphone ipad pdf

您能帮我转换特定的PDF文件页面到文本文件,或者提供链接来编辑pdf文件iOS应用程序。

提前致谢

1 个答案:

答案 0 :(得分:1)

当您将自定义文档类型(doc,ppt,pdf等)加载到UIWebView中时,webview会返回一个nil HTML字符串,即使是通过javascript也是如此。有一些提取PDF文本的建议here

但将字符串转换回PDF是不同的。如果你想保留原始PDF的格式,我相信这是不可能的,因为iOS上的NSAttributedString并没有做太多。但是这可以用于纯文本或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;
}

快乐编码!!!