Showing
5 changed files
with
39 additions
and
13 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,18 +28,28 @@ mixin Printing { | @@ -28,18 +28,28 @@ 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 | - final List<int> bytes = await _onLayout(PdfPageFormat( | ||
32 | - call.arguments['width'], | ||
33 | - call.arguments['height'], | ||
34 | - marginLeft: call.arguments['marginLeft'], | ||
35 | - marginTop: call.arguments['marginTop'], | ||
36 | - marginRight: call.arguments['marginRight'], | ||
37 | - marginBottom: call.arguments['marginBottom'], | ||
38 | - )); | ||
39 | - final Map<String, dynamic> params = <String, dynamic>{ | ||
40 | - 'doc': Uint8List.fromList(bytes), | ||
41 | - }; | ||
42 | - return await _channel.invokeMethod('writePdf', params); | 31 | + try { |
32 | + final List<int> bytes = await _onLayout(PdfPageFormat( | ||
33 | + call.arguments['width'], | ||
34 | + call.arguments['height'], | ||
35 | + marginLeft: call.arguments['marginLeft'], | ||
36 | + marginTop: call.arguments['marginTop'], | ||
37 | + marginRight: call.arguments['marginRight'], | ||
38 | + marginBottom: call.arguments['marginBottom'], | ||
39 | + )); | ||
40 | + if (bytes == null) { | ||
41 | + await _channel.invokeMethod<void>('cancelJob', <String, dynamic>{}); | ||
42 | + break; | ||
43 | + } | ||
44 | + final Map<String, dynamic> params = <String, dynamic>{ | ||
45 | + 'doc': Uint8List.fromList(bytes), | ||
46 | + }; | ||
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