mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 21:45:19 +00:00
34 lines
1.3 KiB
Swift
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()
|
|
}
|