Toggle navigation
Toggle navigation
This project
Loading...
Sign in
flutter_package
/
dart_pdf
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
David PHAM-VAN
2019-09-23 22:06:10 -0400
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
b49c44970908c0a5448d732201000d67acb71853
b49c4497
1 parent
78e26056
Temporary fix for iOS 13
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
44 additions
and
10 deletions
printing/CHANGELOG.md
printing/ios/Classes/PageRenderer.swift
printing/ios/Classes/SwiftPrintingPlugin.swift
printing/lib/src/printing.dart
printing/CHANGELOG.md
View file @
b49c449
...
...
@@ -3,6 +3,7 @@
## 2.1.7
-
Add iOS Direct Print
-
Fix iOS 13 bug
## 2.1.6
...
...
printing/ios/Classes/PageRenderer.swift
View file @
b49c449
...
...
@@ -24,12 +24,17 @@ class PdfPrintPageRenderer: UIPrintPageRenderer {
private
var
channel
:
FlutterMethodChannel
?
private
var
pdfDocument
:
CGPDFDocument
?
private
var
lock
:
NSLock
?
private
var
mustLayout
:
Bool
=
true
init
(
_
channel
:
FlutterMethodChannel
?)
{
init
(
_
channel
:
FlutterMethodChannel
?
,
data
:
Data
?
)
{
super
.
init
()
self
.
channel
=
channel
lock
=
NSLock
()
pdfDocument
=
nil
if
data
!=
nil
{
setDocument
(
data
)
mustLayout
=
false
}
lock
=
NSLock
()
}
override
func
drawPage
(
at
pageIndex
:
Int
,
in
_
:
CGRect
)
{
...
...
@@ -72,10 +77,12 @@ class PdfPrintPageRenderer: UIPrintPageRenderer {
"marginBottom"
:
marginBottom
,
]
if
mustLayout
{
lock
?
.
lock
()
channel
?
.
invokeMethod
(
"onLayout"
,
arguments
:
arg
)
lock
?
.
lock
()
lock
?
.
unlock
()
}
let
pages
=
pdfDocument
?
.
numberOfPages
??
0
...
...
printing/ios/Classes/SwiftPrintingPlugin.swift
View file @
b49c449
...
...
@@ -39,7 +39,8 @@ public class SwiftPrintingPlugin: NSObject, FlutterPlugin, UIPrintInteractionCon
let
args
=
call
.
arguments
!
as!
[
String
:
Any
]
if
call
.
method
==
"printPdf"
{
let
name
=
args
[
"name"
]
as?
String
??
""
printPdf
(
name
)
let
object
=
args
[
"doc"
]
as?
FlutterStandardTypedData
printPdf
(
name
,
data
:
object
?
.
data
)
result
(
NSNumber
(
value
:
1
))
}
else
if
call
.
method
==
"directPrintPdf"
{
let
name
=
args
[
"name"
]
as?
String
??
""
...
...
@@ -49,7 +50,7 @@ public class SwiftPrintingPlugin: NSObject, FlutterPlugin, UIPrintInteractionCon
result
(
NSNumber
(
value
:
1
))
}
else
if
call
.
method
==
"writePdf"
{
if
let
object
=
args
[
"doc"
]
as?
FlutterStandardTypedData
{
writePdf
(
object
)
writePdf
(
object
.
data
)
}
result
(
NSNumber
(
value
:
1
))
}
else
if
call
.
method
==
"cancelJob"
{
...
...
@@ -97,6 +98,11 @@ public class SwiftPrintingPlugin: NSObject, FlutterPlugin, UIPrintInteractionCon
width
:
CGFloat
((
args
[
"w"
]
as?
NSNumber
)?
.
floatValue
??
0.0
),
height
:
CGFloat
((
args
[
"h"
]
as?
NSNumber
)?
.
floatValue
??
0.0
)
))
}
else
if
call
.
method
==
"printingInfo"
{
let
data
:
NSDictionary
=
[
"iosVersion"
:
UIDevice
.
current
.
systemVersion
,
]
result
(
data
)
}
else
{
result
(
FlutterMethodNotImplemented
)
}
...
...
@@ -150,7 +156,7 @@ public class SwiftPrintingPlugin: NSObject, FlutterPlugin, UIPrintInteractionCon
controller
.
print
(
to
:
printer
,
completionHandler
:
completionHandler
)
}
func
printPdf
(
_
name
:
String
)
{
func
printPdf
(
_
name
:
String
,
data
:
Data
?
)
{
let
printing
=
UIPrintInteractionController
.
isPrintingAvailable
if
!
printing
{
let
data
:
NSDictionary
=
[
...
...
@@ -168,13 +174,13 @@ public class SwiftPrintingPlugin: NSObject, FlutterPlugin, UIPrintInteractionCon
printInfo
.
jobName
=
name
printInfo
.
outputType
=
.
general
controller
.
printInfo
=
printInfo
renderer
=
PdfPrintPageRenderer
(
channel
)
renderer
=
PdfPrintPageRenderer
(
channel
,
data
:
data
)
controller
.
printPageRenderer
=
renderer
controller
.
present
(
animated
:
true
,
completionHandler
:
completionHandler
)
}
func
writePdf
(
_
data
:
FlutterStandardTypedData
)
{
renderer
?
.
setDocument
(
data
.
data
)
func
writePdf
(
_
data
:
Data
)
{
renderer
?
.
setDocument
(
data
)
}
func
sharePdf
(
_
data
:
FlutterStandardTypedData
,
withSourceRect
rect
:
CGRect
,
andName
name
:
String
?)
{
...
...
printing/lib/src/printing.dart
View file @
b49c449
...
...
@@ -96,15 +96,35 @@ mixin Printing {
static
Future
<
bool
>
layoutPdf
({
@required
LayoutCallback
onLayout
,
String
name
=
'Document'
,
PdfPageFormat
format
=
PdfPageFormat
.
standard
,
})
async
{
_onCompleted
=
Completer
<
bool
>();
_onLayout
=
onLayout
;
_channel
.
setMethodCallHandler
(
_handleMethod
);
final
Map
<
String
,
dynamic
>
params
=
<
String
,
dynamic
>{
'name'
:
name
};
try
{
final
Map
<
dynamic
,
dynamic
>
info
=
await
printingInfo
();
if
(
int
.
parse
(
info
[
'iosVersion'
].
toString
().
split
(
'.'
).
first
)
>=
13
)
{
final
List
<
int
>
bytes
=
await
onLayout
(
format
);
if
(
bytes
==
null
)
{
return
false
;
}
params
[
'doc'
]
=
Uint8List
.
fromList
(
bytes
);
}
}
catch
(
e
)
{
e
.
toString
();
}
await
_channel
.
invokeMethod
<
int
>(
'printPdf'
,
params
);
return
_onCompleted
.
future
;
}
static
Future
<
Map
<
dynamic
,
dynamic
>>
printingInfo
()
async
{
return
await
_channel
.
invokeMethod
<
Map
<
dynamic
,
dynamic
>>(
'printingInfo'
,
<
String
,
dynamic
>{},
);
}
/// Opens the native printer picker interface, and returns the URL of the selected printer.
static
Future
<
Printer
>
pickPrinter
({
Rect
bounds
})
async
{
_channel
.
setMethodCallHandler
(
_handleMethod
);
...
...
@@ -117,7 +137,6 @@ mixin Printing {
};
final
Map
<
dynamic
,
dynamic
>
printer
=
await
_channel
.
invokeMethod
<
Map
<
dynamic
,
dynamic
>>(
'pickPrinter'
,
params
);
print
(
printer
);
if
(
printer
==
null
)
{
return
null
;
}
...
...
@@ -138,10 +157,11 @@ mixin Printing {
@required
Printer
printer
,
@required
LayoutCallback
onLayout
,
String
name
=
'Document'
,
PdfPageFormat
format
=
PdfPageFormat
.
standard
,
})
async
{
_onCompleted
=
Completer
<
bool
>();
_channel
.
setMethodCallHandler
(
_handleMethod
);
final
List
<
int
>
bytes
=
await
onLayout
(
PdfPageFormat
.
standard
);
final
List
<
int
>
bytes
=
await
onLayout
(
format
);
if
(
bytes
==
null
)
{
return
false
;
}
...
...
Please
register
or
login
to post a comment