Swift 中的函数将 Pdf 文件附加到另一个 Pdf
Posted
技术标签:
【中文标题】Swift 中的函数将 Pdf 文件附加到另一个 Pdf【英文标题】:Function in Swift to Append a Pdf file to another Pdf 【发布时间】:2016-05-10 08:26:47 【问题描述】:我使用以下代码在两个不同的视图中创建了两个不同的 pdf 文件:
private func toPDF(views: [UIView]) -> NSData?
if views.isEmpty return nil
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, CGRect(x: 0, y: 0, width: 1024, height: 1448), nil)
let context = UIGraphicsGetCurrentContext()
for view in views
UIGraphicsBeginPDFPage()
view.layer.renderInContext(context!)
UIGraphicsEndPDFContext()
return pdfData
在最终视图中,我使用以下命令调用这两个文件:
let firstPDF = NSUserDefaults.standardUserDefaults().dataForKey("PDFone")
let secondPDF = NSUserDefaults.standardUserDefaults().dataForKey("PDFtwo")
我的问题是:谁能建议一个将第二个文件附加到第一个文件的函数? (都是 NSData 格式)
【问题讨论】:
“合并”是什么意思?要将第二个 PDF 的内容附加到第一个吗?请edit您的问题并解释一下。 是的,这正是我的意思。 ***.com/questions/6553540/merge-pdf-files-on-ios ? 它在 Swift 中对我不起作用。 @Ali:另一个问题给出的解决方案有什么问题? 【参考方案1】:斯威夫特 4:
func merge(pdfs:Data...) -> Data
let out = NSMutableData()
UIGraphicsBeginPDFContextToData(out, .zero, nil)
guard let context = UIGraphicsGetCurrentContext() else
return out as Data
for pdf in pdfs
guard let dataProvider = CGDataProvider(data: pdf as CFData), let document = CGPDFDocument(dataProvider) else continue
for pageNumber in 1...document.numberOfPages
guard let page = document.page(at: pageNumber) else continue
var mediaBox = page.getBoxRect(.mediaBox)
context.beginPage(mediaBox: &mediaBox)
context.drawPDFPage(page)
context.endPage()
context.closePDF()
UIGraphicsEndPDFContext()
return out as Data
【讨论】:
这会起作用,但它会删除您添加的任何注释,例如链接。我发现最简单的方法是从您的数据中创建多个 PDFDocument,然后为每个获取其 PDFPage。然后,您可以从这些页面将这些页面中的每一个插入新的 PDFDocument @DogCoffee 如果您找到了解决方案,我会很感兴趣。谢谢...如何将 PDF 转换为数据? ***.com/a/64190865/12035498DogCoffee 在代码中的回答:Merging is working for me in swift5【参考方案2】:这可以通过 PDFKit 及其 PDFDocument 轻松完成。
我正在使用这个扩展:
import PDFKit
extension PDFDocument
func addPages(from document: PDFDocument)
let pageCountAddition = document.pageCount
for pageIndex in 0..<pageCountAddition
guard let addPage = document.page(at: pageIndex) else
break
self.insert(addPage, at: self.pageCount) // unfortunately this is very very confusing. The index is the page *after* the insertion. Every normal programmer would assume insert at self.pageCount-1
【讨论】:
【参考方案3】:斯威夫特 5:
像这样合并 pdf 以保留链接等...
See answer here
【讨论】:
以上是关于Swift 中的函数将 Pdf 文件附加到另一个 Pdf的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 3.0. 中将一个 pdf 合并到另一个 pdf 文件中?
Swift 3 - NSLayoutConstraint CollectionView 附加到另一个视图