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-07 10:28:37 -0400
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
b617d9201a2e90c08b04fbb77e78e26908ead789
b617d920
1 parent
4e27a8ff
Move Page class to its own file
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
164 additions
and
146 deletions
pdf/lib/widgets.dart
pdf/lib/widgets/document.dart
pdf/lib/widgets/page.dart
pdf/lib/widgets.dart
View file @
b617d92
...
...
@@ -36,6 +36,7 @@ part 'widgets/geometry.dart';
part
'widgets/grid_view.dart'
;
part
'widgets/image.dart'
;
part
'widgets/multi_page.dart'
;
part
'widgets/page.dart'
;
part
'widgets/placeholders.dart'
;
part
'widgets/progress.dart'
;
part
'widgets/stack.dart'
;
...
...
pdf/lib/widgets/document.dart
View file @
b617d92
...
...
@@ -69,149 +69,3 @@ class Document {
return
document
.
save
();
}
}
typedef
BuildCallback
=
Widget
Function
(
Context
context
);
typedef
BuildListCallback
=
List
<
Widget
>
Function
(
Context
context
);
enum
PageOrientation
{
natural
,
landscape
,
portrait
}
class
Page
{
Page
(
{
this
.
pageFormat
=
PdfPageFormat
.
standard
,
BuildCallback
build
,
this
.
theme
,
this
.
orientation
=
PageOrientation
.
natural
,
EdgeInsets
margin
})
:
assert
(
pageFormat
!=
null
),
_margin
=
margin
,
_build
=
build
;
final
PdfPageFormat
pageFormat
;
final
PageOrientation
orientation
;
final
EdgeInsets
_margin
;
final
BuildCallback
_build
;
final
Theme
theme
;
bool
get
mustRotate
=>
(
orientation
==
PageOrientation
.
landscape
&&
pageFormat
.
height
>
pageFormat
.
width
)
||
(
orientation
==
PageOrientation
.
portrait
&&
pageFormat
.
width
>
pageFormat
.
height
);
PdfPage
_pdfPage
;
EdgeInsets
get
margin
{
if
(
_margin
!=
null
)
{
if
(
mustRotate
)
{
return
EdgeInsets
.
fromLTRB
(
_margin
.
bottom
,
_margin
.
left
,
_margin
.
top
,
_margin
.
right
);
}
else
{
return
_margin
;
}
}
if
(
mustRotate
)
{
return
EdgeInsets
.
fromLTRB
(
pageFormat
.
marginBottom
,
pageFormat
.
marginLeft
,
pageFormat
.
marginTop
,
pageFormat
.
marginRight
);
}
else
{
return
EdgeInsets
.
fromLTRB
(
pageFormat
.
marginLeft
,
pageFormat
.
marginTop
,
pageFormat
.
marginRight
,
pageFormat
.
marginBottom
);
}
}
@protected
void
debugPaint
(
Context
context
)
{
final
EdgeInsets
_margin
=
margin
;
context
.
canvas
..
setFillColor
(
PdfColors
.
lightGreen
)
..
moveTo
(
0
,
0
)
..
lineTo
(
pageFormat
.
width
,
0
)
..
lineTo
(
pageFormat
.
width
,
pageFormat
.
height
)
..
lineTo
(
0
,
pageFormat
.
height
)
..
moveTo
(
_margin
.
left
,
_margin
.
bottom
)
..
lineTo
(
_margin
.
left
,
pageFormat
.
height
-
_margin
.
top
)
..
lineTo
(
pageFormat
.
width
-
_margin
.
right
,
pageFormat
.
height
-
_margin
.
top
)
..
lineTo
(
pageFormat
.
width
-
_margin
.
right
,
_margin
.
bottom
)
..
fillPath
();
}
@protected
void
generate
(
Document
document
)
{
_pdfPage
=
PdfPage
(
document
.
document
,
pageFormat:
pageFormat
);
}
@protected
void
postProcess
(
Document
document
)
{
final
PdfGraphics
canvas
=
_pdfPage
.
getGraphics
();
final
EdgeInsets
_margin
=
margin
;
final
BoxConstraints
constraints
=
mustRotate
?
BoxConstraints
(
maxWidth:
pageFormat
.
height
-
_margin
.
vertical
,
maxHeight:
pageFormat
.
width
-
_margin
.
horizontal
)
:
BoxConstraints
(
maxWidth:
pageFormat
.
width
-
_margin
.
horizontal
,
maxHeight:
pageFormat
.
height
-
_margin
.
vertical
);
final
Theme
calculatedTheme
=
theme
??
document
.
theme
??
Theme
.
base
();
final
Context
context
=
Context
(
document:
document
.
document
,
page:
_pdfPage
,
canvas:
canvas
,
).
inheritFrom
(
calculatedTheme
);
if
(
_build
!=
null
)
{
final
Widget
child
=
_build
(
context
);
layout
(
child
,
context
,
constraints
);
paint
(
child
,
context
);
}
}
@protected
void
layout
(
Widget
child
,
Context
context
,
BoxConstraints
constraints
,
{
bool
parentUsesSize
=
false
})
{
if
(
child
!=
null
)
{
final
EdgeInsets
_margin
=
margin
;
child
.
layout
(
context
,
constraints
,
parentUsesSize:
parentUsesSize
);
assert
(
child
.
box
!=
null
);
child
.
box
=
PdfRect
(
_margin
.
left
,
pageFormat
.
height
-
child
.
box
.
height
-
_margin
.
top
,
child
.
box
.
width
,
child
.
box
.
height
);
}
}
@protected
void
paint
(
Widget
child
,
Context
context
)
{
assert
(()
{
if
(
Document
.
debug
)
{
debugPaint
(
context
);
}
return
true
;
}());
if
(
child
==
null
)
{
return
;
}
if
(
mustRotate
)
{
final
EdgeInsets
_margin
=
margin
;
final
Matrix4
mat
=
Matrix4
.
identity
();
mat
..
rotateZ
(-
math
.
pi
/
2
)
..
translate
(-
pageFormat
.
height
-
_margin
.
left
+
_margin
.
top
,
child
.
box
.
height
-
child
.
box
.
width
+
_margin
.
left
-
_margin
.
bottom
);
context
.
canvas
..
saveContext
()
..
setTransform
(
mat
);
child
.
paint
(
context
);
context
.
canvas
.
restoreContext
();
}
else
{
child
.
paint
(
context
);
}
}
}
...
...
pdf/lib/widgets/page.dart
0 → 100644
View file @
b617d92
/*
* Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
part of
widget
;
typedef
BuildCallback
=
Widget
Function
(
Context
context
);
typedef
BuildListCallback
=
List
<
Widget
>
Function
(
Context
context
);
enum
PageOrientation
{
natural
,
landscape
,
portrait
}
class
Page
{
Page
(
{
this
.
pageFormat
=
PdfPageFormat
.
standard
,
BuildCallback
build
,
this
.
theme
,
this
.
orientation
=
PageOrientation
.
natural
,
EdgeInsets
margin
})
:
assert
(
pageFormat
!=
null
),
_margin
=
margin
,
_build
=
build
;
final
PdfPageFormat
pageFormat
;
final
PageOrientation
orientation
;
final
EdgeInsets
_margin
;
final
BuildCallback
_build
;
final
Theme
theme
;
bool
get
mustRotate
=>
(
orientation
==
PageOrientation
.
landscape
&&
pageFormat
.
height
>
pageFormat
.
width
)
||
(
orientation
==
PageOrientation
.
portrait
&&
pageFormat
.
width
>
pageFormat
.
height
);
PdfPage
_pdfPage
;
EdgeInsets
get
margin
{
if
(
_margin
!=
null
)
{
if
(
mustRotate
)
{
return
EdgeInsets
.
fromLTRB
(
_margin
.
bottom
,
_margin
.
left
,
_margin
.
top
,
_margin
.
right
);
}
else
{
return
_margin
;
}
}
if
(
mustRotate
)
{
return
EdgeInsets
.
fromLTRB
(
pageFormat
.
marginBottom
,
pageFormat
.
marginLeft
,
pageFormat
.
marginTop
,
pageFormat
.
marginRight
);
}
else
{
return
EdgeInsets
.
fromLTRB
(
pageFormat
.
marginLeft
,
pageFormat
.
marginTop
,
pageFormat
.
marginRight
,
pageFormat
.
marginBottom
);
}
}
@protected
void
debugPaint
(
Context
context
)
{
final
EdgeInsets
_margin
=
margin
;
context
.
canvas
..
setFillColor
(
PdfColors
.
lightGreen
)
..
moveTo
(
0
,
0
)
..
lineTo
(
pageFormat
.
width
,
0
)
..
lineTo
(
pageFormat
.
width
,
pageFormat
.
height
)
..
lineTo
(
0
,
pageFormat
.
height
)
..
moveTo
(
_margin
.
left
,
_margin
.
bottom
)
..
lineTo
(
_margin
.
left
,
pageFormat
.
height
-
_margin
.
top
)
..
lineTo
(
pageFormat
.
width
-
_margin
.
right
,
pageFormat
.
height
-
_margin
.
top
)
..
lineTo
(
pageFormat
.
width
-
_margin
.
right
,
_margin
.
bottom
)
..
fillPath
();
}
@protected
void
generate
(
Document
document
)
{
_pdfPage
=
PdfPage
(
document
.
document
,
pageFormat:
pageFormat
);
}
@protected
void
postProcess
(
Document
document
)
{
final
PdfGraphics
canvas
=
_pdfPage
.
getGraphics
();
final
EdgeInsets
_margin
=
margin
;
final
BoxConstraints
constraints
=
mustRotate
?
BoxConstraints
(
maxWidth:
pageFormat
.
height
-
_margin
.
vertical
,
maxHeight:
pageFormat
.
width
-
_margin
.
horizontal
)
:
BoxConstraints
(
maxWidth:
pageFormat
.
width
-
_margin
.
horizontal
,
maxHeight:
pageFormat
.
height
-
_margin
.
vertical
);
final
Theme
calculatedTheme
=
theme
??
document
.
theme
??
Theme
.
base
();
final
Context
context
=
Context
(
document:
document
.
document
,
page:
_pdfPage
,
canvas:
canvas
,
).
inheritFrom
(
calculatedTheme
);
if
(
_build
!=
null
)
{
final
Widget
child
=
_build
(
context
);
layout
(
child
,
context
,
constraints
);
paint
(
child
,
context
);
}
}
@protected
void
layout
(
Widget
child
,
Context
context
,
BoxConstraints
constraints
,
{
bool
parentUsesSize
=
false
})
{
if
(
child
!=
null
)
{
final
EdgeInsets
_margin
=
margin
;
child
.
layout
(
context
,
constraints
,
parentUsesSize:
parentUsesSize
);
assert
(
child
.
box
!=
null
);
child
.
box
=
PdfRect
(
_margin
.
left
,
pageFormat
.
height
-
child
.
box
.
height
-
_margin
.
top
,
child
.
box
.
width
,
child
.
box
.
height
);
}
}
@protected
void
paint
(
Widget
child
,
Context
context
)
{
assert
(()
{
if
(
Document
.
debug
)
{
debugPaint
(
context
);
}
return
true
;
}());
if
(
child
==
null
)
{
return
;
}
if
(
mustRotate
)
{
final
EdgeInsets
_margin
=
margin
;
final
Matrix4
mat
=
Matrix4
.
identity
();
mat
..
rotateZ
(-
math
.
pi
/
2
)
..
translate
(-
pageFormat
.
height
-
_margin
.
left
+
_margin
.
top
,
child
.
box
.
height
-
child
.
box
.
width
+
_margin
.
left
-
_margin
.
bottom
);
context
.
canvas
..
saveContext
()
..
setTransform
(
mat
);
child
.
paint
(
context
);
context
.
canvas
.
restoreContext
();
}
else
{
child
.
paint
(
context
);
}
}
}
...
...
Please
register
or
login
to post a comment