1

I'm trying to merge several PDF documents. Some of them can be quite large.

In some cases my app crashes due to memory pressure. the autoreleasepool doesn't seem to work either. Is there something wrong with my code ?

func combinePDFs(urls: [URL]) throws -> URL {
    let resultPDF = PDFDocument()
    var currentPageIndex = 0
    for url in urls {
        autoreleasepool {
            if let pdfPart = PDFDocument(url: url) {
                let pageCount = pdfPart.pageCount
                for pageIndex in 0..<pageCount {
                    guard
                        let page = pdfPart.page(at: pageIndex)?.copy() as? PDFPage
                    else { continue }
                    resultPDF.insert(page, at: currentPageIndex)
                    currentPageIndex += 1
                }
            }
        }
    }
    let filename = "\(UUID().uuidString).pdf"
    let destUrl = try self.projectFileResolver.urlForFile(filename, ofType: .tmp, inProject: TmpProjectID)
    resultPDF.write(to: destUrl)
    return destUrl
}

Thank you

Aymarick
  • 533
  • 2
  • 11

0 Answers0