Swift中的功能,可将一个Pdf文件附加到另一个Pdf

Ali*_*Ali 4 pdf swift

我使用以下代码在两个不同的视图中创建了两个不同的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
}
Run Code Online (Sandbox Code Playgroud)

在最终视图中,我使用以下命令调用这两个文件:

let firstPDF = NSUserDefaults.standardUserDefaults().dataForKey("PDFone")
let secondPDF = NSUserDefaults.standardUserDefaults().dataForKey("PDFtwo")
Run Code Online (Sandbox Code Playgroud)

我的问题是:有人可以建议将第二个文件追加到第一个文件的功能吗?(两者均为NSData格式)

小智 9

使用 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
            }
        }
    
    }
Run Code Online (Sandbox Code Playgroud)


And*_*Ley 5

斯威夫特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
}
Run Code Online (Sandbox Code Playgroud)