Showing
8 changed files
with
47 additions
and
35 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 | ||
| 104 | - resources['/ProcSet'] = PdfArray(const <PdfName>[ | ||
| 105 | - PdfName('/PDF'), | ||
| 106 | - PdfName('/Text'), | ||
| 107 | - PdfName('/ImageB'), | ||
| 108 | - PdfName('/ImageC'), | ||
| 109 | - ]); | 108 | + if (altered) { |
| 109 | + resources['/ProcSet'] = PdfArray(const <PdfName>[ | ||
| 110 | + PdfName('/PDF'), | ||
| 111 | + PdfName('/Text'), | ||
| 112 | + PdfName('/ImageB'), | ||
| 113 | + PdfName('/ImageC'), | ||
| 114 | + ]); | ||
| 115 | + } | ||
| 110 | 116 | ||
| 111 | // fonts | 117 | // fonts |
| 112 | if (fonts.isNotEmpty) { | 118 | if (fonts.isNotEmpty) { |
| @@ -141,15 +147,17 @@ mixin PdfGraphicStream on PdfObjectDict { | @@ -141,15 +147,17 @@ mixin PdfGraphicStream on PdfObjectDict { | ||
| 141 | resources['/ExtGState'] = pdfDocument.graphicStates.ref(); | 147 | resources['/ExtGState'] = pdfDocument.graphicStates.ref(); |
| 142 | } | 148 | } |
| 143 | 149 | ||
| 144 | - if (params.containsKey('/Resources')) { | ||
| 145 | - final res = params['/Resources']; | ||
| 146 | - if (res is PdfDict) { | ||
| 147 | - res.merge(resources); | ||
| 148 | - return; | 150 | + if (resources.isNotEmpty) { |
| 151 | + if (params.containsKey('/Resources')) { | ||
| 152 | + final res = params['/Resources']; | ||
| 153 | + if (res is PdfDict) { | ||
| 154 | + res.merge(resources); | ||
| 155 | + return; | ||
| 156 | + } | ||
| 149 | } | 157 | } |
| 150 | - } | ||
| 151 | 158 | ||
| 152 | - params['/Resources'] = resources; | 159 | + params['/Resources'] = resources; |
| 160 | + } | ||
| 153 | } | 161 | } |
| 154 | } | 162 | } |
| 155 | 163 |
| @@ -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