Showing
2 changed files
with
31 additions
and
32 deletions
| @@ -441,25 +441,25 @@ class PdfIndirect extends PdfDataType { | @@ -441,25 +441,25 @@ class PdfIndirect extends PdfDataType { | ||
| 441 | int get hashCode => ser.hashCode + gen.hashCode; | 441 | int get hashCode => ser.hashCode + gen.hashCode; |
| 442 | } | 442 | } |
| 443 | 443 | ||
| 444 | -class PdfArray extends PdfDataType { | ||
| 445 | - PdfArray([Iterable<PdfDataType>? values]) { | 444 | +class PdfArray<T extends PdfDataType> extends PdfDataType { |
| 445 | + PdfArray([Iterable<T>? values]) { | ||
| 446 | if (values != null) { | 446 | if (values != null) { |
| 447 | this.values.addAll(values); | 447 | this.values.addAll(values); |
| 448 | } | 448 | } |
| 449 | } | 449 | } |
| 450 | 450 | ||
| 451 | - factory PdfArray.fromObjects(List<PdfObject?> objects) { | 451 | + static PdfArray<PdfIndirect> fromObjects(List<PdfObject?> objects) { |
| 452 | return PdfArray( | 452 | return PdfArray( |
| 453 | objects.map<PdfIndirect>((PdfObject? e) => e!.ref()).toList()); | 453 | objects.map<PdfIndirect>((PdfObject? e) => e!.ref()).toList()); |
| 454 | } | 454 | } |
| 455 | 455 | ||
| 456 | - factory PdfArray.fromNum(List<num?> list) { | 456 | + static PdfArray<PdfNum> fromNum(List<num?> list) { |
| 457 | return PdfArray(list.map<PdfNum>((num? e) => PdfNum(e!)).toList()); | 457 | return PdfArray(list.map<PdfNum>((num? e) => PdfNum(e!)).toList()); |
| 458 | } | 458 | } |
| 459 | 459 | ||
| 460 | - final List<PdfDataType> values = <PdfDataType>[]; | 460 | + final List<T> values = <T>[]; |
| 461 | 461 | ||
| 462 | - void add(PdfDataType v) { | 462 | + void add(T v) { |
| 463 | values.add(v); | 463 | values.add(v); |
| 464 | } | 464 | } |
| 465 | 465 | ||
| @@ -489,7 +489,7 @@ class PdfArray extends PdfDataType { | @@ -489,7 +489,7 @@ class PdfArray extends PdfDataType { | ||
| 489 | } | 489 | } |
| 490 | 490 | ||
| 491 | // ignore: prefer_collection_literals | 491 | // ignore: prefer_collection_literals |
| 492 | - final uniques = LinkedHashMap<PdfDataType, bool>(); | 492 | + final uniques = LinkedHashMap<T, bool>(); |
| 493 | for (final s in values) { | 493 | for (final s in values) { |
| 494 | uniques[s] = true; | 494 | uniques[s] = true; |
| 495 | } | 495 | } |
| @@ -510,14 +510,14 @@ class PdfArray extends PdfDataType { | @@ -510,14 +510,14 @@ class PdfArray extends PdfDataType { | ||
| 510 | int get hashCode => values.hashCode; | 510 | int get hashCode => values.hashCode; |
| 511 | } | 511 | } |
| 512 | 512 | ||
| 513 | -class PdfDict extends PdfDataType { | ||
| 514 | - PdfDict([Map<String, PdfDataType>? values]) { | 513 | +class PdfDict<T extends PdfDataType> extends PdfDataType { |
| 514 | + PdfDict([Map<String, T>? values]) { | ||
| 515 | if (values != null) { | 515 | if (values != null) { |
| 516 | this.values.addAll(values); | 516 | this.values.addAll(values); |
| 517 | } | 517 | } |
| 518 | } | 518 | } |
| 519 | 519 | ||
| 520 | - factory PdfDict.fromObjectMap(Map<String, PdfObject> objects) { | 520 | + static PdfDict<PdfIndirect> fromObjectMap(Map<String, PdfObject> objects) { |
| 521 | return PdfDict( | 521 | return PdfDict( |
| 522 | objects.map<String, PdfIndirect>( | 522 | objects.map<String, PdfIndirect>( |
| 523 | (String key, PdfObject value) => | 523 | (String key, PdfObject value) => |
| @@ -526,22 +526,22 @@ class PdfDict extends PdfDataType { | @@ -526,22 +526,22 @@ class PdfDict extends PdfDataType { | ||
| 526 | ); | 526 | ); |
| 527 | } | 527 | } |
| 528 | 528 | ||
| 529 | - final Map<String, PdfDataType> values = <String, PdfDataType>{}; | 529 | + final Map<String, T> values = <String, T>{}; |
| 530 | 530 | ||
| 531 | bool get isNotEmpty => values.isNotEmpty; | 531 | bool get isNotEmpty => values.isNotEmpty; |
| 532 | 532 | ||
| 533 | - operator []=(String k, PdfDataType v) { | 533 | + operator []=(String k, T v) { |
| 534 | values[k] = v; | 534 | values[k] = v; |
| 535 | } | 535 | } |
| 536 | 536 | ||
| 537 | - PdfDataType? operator [](String k) { | 537 | + T? operator [](String k) { |
| 538 | return values[k]; | 538 | return values[k]; |
| 539 | } | 539 | } |
| 540 | 540 | ||
| 541 | @override | 541 | @override |
| 542 | void output(PdfStream s) { | 542 | void output(PdfStream s) { |
| 543 | s.putBytes(const <int>[0x3c, 0x3c]); | 543 | s.putBytes(const <int>[0x3c, 0x3c]); |
| 544 | - values.forEach((String k, PdfDataType v) { | 544 | + values.forEach((String k, T v) { |
| 545 | s.putString(k); | 545 | s.putString(k); |
| 546 | if (v is PdfNum || v is PdfBool || v is PdfNull || v is PdfIndirect) { | 546 | if (v is PdfNum || v is PdfBool || v is PdfNull || v is PdfIndirect) { |
| 547 | s.putByte(0x20); | 547 | s.putByte(0x20); |
| @@ -555,7 +555,7 @@ class PdfDict extends PdfDataType { | @@ -555,7 +555,7 @@ class PdfDict extends PdfDataType { | ||
| 555 | return values.containsKey(key); | 555 | return values.containsKey(key); |
| 556 | } | 556 | } |
| 557 | 557 | ||
| 558 | - void merge(PdfDict other) { | 558 | + void merge(PdfDict<T> other) { |
| 559 | for (final key in other.values.keys) { | 559 | for (final key in other.values.keys) { |
| 560 | final value = other[key]!; | 560 | final value = other[key]!; |
| 561 | final current = values[key]; | 561 | final current = values[key]; |
| @@ -572,7 +572,7 @@ class PdfDict extends PdfDataType { | @@ -572,7 +572,7 @@ class PdfDict extends PdfDataType { | ||
| 572 | } | 572 | } |
| 573 | } | 573 | } |
| 574 | 574 | ||
| 575 | - void addAll(PdfDict other) { | 575 | + void addAll(PdfDict<T> other) { |
| 576 | values.addAll(other.values); | 576 | values.addAll(other.values); |
| 577 | } | 577 | } |
| 578 | 578 |
| @@ -99,25 +99,24 @@ class PdfPage extends PdfObject with PdfGraphicStream { | @@ -99,25 +99,24 @@ class PdfPage extends PdfObject with PdfGraphicStream { | ||
| 99 | PdfArray.fromNum(<double>[0, 0, pageFormat.width, pageFormat.height]); | 99 | PdfArray.fromNum(<double>[0, 0, pageFormat.width, pageFormat.height]); |
| 100 | 100 | ||
| 101 | // The graphic operations to draw the page | 101 | // The graphic operations to draw the page |
| 102 | - if (contents.isNotEmpty) { | ||
| 103 | - final contentList = PdfArray.fromObjects(contents); | ||
| 104 | - | ||
| 105 | - if (params.containsKey('/Contents')) { | ||
| 106 | - final prevContent = params['/Contents']!; | ||
| 107 | - if (prevContent is PdfArray) { | ||
| 108 | - contentList.values.insertAll(0, prevContent.values); | ||
| 109 | - } else { | ||
| 110 | - contentList.values.insert(0, prevContent); | ||
| 111 | - } | 102 | + final contentList = PdfArray.fromObjects(contents); |
| 103 | + | ||
| 104 | + if (params.containsKey('/Contents')) { | ||
| 105 | + final prevContent = params['/Contents']!; | ||
| 106 | + if (prevContent is PdfArray) { | ||
| 107 | + contentList.values | ||
| 108 | + .insertAll(0, prevContent.values.whereType<PdfIndirect>()); | ||
| 109 | + } else if (prevContent is PdfIndirect) { | ||
| 110 | + contentList.values.insert(0, prevContent); | ||
| 112 | } | 111 | } |
| 112 | + } | ||
| 113 | 113 | ||
| 114 | - contentList.uniq(); | 114 | + contentList.uniq(); |
| 115 | 115 | ||
| 116 | - if (contentList.values.length == 1) { | ||
| 117 | - params['/Contents'] = contentList.values.first; | ||
| 118 | - } else { | ||
| 119 | - params['/Contents'] = contentList; | ||
| 120 | - } | 116 | + if (contentList.values.length == 1) { |
| 117 | + params['/Contents'] = contentList.values.first; | ||
| 118 | + } else if (contents.isNotEmpty) { | ||
| 119 | + params['/Contents'] = contentList; | ||
| 121 | } | 120 | } |
| 122 | 121 | ||
| 123 | // The /Annots object | 122 | // The /Annots object |
-
Please register or login to post a comment