Showing
8 changed files
with
34 additions
and
22 deletions
@@ -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, |
-
Please register or login to post a comment