David PHAM-VAN

Improve Signature conformity

... ... @@ -77,21 +77,17 @@ class PdfDocument {
prev = null,
_objser = 1 {
// create the catalog
catalog = PdfCatalog(this, PdfPageList(this), pageMode);
catalog = PdfCatalog(this, PdfPageList(this), pageMode: pageMode);
}
PdfDocument.load(
this.prev, {
PdfPageMode pageMode = PdfPageMode.none,
DeflateCallback? deflate,
bool compress = true,
this.verbose = false,
}) : deflate = compress ? (deflate ?? defaultDeflate) : null,
_objser = prev!.size,
version = prev.version {
// Now create some standard objects
catalog = PdfCatalog(this, PdfPageList(this), pageMode);
// Import the existing document
prev!.mergeDocument(this);
}
... ...
... ... @@ -125,8 +125,7 @@ class PdfGraphics {
/// Default font if none selected
PdfFont? get defaultFont => _page.getDefaultFont();
bool _altered = false;
bool get altered => _altered;
bool get altered => _page.altered;
/// Draw a surface on the previously defined shape
/// set evenOdd to false to use the nonzero winding number rule to determine the region to fill and to true to use the even-odd rule to determine the region to fill
... ... @@ -141,7 +140,7 @@ class PdfGraphics {
}());
_buf.putString('f${evenOdd ? '*' : ''} ');
_altered = true;
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
... ... @@ -164,7 +163,7 @@ class PdfGraphics {
}());
_buf.putString('${close ? 's' : 'S'} ');
_altered = true;
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
... ... @@ -185,7 +184,7 @@ class PdfGraphics {
}());
_buf.putString('h ');
_altered = true;
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
... ... @@ -232,7 +231,7 @@ class PdfGraphics {
}());
_buf.putString('${close ? 'b' : 'B'}${evenOdd ? '*' : ''} ');
_altered = true;
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
... ... @@ -257,7 +256,7 @@ class PdfGraphics {
// The shader needs to be registered in the page resources
_page.addShader(shader);
_buf.putString('${shader.name} sh ');
_altered = true;
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
... ... @@ -364,7 +363,7 @@ class PdfGraphics {
}
_buf.putString(' cm ${img.name} Do Q ');
_altered = true;
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
... ... @@ -581,7 +580,7 @@ class PdfGraphics {
return true;
}());
_altered = true;
_page.altered = true;
}
void reset() {
... ...
... ... @@ -32,9 +32,11 @@ class PdfCatalog extends PdfObjectDict {
/// This constructs a Pdf Catalog object
PdfCatalog(
PdfDocument pdfDocument,
this.pdfPageList,
this.pdfPageList, {
this.pageMode,
) : super(pdfDocument, type: '/Catalog');
int objgen = 0,
int? objser,
}) : super(pdfDocument, type: '/Catalog', objser: objser, objgen: objgen);
/// The pages of the document
final PdfPageList pdfPageList;
... ... @@ -46,7 +48,7 @@ class PdfCatalog extends PdfObjectDict {
PdfMetadata? metadata;
/// The initial page mode
final PdfPageMode pageMode;
final PdfPageMode? pageMode;
/// The anchor names
PdfNames? names;
... ... @@ -91,7 +93,9 @@ class PdfCatalog extends PdfObjectDict {
}
// the /PageMode setting
params['/PageMode'] = PdfName(_pdfPageModes[pageMode.index]);
if (pageMode != null) {
params['/PageMode'] = PdfName(_pdfPageModes[pageMode!.index]);
}
if (pdfDocument.sign != null) {
if (pdfDocument.sign!.value.hasMDP) {
... ...
... ... @@ -52,6 +52,10 @@ mixin PdfGraphicStream on PdfObjectDict {
/// The xobjects or other images in the pdf
final xObjects = <String, PdfXObject>{};
bool _altered = false;
bool get altered => _altered;
set altered(bool _) => _altered = true;
/// Add a font to this graphic object
void addFont(PdfFont font) {
if (!fonts.containsKey(font.name)) {
... ... @@ -101,12 +105,14 @@ mixin PdfGraphicStream on PdfObjectDict {
// This holds any resources for this page
final resources = PdfDict();
resources['/ProcSet'] = PdfArray(const <PdfName>[
PdfName('/PDF'),
PdfName('/Text'),
PdfName('/ImageB'),
PdfName('/ImageC'),
]);
if (altered) {
resources['/ProcSet'] = PdfArray(const <PdfName>[
PdfName('/PDF'),
PdfName('/Text'),
PdfName('/ImageB'),
PdfName('/ImageC'),
]);
}
// fonts
if (fonts.isNotEmpty) {
... ... @@ -141,15 +147,17 @@ mixin PdfGraphicStream on PdfObjectDict {
resources['/ExtGState'] = pdfDocument.graphicStates.ref();
}
if (params.containsKey('/Resources')) {
final res = params['/Resources'];
if (res is PdfDict) {
res.merge(resources);
return;
if (resources.isNotEmpty) {
if (params.containsKey('/Resources')) {
final res = params['/Resources'];
if (res is PdfDict) {
res.merge(resources);
return;
}
}
}
params['/Resources'] = resources;
params['/Resources'] = resources;
}
}
}
... ...
... ... @@ -23,7 +23,11 @@ import 'page.dart';
/// PdfPageList object
class PdfPageList extends PdfObjectDict {
/// This constructs a [PdfPageList] object.
PdfPageList(PdfDocument pdfDocument) : super(pdfDocument, type: '/Pages');
PdfPageList(
PdfDocument pdfDocument, {
int objgen = 0,
int? objser,
}) : super(pdfDocument, type: '/Pages', objgen: objgen, objser: objser);
/// This holds the pages
final pages = <PdfPage>[];
... ...
... ... @@ -85,8 +85,8 @@ class PdfSignature extends PdfObjectDict {
int output(PdfStream s) {
value.preSign(this, params);
_offsetStart = s.offset + '$objser $objgen obj\n'.length;
final offset = super.output(s);
_offsetStart = offset + '$objser $objgen obj\n'.length;
_offsetEnd = s.offset;
return offset;
}
... ...
... ... @@ -29,5 +29,7 @@ export 'pdf/format/object_base.dart' hide DeflateCallback, PdfVersion;
export 'pdf/format/stream.dart';
export 'pdf/format/string.dart';
export 'pdf/format/xref.dart';
export 'pdf/obj/catalog.dart';
export 'pdf/obj/object.dart';
export 'pdf/obj/object_stream.dart';
export 'pdf/obj/page_list.dart';
... ...
... ... @@ -67,7 +67,7 @@ class Document {
Document.load(
PdfDocumentParserBase parser, {
PdfPageMode pageMode = PdfPageMode.none,
@Deprecated('Not used') PdfPageMode pageMode = PdfPageMode.none,
DeflateCallback? deflate,
bool compress = true,
bool verbose = false,
... ... @@ -80,7 +80,6 @@ class Document {
String? producer,
}) : document = PdfDocument.load(
parser,
pageMode: pageMode,
deflate: deflate,
compress: compress,
verbose: verbose,
... ...