David PHAM-VAN

Add Document ID

## 1.3.14
* Add Document ID
## 1.3.13
* Do not modify the TTF font streams
... ...
... ... @@ -21,6 +21,7 @@ import 'dart:convert';
import 'dart:math' as math;
import 'dart:typed_data';
import 'package:crypto/crypto.dart';
import 'package:meta/meta.dart';
import 'package:utf/utf.dart';
import 'package:vector_math/vector_math_64.dart';
... ... @@ -34,21 +35,21 @@ part 'src/color.dart';
part 'src/colors.dart';
part 'src/compatibility.dart';
part 'src/document.dart';
part 'src/font.dart';
part 'src/font_descriptor.dart';
part 'src/font_metrics.dart';
part 'src/font.dart';
part 'src/formxobject.dart';
part 'src/graphics.dart';
part 'src/image.dart';
part 'src/info.dart';
part 'src/names.dart';
part 'src/object.dart';
part 'src/object_stream.dart';
part 'src/object.dart';
part 'src/outline.dart';
part 'src/output.dart';
part 'src/page.dart';
part 'src/page_format.dart';
part 'src/page_list.dart';
part 'src/page.dart';
part 'src/point.dart';
part 'src/polygon.dart';
part 'src/rect.dart';
... ...
... ... @@ -97,6 +97,20 @@ class PdfDocument {
/// This holds the current fonts
final Set<PdfFont> fonts = Set<PdfFont>();
/// Generates the document ID
List<int> _documentID;
List<int> get documentID {
if (_documentID == null) {
final math.Random rnd = math.Random();
_documentID = sha256
.convert(DateTime.now().toIso8601String().codeUnits +
List<int>.generate(32, (_) => rnd.nextInt(256)))
.bytes;
}
return _documentID;
}
/// Creates a new serial number
int _genSerial() => _objser++;
... ...
... ... @@ -106,6 +106,8 @@ class PdfOutput {
// the /Root catalog indirect reference (REQUIRED)
if (rootID != null) {
params['/Root'] = rootID.ref();
final PdfStream id = PdfStream.binary(rootID.pdfDocument.documentID);
params['/ID'] = PdfStream.array(<PdfStream>[id, id]);
} else {
throw Exception('Root object is not present in document');
}
... ...
... ... @@ -122,6 +122,22 @@ class PdfStream {
putString(value ? 'true' : 'false');
}
/// Returns the ASCII/Unicode code unit corresponding to the hexadecimal digit
/// [digit].
int _codeUnitForDigit(int digit) =>
digit < 10 ? digit + 0x30 : digit + 0x61 - 10;
void putBinary(List<int> s) {
_stream.add(0x3c);
for (int byte in s) {
_stream.add(_codeUnitForDigit((byte & 0xF0) >> 4));
_stream.add(_codeUnitForDigit(byte & 0x0F));
}
_stream.add(0x3e);
}
static PdfStream binary(List<int> s) => PdfStream()..putBinary(s);
void putArray(List<PdfStream> values) {
putString('[');
for (PdfStream val in values) {
... ...
... ... @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl
homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf
repository: https://github.com/DavBfr/dart_pdf
issue_tracker: https://github.com/DavBfr/dart_pdf/issues
version: 1.3.13
version: 1.3.14
environment:
sdk: ">=2.1.0 <3.0.0"
... ... @@ -13,6 +13,7 @@ dependencies:
meta: "^1.1.5"
vector_math: "^2.0.0"
utf: "^0.9.0"
crypto: "^2.0.6"
dev_dependencies:
test: any
... ...