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-06-30 08:13:35 -0400
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
041f8d6d68c4aa88d3497292375003fe52f6ac78
041f8d6d
1 parent
8c24892d
Add document signature support
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
83 additions
and
0 deletions
pdf/CHANGELOG.md
pdf/lib/pdf.dart
pdf/lib/src/catalog.dart
pdf/lib/src/document.dart
pdf/lib/src/output.dart
pdf/lib/src/signature.dart
pdf/CHANGELOG.md
View file @
041f8d6
...
...
@@ -3,6 +3,7 @@
*
Add Document ID
*
Add encryption support
*
Increase PDF version to 1.7
*
Add document signature support
## 1.3.13
...
...
pdf/lib/pdf.dart
View file @
041f8d6
...
...
@@ -54,6 +54,7 @@ part 'src/page.dart';
part
'src/point.dart'
;
part
'src/polygon.dart'
;
part
'src/rect.dart'
;
part
'src/signature.dart'
;
part
'src/stream.dart'
;
part
'src/ttf_parser.dart'
;
part
'src/ttf_writer.dart'
;
...
...
pdf/lib/src/catalog.dart
View file @
041f8d6
...
...
@@ -59,5 +59,10 @@ class PdfCatalog extends PdfObject {
// the /PageMode setting
params
[
'/PageMode'
]
=
PdfStream
.
string
(
PdfDocument
.
_PdfPageModes
[
pageMode
.
index
]);
if
(
pdfDocument
.
sign
!=
null
)
{
params
[
'/Perms'
]
=
PdfStream
.
dictionary
(
<
String
,
PdfStream
>{
'/DocMDP'
:
pdfDocument
.
sign
.
ref
()});
}
}
}
...
...
pdf/lib/src/document.dart
View file @
041f8d6
...
...
@@ -89,6 +89,9 @@ class PdfDocument {
/// Object used to encrypt the document
PdfEncryption
encryption
;
/// Object used to sign the document
PdfSignature
sign
;
/// The PDF specification version
final
String
version
=
'1.7'
;
...
...
pdf/lib/src/output.dart
View file @
041f8d6
...
...
@@ -40,6 +40,9 @@ class PdfOutput {
/// This is used to track the /Encrypt object (encryption)
PdfEncryption
encryptID
;
/// This is used to track the /Sign object (signature)
PdfSignature
signatureID
;
/// This method writes a [PdfObject] to the stream.
///
/// @param ob [PdfObject] Object to write
...
...
@@ -55,6 +58,10 @@ class PdfOutput {
if
(
ob
is
PdfEncryption
)
{
encryptID
=
ob
;
}
if
(
ob
is
PdfSignature
)
{
assert
(
signatureID
==
null
,
'Only one document signature is allowed'
);
signatureID
=
ob
;
}
offsets
.
add
(
PdfXref
(
ob
.
objser
,
os
.
offset
));
ob
.
_write
(
os
);
...
...
@@ -131,6 +138,10 @@ class PdfOutput {
// end the trailer object
os
.
putDictionary
(
params
);
os
.
putString
(
'
\n
startxref
\n
$xref
\n
%%EOF
\n
'
);
if
(
signatureID
!=
null
)
{
signatureID
.
_writeSignature
(
os
);
}
}
/// Writes a block of references to the Pdf file
...
...
pdf/lib/src/signature.dart
0 → 100644
View file @
041f8d6
/*
* 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
pdf
;
@immutable
class
PdfSignatureRange
{
const
PdfSignatureRange
(
this
.
start
,
this
.
end
);
final
int
start
;
final
int
end
;
}
abstract
class
PdfSignature
extends
PdfObject
{
PdfSignature
(
PdfDocument
pdfDocument
)
:
super
(
pdfDocument
,
'/Sig'
);
int
_offsetStart
;
int
_offsetEnd
;
void
preSign
();
void
sign
(
PdfStream
os
,
List
<
PdfSignatureRange
>
ranges
);
@override
void
_write
(
PdfStream
os
)
{
preSign
();
_offsetStart
=
os
.
offset
;
super
.
_write
(
os
);
_offsetEnd
=
os
.
offset
;
}
void
_writeSignature
(
PdfStream
os
)
{
assert
(
_offsetStart
!=
null
&&
_offsetEnd
!=
null
,
'Must reserve the object space before signing the document'
);
final
List
<
PdfSignatureRange
>
ranges
=
<
PdfSignatureRange
>[
PdfSignatureRange
(
0
,
_offsetStart
),
PdfSignatureRange
(
_offsetEnd
,
os
.
offset
),
];
sign
(
os
,
ranges
);
final
PdfStream
signature
=
PdfStream
();
super
.
_write
(
signature
);
assert
(
signature
.
offset
==
_offsetEnd
-
_offsetStart
);
os
.
output
().
replaceRange
(
_offsetStart
,
_offsetEnd
,
signature
.
output
());
}
}
...
...
Please
register
or
login
to post a comment