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