David PHAM-VAN

Improve Signature conformity

@@ -77,21 +77,17 @@ class PdfDocument { @@ -77,21 +77,17 @@ class PdfDocument {
77 prev = null, 77 prev = null,
78 _objser = 1 { 78 _objser = 1 {
79 // create the catalog 79 // create the catalog
80 - catalog = PdfCatalog(this, PdfPageList(this), pageMode); 80 + catalog = PdfCatalog(this, PdfPageList(this), pageMode: pageMode);
81 } 81 }
82 82
83 PdfDocument.load( 83 PdfDocument.load(
84 this.prev, { 84 this.prev, {
85 - PdfPageMode pageMode = PdfPageMode.none,  
86 DeflateCallback? deflate, 85 DeflateCallback? deflate,
87 bool compress = true, 86 bool compress = true,
88 this.verbose = false, 87 this.verbose = false,
89 }) : deflate = compress ? (deflate ?? defaultDeflate) : null, 88 }) : deflate = compress ? (deflate ?? defaultDeflate) : null,
90 _objser = prev!.size, 89 _objser = prev!.size,
91 version = prev.version { 90 version = prev.version {
92 - // Now create some standard objects  
93 - catalog = PdfCatalog(this, PdfPageList(this), pageMode);  
94 -  
95 // Import the existing document 91 // Import the existing document
96 prev!.mergeDocument(this); 92 prev!.mergeDocument(this);
97 } 93 }
@@ -125,8 +125,7 @@ class PdfGraphics { @@ -125,8 +125,7 @@ class PdfGraphics {
125 /// Default font if none selected 125 /// Default font if none selected
126 PdfFont? get defaultFont => _page.getDefaultFont(); 126 PdfFont? get defaultFont => _page.getDefaultFont();
127 127
128 - bool _altered = false;  
129 - bool get altered => _altered; 128 + bool get altered => _page.altered;
130 129
131 /// Draw a surface on the previously defined shape 130 /// Draw a surface on the previously defined shape
132 /// 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 131 /// 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 { @@ -141,7 +140,7 @@ class PdfGraphics {
141 }()); 140 }());
142 141
143 _buf.putString('f${evenOdd ? '*' : ''} '); 142 _buf.putString('f${evenOdd ? '*' : ''} ');
144 - _altered = true; 143 + _page.altered = true;
145 144
146 assert(() { 145 assert(() {
147 if (_page.pdfDocument.verbose) { 146 if (_page.pdfDocument.verbose) {
@@ -164,7 +163,7 @@ class PdfGraphics { @@ -164,7 +163,7 @@ class PdfGraphics {
164 }()); 163 }());
165 164
166 _buf.putString('${close ? 's' : 'S'} '); 165 _buf.putString('${close ? 's' : 'S'} ');
167 - _altered = true; 166 + _page.altered = true;
168 167
169 assert(() { 168 assert(() {
170 if (_page.pdfDocument.verbose) { 169 if (_page.pdfDocument.verbose) {
@@ -185,7 +184,7 @@ class PdfGraphics { @@ -185,7 +184,7 @@ class PdfGraphics {
185 }()); 184 }());
186 185
187 _buf.putString('h '); 186 _buf.putString('h ');
188 - _altered = true; 187 + _page.altered = true;
189 188
190 assert(() { 189 assert(() {
191 if (_page.pdfDocument.verbose) { 190 if (_page.pdfDocument.verbose) {
@@ -232,7 +231,7 @@ class PdfGraphics { @@ -232,7 +231,7 @@ class PdfGraphics {
232 }()); 231 }());
233 232
234 _buf.putString('${close ? 'b' : 'B'}${evenOdd ? '*' : ''} '); 233 _buf.putString('${close ? 'b' : 'B'}${evenOdd ? '*' : ''} ');
235 - _altered = true; 234 + _page.altered = true;
236 235
237 assert(() { 236 assert(() {
238 if (_page.pdfDocument.verbose) { 237 if (_page.pdfDocument.verbose) {
@@ -257,7 +256,7 @@ class PdfGraphics { @@ -257,7 +256,7 @@ class PdfGraphics {
257 // The shader needs to be registered in the page resources 256 // The shader needs to be registered in the page resources
258 _page.addShader(shader); 257 _page.addShader(shader);
259 _buf.putString('${shader.name} sh '); 258 _buf.putString('${shader.name} sh ');
260 - _altered = true; 259 + _page.altered = true;
261 260
262 assert(() { 261 assert(() {
263 if (_page.pdfDocument.verbose) { 262 if (_page.pdfDocument.verbose) {
@@ -364,7 +363,7 @@ class PdfGraphics { @@ -364,7 +363,7 @@ class PdfGraphics {
364 } 363 }
365 364
366 _buf.putString(' cm ${img.name} Do Q '); 365 _buf.putString(' cm ${img.name} Do Q ');
367 - _altered = true; 366 + _page.altered = true;
368 367
369 assert(() { 368 assert(() {
370 if (_page.pdfDocument.verbose) { 369 if (_page.pdfDocument.verbose) {
@@ -581,7 +580,7 @@ class PdfGraphics { @@ -581,7 +580,7 @@ class PdfGraphics {
581 return true; 580 return true;
582 }()); 581 }());
583 582
584 - _altered = true; 583 + _page.altered = true;
585 } 584 }
586 585
587 void reset() { 586 void reset() {
@@ -32,9 +32,11 @@ class PdfCatalog extends PdfObjectDict { @@ -32,9 +32,11 @@ class PdfCatalog extends PdfObjectDict {
32 /// This constructs a Pdf Catalog object 32 /// This constructs a Pdf Catalog object
33 PdfCatalog( 33 PdfCatalog(
34 PdfDocument pdfDocument, 34 PdfDocument pdfDocument,
35 - this.pdfPageList, 35 + this.pdfPageList, {
36 this.pageMode, 36 this.pageMode,
37 - ) : super(pdfDocument, type: '/Catalog'); 37 + int objgen = 0,
  38 + int? objser,
  39 + }) : super(pdfDocument, type: '/Catalog', objser: objser, objgen: objgen);
38 40
39 /// The pages of the document 41 /// The pages of the document
40 final PdfPageList pdfPageList; 42 final PdfPageList pdfPageList;
@@ -46,7 +48,7 @@ class PdfCatalog extends PdfObjectDict { @@ -46,7 +48,7 @@ class PdfCatalog extends PdfObjectDict {
46 PdfMetadata? metadata; 48 PdfMetadata? metadata;
47 49
48 /// The initial page mode 50 /// The initial page mode
49 - final PdfPageMode pageMode; 51 + final PdfPageMode? pageMode;
50 52
51 /// The anchor names 53 /// The anchor names
52 PdfNames? names; 54 PdfNames? names;
@@ -91,7 +93,9 @@ class PdfCatalog extends PdfObjectDict { @@ -91,7 +93,9 @@ class PdfCatalog extends PdfObjectDict {
91 } 93 }
92 94
93 // the /PageMode setting 95 // the /PageMode setting
94 - params['/PageMode'] = PdfName(_pdfPageModes[pageMode.index]); 96 + if (pageMode != null) {
  97 + params['/PageMode'] = PdfName(_pdfPageModes[pageMode!.index]);
  98 + }
95 99
96 if (pdfDocument.sign != null) { 100 if (pdfDocument.sign != null) {
97 if (pdfDocument.sign!.value.hasMDP) { 101 if (pdfDocument.sign!.value.hasMDP) {
@@ -52,6 +52,10 @@ mixin PdfGraphicStream on PdfObjectDict { @@ -52,6 +52,10 @@ mixin PdfGraphicStream on PdfObjectDict {
52 /// The xobjects or other images in the pdf 52 /// The xobjects or other images in the pdf
53 final xObjects = <String, PdfXObject>{}; 53 final xObjects = <String, PdfXObject>{};
54 54
  55 + bool _altered = false;
  56 + bool get altered => _altered;
  57 + set altered(bool _) => _altered = true;
  58 +
55 /// Add a font to this graphic object 59 /// Add a font to this graphic object
56 void addFont(PdfFont font) { 60 void addFont(PdfFont font) {
57 if (!fonts.containsKey(font.name)) { 61 if (!fonts.containsKey(font.name)) {
@@ -101,12 +105,14 @@ mixin PdfGraphicStream on PdfObjectDict { @@ -101,12 +105,14 @@ mixin PdfGraphicStream on PdfObjectDict {
101 // This holds any resources for this page 105 // This holds any resources for this page
102 final resources = PdfDict(); 106 final resources = PdfDict();
103 107
  108 + if (altered) {
104 resources['/ProcSet'] = PdfArray(const <PdfName>[ 109 resources['/ProcSet'] = PdfArray(const <PdfName>[
105 PdfName('/PDF'), 110 PdfName('/PDF'),
106 PdfName('/Text'), 111 PdfName('/Text'),
107 PdfName('/ImageB'), 112 PdfName('/ImageB'),
108 PdfName('/ImageC'), 113 PdfName('/ImageC'),
109 ]); 114 ]);
  115 + }
110 116
111 // fonts 117 // fonts
112 if (fonts.isNotEmpty) { 118 if (fonts.isNotEmpty) {
@@ -141,6 +147,7 @@ mixin PdfGraphicStream on PdfObjectDict { @@ -141,6 +147,7 @@ mixin PdfGraphicStream on PdfObjectDict {
141 resources['/ExtGState'] = pdfDocument.graphicStates.ref(); 147 resources['/ExtGState'] = pdfDocument.graphicStates.ref();
142 } 148 }
143 149
  150 + if (resources.isNotEmpty) {
144 if (params.containsKey('/Resources')) { 151 if (params.containsKey('/Resources')) {
145 final res = params['/Resources']; 152 final res = params['/Resources'];
146 if (res is PdfDict) { 153 if (res is PdfDict) {
@@ -151,6 +158,7 @@ mixin PdfGraphicStream on PdfObjectDict { @@ -151,6 +158,7 @@ mixin PdfGraphicStream on PdfObjectDict {
151 158
152 params['/Resources'] = resources; 159 params['/Resources'] = resources;
153 } 160 }
  161 + }
154 } 162 }
155 163
156 /// Graphic XObject 164 /// Graphic XObject
@@ -23,7 +23,11 @@ import 'page.dart'; @@ -23,7 +23,11 @@ import 'page.dart';
23 /// PdfPageList object 23 /// PdfPageList object
24 class PdfPageList extends PdfObjectDict { 24 class PdfPageList extends PdfObjectDict {
25 /// This constructs a [PdfPageList] object. 25 /// This constructs a [PdfPageList] object.
26 - PdfPageList(PdfDocument pdfDocument) : super(pdfDocument, type: '/Pages'); 26 + PdfPageList(
  27 + PdfDocument pdfDocument, {
  28 + int objgen = 0,
  29 + int? objser,
  30 + }) : super(pdfDocument, type: '/Pages', objgen: objgen, objser: objser);
27 31
28 /// This holds the pages 32 /// This holds the pages
29 final pages = <PdfPage>[]; 33 final pages = <PdfPage>[];
@@ -85,8 +85,8 @@ class PdfSignature extends PdfObjectDict { @@ -85,8 +85,8 @@ class PdfSignature extends PdfObjectDict {
85 int output(PdfStream s) { 85 int output(PdfStream s) {
86 value.preSign(this, params); 86 value.preSign(this, params);
87 87
88 - _offsetStart = s.offset + '$objser $objgen obj\n'.length;  
89 final offset = super.output(s); 88 final offset = super.output(s);
  89 + _offsetStart = offset + '$objser $objgen obj\n'.length;
90 _offsetEnd = s.offset; 90 _offsetEnd = s.offset;
91 return offset; 91 return offset;
92 } 92 }
@@ -29,5 +29,7 @@ export 'pdf/format/object_base.dart' hide DeflateCallback, PdfVersion; @@ -29,5 +29,7 @@ export 'pdf/format/object_base.dart' hide DeflateCallback, PdfVersion;
29 export 'pdf/format/stream.dart'; 29 export 'pdf/format/stream.dart';
30 export 'pdf/format/string.dart'; 30 export 'pdf/format/string.dart';
31 export 'pdf/format/xref.dart'; 31 export 'pdf/format/xref.dart';
  32 +export 'pdf/obj/catalog.dart';
32 export 'pdf/obj/object.dart'; 33 export 'pdf/obj/object.dart';
33 export 'pdf/obj/object_stream.dart'; 34 export 'pdf/obj/object_stream.dart';
  35 +export 'pdf/obj/page_list.dart';
@@ -67,7 +67,7 @@ class Document { @@ -67,7 +67,7 @@ class Document {
67 67
68 Document.load( 68 Document.load(
69 PdfDocumentParserBase parser, { 69 PdfDocumentParserBase parser, {
70 - PdfPageMode pageMode = PdfPageMode.none, 70 + @Deprecated('Not used') PdfPageMode pageMode = PdfPageMode.none,
71 DeflateCallback? deflate, 71 DeflateCallback? deflate,
72 bool compress = true, 72 bool compress = true,
73 bool verbose = false, 73 bool verbose = false,
@@ -80,7 +80,6 @@ class Document { @@ -80,7 +80,6 @@ class Document {
80 String? producer, 80 String? producer,
81 }) : document = PdfDocument.load( 81 }) : document = PdfDocument.load(
82 parser, 82 parser,
83 - pageMode: pageMode,  
84 deflate: deflate, 83 deflate: deflate,
85 compress: compress, 84 compress: compress,
86 verbose: verbose, 85 verbose: verbose,