write static method

void write(
  1. BytesBuilder out,
  2. Object? value, {
  3. UPdfEncryption? encryption,
  4. int objectNumber = 0,
  5. int generation = 0,
  6. int depth = 0,
})

Implementation

static void write(BytesBuilder out, Object? value, {UPdfEncryption? encryption, int objectNumber = 0, int generation = 0, int depth = 0}) {
  if (depth > 48) {
    out.add("null".codeUnits);
    return;
  }
  if (value == null) {
    out.add("null".codeUnits);
    return;
  }
  if (value is bool) {
    out.add((value ? "true" : "false").codeUnits);
    return;
  }
  if (value is num) {
    out.add(number(value).codeUnits);
    return;
  }
  if (value is UPdfName) {
    out.add(name(value.value).codeUnits);
    return;
  }
  if (value is UPdfRef) {
    out.add("${value.number} ${value.generation} R".codeUnits);
    return;
  }
  if (value is UPdfString) {
    final Uint8List bytes = encryption == null ? value.bytes : encryption.encrypt(value.bytes, objectNumber, generation, isString: true);
    out.add(value.hex || encryption != null ? hexString(bytes) : literalString(bytes));
    return;
  }
  if (value is List<Object?>) {
    out.add("[".codeUnits);
    for (final Object? entry in value) {
      out.add(" ".codeUnits);
      write(out, entry, encryption: encryption, objectNumber: objectNumber, generation: generation, depth: depth + 1);
    }
    out.add(" ]".codeUnits);
    return;
  }
  if (value is UPdfStream) {
    final Uint8List data = value.rawBytes ?? Uint8List(0);
    final Uint8List payload = encryption == null ? data : encryption.encrypt(data, objectNumber, generation, isString: false);
    final UPdfDict dict = value.dict.copy();
    dict["Length"] = payload.length;
    write(out, dict, encryption: encryption, objectNumber: objectNumber, generation: generation, depth: depth + 1);
    out.add("\n".codeUnits);
    out.add(_stream);
    out.add("\n".codeUnits);
    out.add(payload);
    out.add("\n".codeUnits);
    out.add(_endstream);
    return;
  }
  if (value is UPdfDict) {
    out.add("<<".codeUnits);
    value.entries.forEach((String key, Object? entry) {
      out.add(" ".codeUnits);
      out.add(name(key).codeUnits);
      out.add(" ".codeUnits);
      write(out, entry, encryption: encryption, objectNumber: objectNumber, generation: generation, depth: depth + 1);
    });
    out.add(" >>".codeUnits);
    return;
  }
  out.add("null".codeUnits);
}