Showing
5 changed files
with
28 additions
and
2 deletions
@@ -149,7 +149,7 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa | @@ -149,7 +149,7 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa | ||
149 | } | 149 | } |
150 | } catch (Exception e) { | 150 | } catch (Exception e) { |
151 | HashMap<String, Object> args = new HashMap<>(); | 151 | HashMap<String, Object> args = new HashMap<>(); |
152 | - args.put("completed", printJob.isCompleted()); | 152 | + args.put("completed", printJob != null && printJob.isCompleted()); |
153 | args.put("error", e.getMessage()); | 153 | args.put("error", e.getMessage()); |
154 | channel.invokeMethod("onCompleted", args); | 154 | channel.invokeMethod("onCompleted", args); |
155 | } | 155 | } |
@@ -182,6 +182,11 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa | @@ -182,6 +182,11 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa | ||
182 | 182 | ||
183 | result.success(0); | 183 | result.success(0); |
184 | break; | 184 | break; |
185 | + case "cancelJob": | ||
186 | + if (callback != null) callback.onLayoutCancelled(); | ||
187 | + if (printJob != null) printJob.cancel(); | ||
188 | + result.success(0); | ||
189 | + break; | ||
185 | case "sharePdf": | 190 | case "sharePdf": |
186 | sharePdf((byte[]) call.argument("doc"), (String) call.argument("name")); | 191 | sharePdf((byte[]) call.argument("doc"), (String) call.argument("name")); |
187 | result.success(0); | 192 | result.success(0); |
@@ -40,6 +40,11 @@ class PdfPrintPageRenderer: UIPrintPageRenderer { | @@ -40,6 +40,11 @@ class PdfPrintPageRenderer: UIPrintPageRenderer { | ||
40 | ctx?.drawPDFPage(page!) | 40 | ctx?.drawPDFPage(page!) |
41 | } | 41 | } |
42 | 42 | ||
43 | + func cancelJob() { | ||
44 | + pdfDocument = nil | ||
45 | + lock?.unlock() | ||
46 | + } | ||
47 | + | ||
43 | func setDocument(_ data: Data?) { | 48 | func setDocument(_ data: Data?) { |
44 | let bytesPointer = UnsafeMutablePointer<UInt8>.allocate(capacity: data?.count ?? 0) | 49 | let bytesPointer = UnsafeMutablePointer<UInt8>.allocate(capacity: data?.count ?? 0) |
45 | data?.copyBytes(to: bytesPointer, count: data?.count ?? 0) | 50 | data?.copyBytes(to: bytesPointer, count: data?.count ?? 0) |
@@ -45,6 +45,11 @@ public class SwiftPrintingPlugin: NSObject, FlutterPlugin, UIPrintInteractionCon | @@ -45,6 +45,11 @@ public class SwiftPrintingPlugin: NSObject, FlutterPlugin, UIPrintInteractionCon | ||
45 | writePdf(object) | 45 | writePdf(object) |
46 | } | 46 | } |
47 | result(NSNumber(value: 1)) | 47 | result(NSNumber(value: 1)) |
48 | + } else if call.method == "cancelJob" { | ||
49 | + renderer?.cancelJob() | ||
50 | + let controller = UIPrintInteractionController.shared | ||
51 | + controller.dismiss(animated: true) | ||
52 | + result(NSNumber(value: 1)) | ||
48 | } else if call.method == "sharePdf" { | 53 | } else if call.method == "sharePdf" { |
49 | if let object = args["doc"] as? FlutterStandardTypedData { | 54 | if let object = args["doc"] as? FlutterStandardTypedData { |
50 | sharePdf( | 55 | sharePdf( |
@@ -28,6 +28,7 @@ mixin Printing { | @@ -28,6 +28,7 @@ mixin Printing { | ||
28 | static Future<void> _handleMethod(MethodCall call) async { | 28 | static Future<void> _handleMethod(MethodCall call) async { |
29 | switch (call.method) { | 29 | switch (call.method) { |
30 | case 'onLayout': | 30 | case 'onLayout': |
31 | + try { | ||
31 | final List<int> bytes = await _onLayout(PdfPageFormat( | 32 | final List<int> bytes = await _onLayout(PdfPageFormat( |
32 | call.arguments['width'], | 33 | call.arguments['width'], |
33 | call.arguments['height'], | 34 | call.arguments['height'], |
@@ -36,10 +37,19 @@ mixin Printing { | @@ -36,10 +37,19 @@ mixin Printing { | ||
36 | marginRight: call.arguments['marginRight'], | 37 | marginRight: call.arguments['marginRight'], |
37 | marginBottom: call.arguments['marginBottom'], | 38 | marginBottom: call.arguments['marginBottom'], |
38 | )); | 39 | )); |
40 | + if (bytes == null) { | ||
41 | + await _channel.invokeMethod<void>('cancelJob', <String, dynamic>{}); | ||
42 | + break; | ||
43 | + } | ||
39 | final Map<String, dynamic> params = <String, dynamic>{ | 44 | final Map<String, dynamic> params = <String, dynamic>{ |
40 | 'doc': Uint8List.fromList(bytes), | 45 | 'doc': Uint8List.fromList(bytes), |
41 | }; | 46 | }; |
42 | - return await _channel.invokeMethod('writePdf', params); | 47 | + await _channel.invokeMethod<void>('writePdf', params); |
48 | + } catch (e) { | ||
49 | + print('Unable to print: $e'); | ||
50 | + await _channel.invokeMethod<void>('cancelJob', <String, dynamic>{}); | ||
51 | + } | ||
52 | + break; | ||
43 | case 'onCompleted': | 53 | case 'onCompleted': |
44 | final bool completed = call.arguments['completed']; | 54 | final bool completed = call.arguments['completed']; |
45 | final String error = call.arguments['error']; | 55 | final String error = call.arguments['error']; |
-
Please register or login to post a comment