如何在ios应用程序中显示和编辑现有的PDF文件
我不想创build新的PDF文件,我已经做了,但想通过代码在iOS中显示和编辑现有的PDF文件..
这是否可能,如果可能,我怎么能做到这一点…
更新
假设将会有文本文档pdf,我们想要在该文件中input一些其他的文本,并保存它..所以如何通过编程来做到这一点?
请帮我解决这个问题…
提前致谢…
我知道这个问题为时已晚,但是我想添加我的解决scheme。
我正在使用UIGraphicsBeginPDFContextToFile
生成PDF文件。 我从基类UIViewController
创build了一个名为PDFCreator
类,因为我有两个函数:
- (void) beginContextWithFile:(NSString *)filename { pageSize = CGSizeMake(1024, 1424); UIGraphicsBeginPDFContextToFile(filename, CGRectZero, nil); UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil); [self createInitialPart]; } - (void) endContext { UIGraphicsEndPDFContext(); }
我已经在应用程序委托文件中创build了这个类的一个对象,因为它将保留对象,直到应用程序终止为止(正如我的要求)。
最初,我调用beginContextWithFile:
它将在文档目录中创build一个pdf文件以及通过调用createInitialPart
方法添加的数据。
稍后,我需要更新该文件,所以我有另一个名为secondPart
方法,虽然我调用了一些更多的数据追加到该文件。
一旦我填充完成创build,我需要调用PDFCreator
类的endContext
,这将完成pdf的一代,是的,我将有更新的文件。
这是有点棘手,我没有执行任何内存检查,虽然我有要求,我find了解决scheme:)
我能够通过创build原始PDF的副本并在构build过程中对其进行修改来实现这一点。
PS:在我的解决scheme中,我需要编辑新的PDF文档信息,所以我使用主题参数来做到这一点。
在Swift 3
func createPDF(on path: String?, from templateURL: URL?, with subject: String?) { guard let newPDFPath = path, let pdfURL = templateURL else { return } let options = [(kCGPDFContextSubject as String): subject ?? ""] as CFDictionary UIGraphicsBeginPDFContextToFile(newPDFPath, .zero, options as? [AnyHashable : Any]) let templateDocument = CGPDFDocument(pdfURL as CFURL) let pageCount = templateDocument?.numberOfPages ?? 0 for i in 1...pageCount { //get bounds of template page if let templatePage = templateDocument?.page(at: i) { let templatePageBounds = templatePage.getBoxRect(.cropBox) //create empty page with corresponding bounds in new document UIGraphicsBeginPDFPageWithInfo(templatePageBounds, nil) let context = UIGraphicsGetCurrentContext() //flip context due to different origins context?.translateBy(x: 0.0, y: templatePageBounds.height) context?.scaleBy(x: 1.0, y: -1.0) //copy content of template page on the corresponding page in new file context?.drawPDFPage(templatePage) //flip context back context?.translateBy(x: 0.0, y: templatePageBounds.height) context?.scaleBy(x: 1.0, y: -1.0) // -->>>> Do your change here <<<<-- /* Here you can do any drawings */ } } UIGraphicsEndPDFContext() }
您可以使用Quartz2D来操作PDF,打开它们,进行转换等等。
查看官方文档
更新:
按照文档中的说明创build你的pdf上下文,然后你只需要写文本: