Showing
2 changed files
with
20 additions
and
25 deletions
| @@ -31,18 +31,15 @@ import 'stream.dart'; | @@ -31,18 +31,15 @@ import 'stream.dart'; | ||
| 31 | enum PdfCrossRefEntryType { free, inUse, compressed } | 31 | enum PdfCrossRefEntryType { free, inUse, compressed } |
| 32 | 32 | ||
| 33 | /// Cross-reference for a Pdf Object | 33 | /// Cross-reference for a Pdf Object |
| 34 | -class PdfXref { | 34 | +class PdfXref extends PdfIndirect { |
| 35 | /// Creates a cross-reference for a Pdf Object | 35 | /// Creates a cross-reference for a Pdf Object |
| 36 | const PdfXref( | 36 | const PdfXref( |
| 37 | - this.id, | 37 | + int ser, |
| 38 | this.offset, { | 38 | this.offset, { |
| 39 | - this.generation = 0, | 39 | + int gen = 0, |
| 40 | this.object, | 40 | this.object, |
| 41 | this.type = PdfCrossRefEntryType.inUse, | 41 | this.type = PdfCrossRefEntryType.inUse, |
| 42 | - }); | ||
| 43 | - | ||
| 44 | - /// The id of a Pdf Object | ||
| 45 | - final int id; | 42 | + }) : super(ser, gen); |
| 46 | 43 | ||
| 47 | /// The offset within the Pdf file | 44 | /// The offset within the Pdf file |
| 48 | final int offset; | 45 | final int offset; |
| @@ -50,14 +47,11 @@ class PdfXref { | @@ -50,14 +47,11 @@ class PdfXref { | ||
| 50 | /// The object ID containing this compressed object | 47 | /// The object ID containing this compressed object |
| 51 | final int? object; | 48 | final int? object; |
| 52 | 49 | ||
| 53 | - /// The generation of the object, usually 0 | ||
| 54 | - final int generation; | ||
| 55 | - | ||
| 56 | final PdfCrossRefEntryType type; | 50 | final PdfCrossRefEntryType type; |
| 57 | 51 | ||
| 58 | /// The xref in the format of the xref section in the Pdf file | 52 | /// The xref in the format of the xref section in the Pdf file |
| 59 | String _legacyRef() { | 53 | String _legacyRef() { |
| 60 | - return '${offset.toString().padLeft(10, '0')} ${generation.toString().padLeft(5, '0')}${type == PdfCrossRefEntryType.inUse ? ' n ' : ' f '}'; | 54 | + return '${offset.toString().padLeft(10, '0')} ${gen.toString().padLeft(5, '0')}${type == PdfCrossRefEntryType.inUse ? ' n ' : ' f '}'; |
| 61 | } | 55 | } |
| 62 | 56 | ||
| 63 | PdfIndirect? get container => object == null ? null : PdfIndirect(object!, 0); | 57 | PdfIndirect? get container => object == null ? null : PdfIndirect(object!, 0); |
| @@ -75,7 +69,7 @@ class PdfXref { | @@ -75,7 +69,7 @@ class PdfXref { | ||
| 75 | 69 | ||
| 76 | setVal(w[0], type == PdfCrossRefEntryType.inUse ? 1 : 0); | 70 | setVal(w[0], type == PdfCrossRefEntryType.inUse ? 1 : 0); |
| 77 | setVal(w[1], offset); | 71 | setVal(w[1], offset); |
| 78 | - setVal(w[2], generation); | 72 | + setVal(w[2], gen); |
| 79 | 73 | ||
| 80 | return ofs; | 74 | return ofs; |
| 81 | } | 75 | } |
| @@ -90,7 +84,7 @@ class PdfXref { | @@ -90,7 +84,7 @@ class PdfXref { | ||
| 90 | } | 84 | } |
| 91 | 85 | ||
| 92 | @override | 86 | @override |
| 93 | - String toString() => '$id $generation obj ${type.name} $offset'; | 87 | + String toString() => '$ser $gen obj ${type.name} $offset'; |
| 94 | 88 | ||
| 95 | @override | 89 | @override |
| 96 | int get hashCode => offset; | 90 | int get hashCode => offset; |
| @@ -145,7 +139,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | @@ -145,7 +139,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | ||
| 145 | 139 | ||
| 146 | for (final ob in objects) { | 140 | for (final ob in objects) { |
| 147 | final offset = ob.output(s); | 141 | final offset = ob.output(s); |
| 148 | - _offsets.add(PdfXref(ob.objser, offset, generation: ob.objgen)); | 142 | + _offsets.add(PdfXref(ob.objser, offset, gen: ob.objgen)); |
| 149 | } | 143 | } |
| 150 | 144 | ||
| 151 | final int xrefOffset; | 145 | final int xrefOffset; |
| @@ -197,8 +191,8 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | @@ -197,8 +191,8 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | ||
| 197 | 191 | ||
| 198 | int outputLegacy(PdfObjectBase o, PdfStream s) { | 192 | int outputLegacy(PdfObjectBase o, PdfStream s) { |
| 199 | // Now scan through the offsets list. They should be in sequence. | 193 | // Now scan through the offsets list. They should be in sequence. |
| 200 | - _offsets.sort((a, b) => a.id.compareTo(b.id)); | ||
| 201 | - final size = _offsets.last.id + 1; | 194 | + _offsets.sort((a, b) => a.ser.compareTo(b.ser)); |
| 195 | + final size = _offsets.last.ser + 1; | ||
| 202 | 196 | ||
| 203 | assert(() { | 197 | assert(() { |
| 204 | if (o.verbose) { | 198 | if (o.verbose) { |
| @@ -217,7 +211,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | @@ -217,7 +211,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | ||
| 217 | block.add(const PdfXref( | 211 | block.add(const PdfXref( |
| 218 | 0, | 212 | 0, |
| 219 | 0, | 213 | 0, |
| 220 | - generation: 65535, | 214 | + gen: 65535, |
| 221 | type: PdfCrossRefEntryType.free, | 215 | type: PdfCrossRefEntryType.free, |
| 222 | )); | 216 | )); |
| 223 | 217 | ||
| @@ -226,16 +220,16 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | @@ -226,16 +220,16 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | ||
| 226 | 220 | ||
| 227 | for (final x in _offsets) { | 221 | for (final x in _offsets) { |
| 228 | // check to see if block is in range | 222 | // check to see if block is in range |
| 229 | - if (x.id != (lastId + 1)) { | 223 | + if (x.ser != (lastId + 1)) { |
| 230 | // no, so write this block, and reset | 224 | // no, so write this block, and reset |
| 231 | _writeBlock(s, firstId, block); | 225 | _writeBlock(s, firstId, block); |
| 232 | block.clear(); | 226 | block.clear(); |
| 233 | - firstId = x.id; | 227 | + firstId = x.ser; |
| 234 | } | 228 | } |
| 235 | 229 | ||
| 236 | // now add to block | 230 | // now add to block |
| 237 | block.add(x); | 231 | block.add(x); |
| 238 | - lastId = x.id; | 232 | + lastId = x.ser; |
| 239 | } | 233 | } |
| 240 | 234 | ||
| 241 | // now write the last block | 235 | // now write the last block |
| @@ -261,10 +255,10 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | @@ -261,10 +255,10 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | ||
| 261 | final offset = s.offset; | 255 | final offset = s.offset; |
| 262 | 256 | ||
| 263 | // Sort all references | 257 | // Sort all references |
| 264 | - _offsets.sort((a, b) => a.id.compareTo(b.id)); | 258 | + _offsets.sort((a, b) => a.ser.compareTo(b.ser)); |
| 265 | 259 | ||
| 266 | // Write this object too | 260 | // Write this object too |
| 267 | - final id = _offsets.last.id + 1; | 261 | + final id = _offsets.last.ser + 1; |
| 268 | final size = id + 1; | 262 | final size = id + 1; |
| 269 | _offsets.add(PdfXref(id, offset)); | 263 | _offsets.add(PdfXref(id, offset)); |
| 270 | 264 | ||
| @@ -280,13 +274,13 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | @@ -280,13 +274,13 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { | ||
| 280 | 274 | ||
| 281 | for (final x in _offsets) { | 275 | for (final x in _offsets) { |
| 282 | // check to see if block is in range | 276 | // check to see if block is in range |
| 283 | - if (x.id != (lastId + 1)) { | 277 | + if (x.ser != (lastId + 1)) { |
| 284 | // no, so store this block, and reset | 278 | // no, so store this block, and reset |
| 285 | blocks.add(lastId - firstId + 1); | 279 | blocks.add(lastId - firstId + 1); |
| 286 | - firstId = x.id; | 280 | + firstId = x.ser; |
| 287 | blocks.add(firstId); | 281 | blocks.add(firstId); |
| 288 | } | 282 | } |
| 289 | - lastId = x.id; | 283 | + lastId = x.ser; |
| 290 | } | 284 | } |
| 291 | blocks.add(lastId - firstId + 1); | 285 | blocks.add(lastId - firstId + 1); |
| 292 | 286 |
-
Please register or login to post a comment