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-18 15:41:48 -0400
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
93374ff4b582b5a64dfa3b7c14c1ff5a8feb248f
93374ff4
1 parent
a8623596
Add more image loading functions
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
81 additions
and
8 deletions
pdf/CHANGELOG.md
pdf/README.md
pdf/lib/pdf.dart
pdf/lib/src/image.dart
pdf/pubspec.yaml
pdf/test/jpeg_test.dart
test/golden/jpeg.pdf
pdf/CHANGELOG.md
View file @
93374ff
...
...
@@ -14,6 +14,7 @@
-
Improve image buffer management
-
Optimize memory footprint
-
Add an exception if a jpeg image is not a supported format
-
Add more image loading functions
## 1.5.0
...
...
pdf/README.md
View file @
93374ff
...
...
@@ -49,15 +49,13 @@ pdf.addPage(pw.Page(
}));
// Page
```
To load an image
it is possible to use the dart library
[
image
](
https://pub.dev/packages/image
)
:
To load an image
from a file
:
```
dart
final
img
=
decodeImage
(
File
(
'test.webp'
).
readAsBytesSync
());
final
image
=
PdfImage
(
final
img
=
decodeImage
();
final
image
=
PdfImage
.
file
(
pdf
.
document
,
image:
img
.
data
.
buffer
.
asUint8List
(),
width:
img
.
width
,
height:
img
.
height
,
bytes:
File
(
'test.webp'
).
readAsBytesSync
(),
);
pdf
.
addPage
(
pw
.
Page
(
...
...
pdf/lib/pdf.dart
View file @
93374ff
...
...
@@ -22,6 +22,7 @@ import 'dart:math' as math;
import
'dart:typed_data'
;
import
'package:crypto/crypto.dart'
;
import
'package:image/image.dart'
as
im
;
import
'package:meta/meta.dart'
;
import
'package:utf/utf.dart'
;
import
'package:vector_math/vector_math_64.dart'
;
...
...
pdf/lib/src/image.dart
View file @
93374ff
...
...
@@ -41,6 +41,8 @@ class PdfImage extends PdfXObject {
bool
alpha
=
true
,
PdfImageOrientation
orientation
=
PdfImageOrientation
.
topLeft
,
})
{
assert
(
image
!=
null
);
final
PdfImage
im
=
PdfImage
.
_
(
pdfDocument
,
width
,
...
...
@@ -107,6 +109,42 @@ class PdfImage extends PdfXObject {
return
im
;
}
factory
PdfImage
.
fromImage
(
PdfDocument
pdfDocument
,
{
@required
im
.
Image
image
,
PdfImageOrientation
orientation
=
PdfImageOrientation
.
topLeft
,
})
{
assert
(
image
!=
null
);
return
PdfImage
(
pdfDocument
,
image:
image
.
getBytes
(
format:
im
.
Format
.
rgba
),
width:
image
.
width
,
height:
image
.
height
,
alpha:
image
.
channels
==
im
.
Channels
.
rgba
,
orientation:
orientation
,
);
}
factory
PdfImage
.
file
(
PdfDocument
pdfDocument
,
{
@required
Uint8List
bytes
,
PdfImageOrientation
orientation
=
PdfImageOrientation
.
topLeft
,
})
{
assert
(
bytes
!=
null
);
if
(
im
.
JpegDecoder
().
isValidFile
(
bytes
))
{
return
PdfImage
.
jpeg
(
pdfDocument
,
image:
bytes
);
}
final
im
.
Image
image
=
im
.
decodeImage
(
bytes
);
return
PdfImage
.
fromImage
(
pdfDocument
,
image:
image
,
orientation:
orientation
,
);
}
factory
PdfImage
.
_alpha
(
PdfDocument
pdfDocument
,
Uint8List
image
,
...
...
pdf/pubspec.yaml
View file @
93374ff
...
...
@@ -17,6 +17,7 @@ dependencies:
archive
:
^2.0.10
qr
:
^1.2.0
barcode
:
^1.5.0
image
:
^2.1.4
dev_dependencies
:
test
:
...
...
pdf/test/jpeg_test.dart
View file @
93374ff
...
...
@@ -84,6 +84,34 @@ void main() {
);
});
test
(
'Pdf Image decode'
,
()
{
final
Iterable
<
Widget
>
imageWidgets
=
imageFiles
.
map
<
Widget
>(
(
String
image
)
=>
SizedBox
(
child:
Image
(
PdfImage
.
file
(
pdf
.
document
,
bytes:
gzip
.
decode
(
base64
.
decode
(
image
)),
),
),
width:
200
,
height:
200
,
),
);
pdf
.
addPage
(
Page
(
build:
(
Context
context
)
=>
Center
(
child:
Wrap
(
spacing:
20
,
runSpacing:
20
,
alignment:
WrapAlignment
.
spaceEvenly
,
children:
imageWidgets
.
toList
(),
),
),
),
);
});
tearDownAll
(()
{
final
File
file
=
File
(
'jpeg.pdf'
);
file
.
writeAsBytesSync
(
pdf
.
save
());
...
...
@@ -110,3 +138,9 @@ const List<String> images = <String>[
'/9j/4AAQSkZJRgABAQEA3ADcAAD/4QAiRXhpZgAASUkqAAgAAAABABIBAwABAAAABwAAAAAAAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAwAFADASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAkI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDVIAAAAAAAJVgAqoAAACVYAKqAAlWAAAAAAAAAAAD/2Q=='
,
'/9j/4AAQSkZJRgABAQEA3ADcAAD/4QAiRXhpZgAASUkqAAgAAAABABIBAwABAAAACAAAAAAAAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAwAFADASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAkI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDKgAAAAAAAAAKqAAAAlWACqgAJVgAqoAAAAAAACVYAP//Z'
,
];
const
List
<
String
>
imageFiles
=
<
String
>[
'H4sIAKx0cl4AA/t/4/8DBgEvN083BkZGRgYPIGT4f5vBmeE/pQBoCCPFhhxgEORgUGQwYmZUYmASZGQWZPx/hEEM7FQUwMgEFBcVQBdmEAQJY6hmAJkiIoguyvD/FgMPMyPQImZBBnuGVU0LGLS1GpoaVqiyCi1lm8gY4iDK4MAYwMDA/v8mAIKohPQ4AQAA'
,
'H4sIAAV2cl4AA+sM8HPn5ZLiYmBg4PX0cAkC0kZArMjBBCRF5PMvAylTTxfHkIjDb88ZMjIYcDAoxP5XM9vcsvrBS0bOEy+7quPmLFmKDrZ+Yjx0ienafeXk7UADGDxd/VzWOSU0AQCMWbgebgAAAA=='
,
'H4sIAFZ2cl4AA3P3dLMwTzRiUGRoYGDIXCUJRDoMQAASYWBSb+lfefot/+I5W251b7635zd/2yOPac86l706te0d9/FPPte/9T7/de41K4M1ANAWLyFIAAAA'
];
...
...
test/golden/jpeg.pdf
View file @
93374ff
No preview for this file type
Please
register
or
login
to post a comment