34 lines
1.3 KiB
Swift

import Foundation
import UIKit
import Display
public func generatePdfPreviewImage(url: URL, size: CGSize) -> UIImage? {
guard let data = try? Data(contentsOf: url, options: .mappedIfSafe) else { return nil }
return generatePdfPreviewImage(data: data, size: size)
}
public func generatePdfPreviewImage(data: Data, size: CGSize) -> UIImage? {
guard let provider = CGDataProvider(data: data as CFData) else { return nil }
guard let document = CGPDFDocument(provider) else { return nil }
guard let firstPage = document.page(at: 1) else { return nil }
guard let context = DrawingContext(size: size) else {
return nil
}
context.withContext { c in
var pageRect = firstPage.getBoxRect(.mediaBox)
let pdfScale = 320.0 / pageRect.size.width
pageRect.size = CGSize(width: pageRect.size.width * pdfScale, height: pageRect.size.height * pdfScale)
pageRect.origin = CGPoint.zero
c.setFillColor(UIColor.white.cgColor)
c.fill(pageRect)
c.translateBy(x: 0.0, y: pageRect.size.height)
c.scaleBy(x: 1.0, y: -1.0)
c.concatenate(firstPage.getDrawingTransform(.mediaBox, rect: pageRect, rotate: 0, preserveAspectRatio: true))
c.drawPDFPage(firstPage)
}
return context.generateImage()
}