can*_*ian 5 pdf iphone objective-c ipad ios4
大家好我正在研究Objective-C.我以前的问题是如何在iOS应用程序中编辑PDF文件? 经过大量的谷歌搜索后,我发现了以下内容.在UIWebView中显示pdf,使用C/javascript提取数据并进行编辑.我仍然不确定这个程序.现在我的计划是
1)显示pdf
2)当用户想要编辑pdf时,我将pdf转换为文本并允许他编辑它
3)试着保存将内容转换回pdf.
这是一种继续进行的方式吗?im k with step 1.现在我如何转换pdf - >文本和文本 - > pdf.
提前致谢
当您将自定义文档类型(doc、ppt、pdf 等)加载到 UIWebView 中时,即使通过 javascript,webview 也会返回 nil HTML 字符串。关于提取 PDF 文本的一些建议这里。
但将字符串转回 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2972 次 |
| 最近记录: |