Committed by
David PHAM-VAN
Fix raster crash on iOS and MacOS
- use guard let to prevent crashes when CGDataProvider cannot be instantiated
Showing
2 changed files
with
10 additions
and
8 deletions
@@ -312,18 +312,19 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -312,18 +312,19 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
312 | } | 312 | } |
313 | 313 | ||
314 | public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) { | 314 | public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) { |
315 | - let provider = CGDataProvider(data: data as CFData)! | 315 | + guard |
316 | + let provider = CGDataProvider(data: data as CFData), | ||
316 | let document = CGPDFDocument(provider) | 317 | let document = CGPDFDocument(provider) |
317 | - if document == nil { | 318 | + else { |
318 | printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file") | 319 | printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file") |
319 | return | 320 | return |
320 | } | 321 | } |
321 | 322 | ||
322 | DispatchQueue.global().async { | 323 | DispatchQueue.global().async { |
323 | - let pageCount = document!.numberOfPages | 324 | + let pageCount = document.numberOfPages |
324 | 325 | ||
325 | for pageNum in pages ?? Array(0 ... pageCount - 1) { | 326 | for pageNum in pages ?? Array(0 ... pageCount - 1) { |
326 | - guard let page = document!.page(at: pageNum + 1) else { continue } | 327 | + guard let page = document.page(at: pageNum + 1) else { continue } |
327 | let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180 | 328 | let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180 |
328 | let rect = page.getBoxRect(.mediaBox) | 329 | let rect = page.getBoxRect(.mediaBox) |
329 | let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale)) | 330 | let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale)) |
@@ -252,18 +252,19 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | @@ -252,18 +252,19 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | ||
252 | } | 252 | } |
253 | 253 | ||
254 | public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) { | 254 | public func rasterPdf(data: Data, pages: [Int]?, scale: CGFloat) { |
255 | - let provider = CGDataProvider(data: data as CFData)! | 255 | + guard |
256 | + let provider = CGDataProvider(data: data as CFData), | ||
256 | let document = CGPDFDocument(provider) | 257 | let document = CGPDFDocument(provider) |
257 | - if document == nil { | 258 | + else { |
258 | printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file") | 259 | printing.onPageRasterEnd(printJob: self, error: "Cannot raster a malformed PDF file") |
259 | return | 260 | return |
260 | } | 261 | } |
261 | 262 | ||
262 | DispatchQueue.global().async { | 263 | DispatchQueue.global().async { |
263 | - let pageCount = document!.numberOfPages | 264 | + let pageCount = document.numberOfPages |
264 | 265 | ||
265 | for pageNum in pages ?? Array(0 ... pageCount - 1) { | 266 | for pageNum in pages ?? Array(0 ... pageCount - 1) { |
266 | - guard let page = document!.page(at: pageNum + 1) else { continue } | 267 | + guard let page = document.page(at: pageNum + 1) else { continue } |
267 | let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180 | 268 | let angle = CGFloat(page.rotationAngle) * CGFloat.pi / -180 |
268 | let rect = page.getBoxRect(.mediaBox) | 269 | let rect = page.getBoxRect(.mediaBox) |
269 | let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale)) | 270 | let width = Int(abs((cos(angle) * rect.width + sin(angle) * rect.height) * scale)) |
-
Please register or login to post a comment