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