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
2020-03-07 20:40:18 -0500
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
c02287c3ec7efc4da9f6a21c9d9bd9d8678da9bf
c02287c3
1 parent
2fd4fd6e
Optimize file size
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
62 additions
and
70 deletions
pdf/CHANGELOG.md
pdf/lib/src/data_types.dart
pdf/lib/src/font.dart
pdf/lib/src/graphics.dart
pdf/lib/src/ttffont.dart
pdf/test/data_types_test.dart
pdf/CHANGELOG.md
View file @
c02287c
...
...
@@ -6,6 +6,7 @@
-
Implement table row vertical alignment
-
Improve Internal data structure
-
Remove deprecated functions
-
Optimize file size
## 1.5.0
...
...
pdf/lib/src/data_types.dart
View file @
c02287c
...
...
@@ -72,17 +72,26 @@ class PdfString extends PdfDataType {
const
PdfString
(
this
.
value
,
[
this
.
format
=
PdfStringFormat
.
litteral
]);
factory
PdfString
.
fromString
(
String
value
)
{
return
PdfString
(
_string
(
value
),
PdfStringFormat
.
litteral
);
}
factory
PdfString
.
fromDate
(
DateTime
date
)
{
return
PdfString
(
_date
(
date
));
}
final
Uint8List
value
;
final
PdfStringFormat
format
;
static
Uint8List
_string
(
String
value
)
{
try
{
return
PdfString
(
latin1
.
encode
(
value
),
PdfStringFormat
.
litteral
);
return
latin1
.
encode
(
value
);
}
catch
(
e
)
{
return
PdfString
(
Uint8List
.
fromList
(<
int
>[
0xfe
,
0xff
]
+
encodeUtf16be
(
value
)),
PdfStringFormat
.
litteral
,
);
return
Uint8List
.
fromList
(<
int
>[
0xfe
,
0xff
]
+
encodeUtf16be
(
value
));
}
}
factory
PdfString
.
fromD
ate
(
DateTime
date
)
{
static
Uint8List
_d
ate
(
DateTime
date
)
{
final
DateTime
utcDate
=
date
.
toUtc
();
final
String
year
=
utcDate
.
year
.
toString
().
padLeft
(
4
,
'0'
);
final
String
month
=
utcDate
.
month
.
toString
().
padLeft
(
2
,
'0'
);
...
...
@@ -90,20 +99,15 @@ class PdfString extends PdfDataType {
final
String
hour
=
utcDate
.
hour
.
toString
().
padLeft
(
2
,
'0'
);
final
String
minute
=
utcDate
.
minute
.
toString
().
padLeft
(
2
,
'0'
);
final
String
second
=
utcDate
.
second
.
toString
().
padLeft
(
2
,
'0'
);
return
PdfString
.
fromS
tring
(
'D:
$year$month$day$hour$minute${second}
Z'
);
return
_s
tring
(
'D:
$year$month$day$hour$minute${second}
Z'
);
}
final
Uint8List
value
;
final
PdfStringFormat
format
;
/// Returns the ASCII/Unicode code unit corresponding to the hexadecimal digit
/// [digit].
int
_codeUnitForDigit
(
int
digit
)
=>
digit
<
10
?
digit
+
0x30
:
digit
+
0x61
-
10
;
@override
void
output
(
PdfStream
s
)
{
void
_output
(
PdfStream
s
,
Uint8List
value
)
{
switch
(
format
)
{
case
PdfStringFormat
.
binary
:
s
.
putByte
(
0x3c
);
...
...
@@ -121,6 +125,11 @@ class PdfString extends PdfDataType {
break
;
}
}
@override
void
output
(
PdfStream
s
)
{
_output
(
s
,
value
);
}
}
class
PdfSecString
extends
PdfString
{
...
...
@@ -129,28 +138,11 @@ class PdfSecString extends PdfString {
:
super
(
value
,
format
);
factory
PdfSecString
.
fromString
(
PdfObject
object
,
String
value
)
{
try
{
return
PdfSecString
(
object
,
latin1
.
encode
(
value
),
PdfStringFormat
.
litteral
);
}
catch
(
e
)
{
return
PdfSecString
(
object
,
Uint8List
.
fromList
(<
int
>[
0xfe
,
0xff
]
+
encodeUtf16be
(
value
)),
PdfStringFormat
.
litteral
,
);
}
return
PdfSecString
(
object
,
PdfString
.
_string
(
value
));
}
factory
PdfSecString
.
fromDate
(
PdfObject
object
,
DateTime
date
)
{
final
DateTime
utcDate
=
date
.
toUtc
();
final
String
year
=
utcDate
.
year
.
toString
().
padLeft
(
4
,
'0'
);
final
String
month
=
utcDate
.
month
.
toString
().
padLeft
(
2
,
'0'
);
final
String
day
=
utcDate
.
day
.
toString
().
padLeft
(
2
,
'0'
);
final
String
hour
=
utcDate
.
hour
.
toString
().
padLeft
(
2
,
'0'
);
final
String
minute
=
utcDate
.
minute
.
toString
().
padLeft
(
2
,
'0'
);
final
String
second
=
utcDate
.
second
.
toString
().
padLeft
(
2
,
'0'
);
return
PdfSecString
.
fromString
(
object
,
'D:
$year$month$day$hour$minute${second}
Z'
);
return
PdfSecString
(
object
,
PdfString
.
_date
(
date
));
}
final
PdfObject
object
;
...
...
@@ -162,22 +154,7 @@ class PdfSecString extends PdfString {
}
final
List
<
int
>
enc
=
object
.
pdfDocument
.
encryption
.
encrypt
(
value
,
object
);
switch
(
format
)
{
case
PdfStringFormat
.
binary
:
s
.
putByte
(
0x3c
);
for
(
int
byte
in
enc
)
{
s
.
putByte
(
_codeUnitForDigit
((
byte
&
0xF0
)
>>
4
));
s
.
putByte
(
_codeUnitForDigit
(
byte
&
0x0F
));
}
s
.
putByte
(
0x3e
);
break
;
case
PdfStringFormat
.
litteral
:
s
.
putByte
(
40
);
s
.
putTextBytes
(
enc
);
s
.
putByte
(
41
);
break
;
}
_output
(
s
,
Uint8List
.
fromList
(
enc
));
}
}
...
...
@@ -231,11 +208,6 @@ class PdfArray extends PdfDataType {
return
PdfArray
(
list
.
map
<
PdfNum
>((
num
e
)
=>
PdfNum
(
e
)).
toList
());
}
// factory PdfArray.fromStrings(List<String> list) {
// return PdfArray(
// list.map<PdfString>((String e) => PdfString.fromString(e)).toList());
// }
final
List
<
PdfDataType
>
values
=
<
PdfDataType
>[];
void
add
(
PdfDataType
v
)
{
...
...
@@ -246,12 +218,17 @@ class PdfArray extends PdfDataType {
void
output
(
PdfStream
s
)
{
s
.
putString
(
'['
);
if
(
values
.
isNotEmpty
)
{
for
(
int
n
=
0
;
n
<
values
.
length
-
1
;
n
++)
{
for
(
int
n
=
0
;
n
<
values
.
length
;
n
++)
{
final
PdfDataType
val
=
values
[
n
];
if
(
n
>
0
&&
!(
val
is
PdfName
||
val
is
PdfString
||
val
is
PdfArray
||
val
is
PdfDict
))
{
s
.
putByte
(
0x20
);
}
val
.
output
(
s
);
s
.
putString
(
' '
);
}
values
.
last
.
output
(
s
);
}
s
.
putString
(
']'
);
}
...
...
@@ -283,13 +260,15 @@ class PdfDict extends PdfDataType {
@override
void
output
(
PdfStream
s
)
{
s
.
put
String
(
'<< '
);
s
.
put
Bytes
(
const
<
int
>[
0x3c
,
0x3c
]
);
values
.
forEach
((
String
k
,
PdfDataType
v
)
{
s
.
putString
(
'
$k
'
);
s
.
putString
(
k
);
if
(
v
is
PdfNum
||
v
is
PdfBool
||
v
is
PdfNull
||
v
is
PdfIndirect
)
{
s
.
putByte
(
0x20
);
}
v
.
output
(
s
);
s
.
putString
(
'
\n
'
);
});
s
.
put
String
(
'>>'
);
s
.
put
Bytes
(
const
<
int
>[
0x3e
,
0x3e
]
);
}
bool
containsKey
(
String
key
)
{
...
...
pdf/lib/src/font.dart
View file @
c02287c
...
...
@@ -163,9 +163,9 @@ See https://github.com/DavBfr/dart_pdf/wiki/Fonts-Management
@override
String
toString
()
=>
'Font(
$fontName
)'
;
PdfStream
putText
(
String
text
)
{
void
putText
(
PdfStream
stream
,
String
text
)
{
try
{
return
PdfStream
()
stream
..
putByte
(
40
)
..
putTextBytes
(
latin1
.
encode
(
text
))
..
putByte
(
41
);
...
...
pdf/lib/src/graphics.dart
View file @
c02287c
...
...
@@ -280,7 +280,7 @@ class PdfGraphics {
buf
.
putString
(
'
${mode.index}
Tr '
);
}
buf
.
putString
(
'['
);
buf
.
putStream
(
font
.
putText
(
s
)
);
font
.
putText
(
buf
,
s
);
buf
.
putString
(
']TJ ET
\n
'
);
}
...
...
pdf/lib/src/ttffont.dart
View file @
c02287c
...
...
@@ -135,13 +135,13 @@ class PdfTtfFont extends PdfFont {
}
@override
PdfStream
putText
(
String
text
)
{
void
putText
(
PdfStream
stream
,
String
text
)
{
if
(!
font
.
unicode
)
{
return
super
.
putText
(
text
);
super
.
putText
(
stream
,
text
);
}
final
Runes
runes
=
text
.
runes
;
final
PdfStream
stream
=
PdfStream
();
stream
.
putByte
(
0x3c
);
for
(
int
rune
in
runes
)
{
int
char
=
unicodeCMap
.
cmap
.
indexOf
(
rune
);
...
...
@@ -153,7 +153,6 @@ class PdfTtfFont extends PdfFont {
stream
.
putBytes
(
latin1
.
encode
(
char
.
toRadixString
(
16
).
padLeft
(
4
,
'0'
)));
}
stream
.
putByte
(
0x3e
);
return
stream
;
}
@override
...
...
pdf/test/data_types_test.dart
View file @
c02287c
...
...
@@ -70,15 +70,28 @@ void main() {
});
test
(
'PdfDataTypes Array'
,
()
{
expect
(
PdfArray
(
<
PdfDataType
>[]
).
toString
(),
'[]'
);
expect
(
PdfArray
().
toString
(),
'[]'
);
expect
(
PdfArray
(<
PdfDataType
>[
const
PdfNum
(
1
),
const
PdfNum
(
2
)]).
toString
(),
'[1 2]'
,
);
expect
(
PdfArray
(<
PdfDataType
>[
const
PdfName
(
'/Name'
),
const
PdfName
(
'/Other'
),
const
PdfBool
(
false
),
const
PdfNum
(
2.5
),
const
PdfNull
(),
PdfString
.
fromString
(
'helło'
),
PdfArray
(),
PdfDict
(),
]).
toString
(),
'[/Name/Other false 2.50000 null(þÿ
\
x00h
\
x00e
\
x00l
\
x01B
\
x00o)[]<<>>]'
,
);
});
test
(
'PdfDataTypes Dict'
,
()
{
expect
(
PdfDict
(
<
String
,
PdfDataType
>{}).
toString
(),
'<<
>>'
);
expect
(
PdfDict
(
).
toString
(),
'<<
>>'
);
expect
(
PdfDict
(<
String
,
PdfDataType
>{
...
...
@@ -91,7 +104,7 @@ void main() {
'/Array'
:
PdfArray
(<
PdfDataType
>[]),
'/Dict'
:
PdfDict
(<
String
,
PdfDataType
>{}),
}).
toString
(),
'<<
/Name /Value
\n
/Bool true
\n
/Num 42
\n
/String (hello)
\n
/Null null
\n
/Indirect 55 0 R
\n
/Array []
\n
/Dict << >>
\n
>>'
,
'<<
/Name/Value/Bool true/Num 42/String(hello)/Null null/Indirect 55 0 R/Array[]/Dict<<>>
>>'
,
);
});
}
...
...
Please
register
or
login
to post a comment