output method

  1. @override
void output(
  1. PdfObjectBase<PdfDataType> o,
  2. PdfStream s, [
  3. int? indent
])
override

Implementation

@override
void output(PdfObjectBase o, PdfStream s, [int? indent]) {
  final _values = PdfDict(values);

  Uint8List? _data;

  if (_values.containsKey('/Filter')) {
    // The data is already in the right format
    _data = data;
  } else if (compress && o.settings.deflate != null) {
    // Compress the data
    final newData = Uint8List.fromList(o.settings.deflate!(data));
    if (newData.lengthInBytes < data.lengthInBytes) {
      _values['/Filter'] = const PdfName('/FlateDecode');
      _data = newData;
    }
  }

  if (_data == null) {
    if (isBinary) {
      // This is an Ascii85 stream
      final e = Ascii85Encoder();
      _data = e.convert(data);
      _values['/Filter'] = const PdfName('/ASCII85Decode');
    } else {
      // This is a non-deflated stream
      _data = data;
    }
  }

  if (encrypt && o.settings.encryptCallback != null) {
    _data = o.settings.encryptCallback!(_data, o);
  }

  _values['/Length'] = PdfNum(_data.length);

  _values.output(o, s, indent);
  if (indent != null) {
    s.putByte(0x0a);
  }
  s.putString('stream\n');
  s.putBytes(_data);
  s.putString('\nendstream');
}