prepare method

  1. @override
void prepare()
override

Prepare the object to be written to the stream

Implementation

@override
void prepare() {
  super.prepare();

  // This holds any resources for this page
  final resources = PdfDict();

  if (altered) {
    resources['/ProcSet'] = PdfArray(const <PdfName>[
      PdfName('/PDF'),
      PdfName('/Text'),
      PdfName('/ImageB'),
      PdfName('/ImageC'),
    ]);
  }

  // fonts
  if (fonts.isNotEmpty) {
    resources['/Font'] = PdfDict.fromObjectMap(fonts);
  }

  // shaders
  if (shading.isNotEmpty) {
    resources['/Shading'] = PdfDict.fromObjectMap(shading);
  }

  // patterns
  if (patterns.isNotEmpty) {
    resources['/Pattern'] = PdfDict.fromObjectMap(patterns);
  }

  // Now the XObjects
  if (xObjects.isNotEmpty) {
    resources['/XObject'] = PdfDict.fromObjectMap(xObjects);
  }

  if (pdfDocument.hasGraphicStates) {
    // Declare Transparency Group settings
    params['/Group'] = PdfDict.values({
      '/Type': const PdfName('/Group'),
      '/S': const PdfName('/Transparency'),
      '/CS': const PdfName('/DeviceRGB'),
      '/I': PdfBool(isolatedTransparency),
      '/K': PdfBool(knockoutTransparency),
    });

    resources['/ExtGState'] = pdfDocument.graphicStates.ref();
  }

  if (resources.isNotEmpty) {
    if (params.containsKey('/Resources')) {
      final res = params['/Resources'];
      if (res is PdfDict) {
        res.merge(resources);
        return;
      }
    }

    params['/Resources'] = resources;
  }
}