createGraphics method

PdfGraphics createGraphics(
  1. PdfPage page
)

Initializes Graphics context of the layer.

Implementation

PdfGraphics createGraphics(PdfPage page) {
  _helper.page = page;
  if (_graphics == null) {
    PdfPageHelper.getHelper(
      page,
    ).contents.add(PdfReferenceHolder(_helper.layer));
  }
  final PdfResources? resource = PdfPageHelper.getHelper(page).getResources();
  if (PdfLayerHelper.getHelper(_helper.layer!).layerId == null ||
      PdfLayerHelper.getHelper(_helper.layer!).layerId!.isEmpty) {
    PdfLayerHelper.getHelper(_helper.layer!).layerId =
        'OCG_${PdfResources.globallyUniqueIdentifier}';
  }
  if (resource != null &&
      resource.containsKey(PdfDictionaryProperties.properties)) {
    final PdfDictionary? propertie =
        resource[PdfDictionaryProperties.properties] as PdfDictionary?;
    if (propertie != null) {
      if (PdfLayerHelper.getHelper(_helper.layer!).layerId![0] == '/') {
        PdfLayerHelper.getHelper(_helper.layer!).layerId =
            PdfLayerHelper.getHelper(_helper.layer!).layerId!.substring(1);
      }
      propertie[PdfLayerHelper.getHelper(_helper.layer!).layerId] =
          PdfLayerHelper.getHelper(_helper.layer!).referenceHolder;
    } else {
      resource.properties[PdfLayerHelper.getHelper(_helper.layer!).layerId] =
          PdfLayerHelper.getHelper(_helper.layer!).referenceHolder;
      resource[PdfDictionaryProperties.properties] = resource.properties;
    }
  } else {
    resource!.properties[PdfLayerHelper.getHelper(_helper.layer!).layerId] =
        PdfLayerHelper.getHelper(_helper.layer!).referenceHolder;
    resource[PdfDictionaryProperties.properties] = resource.properties;
  }

  if (_graphics == null) {
    final Function resources = PdfPageHelper.getHelper(page).getResources;
    bool isPageHasMediaBox = false;
    if (PdfPageHelper.getHelper(
      page,
    ).dictionary!.containsKey(PdfName(PdfDictionaryProperties.mediaBox))) {
      isPageHasMediaBox = true;
    }
    double llx = 0;
    double lly = 0;
    double urx = 0;
    double ury = 0;
    final PdfArray? mediaBox =
        PdfPageHelper.getHelper(page).dictionary!.getValue(
              PdfDictionaryProperties.mediaBox,
              PdfDictionaryProperties.parent,
            )
            as PdfArray?;
    if (mediaBox != null) {
      // Lower Left X co-ordinate Value.
      llx = (mediaBox[0]! as PdfNumber).value!.toDouble();
      // Lower Left Y co-ordinate value.
      lly = (mediaBox[1]! as PdfNumber).value!.toDouble();
      // Upper right X co-ordinate value.
      urx = (mediaBox[2]! as PdfNumber).value!.toDouble();
      // Upper right Y co-ordinate value.
      ury = (mediaBox[3]! as PdfNumber).value!.toDouble();
    }
    PdfArray? cropBox;
    if (PdfPageHelper.getHelper(
      page,
    ).dictionary!.containsKey(PdfDictionaryProperties.cropBox)) {
      cropBox =
          PdfPageHelper.getHelper(page).dictionary!.getValue(
                PdfDictionaryProperties.cropBox,
                PdfDictionaryProperties.parent,
              )
              as PdfArray?;
      final double cropX = (cropBox![0]! as PdfNumber).value!.toDouble();
      final double cropY = (cropBox[1]! as PdfNumber).value!.toDouble();
      final double cropRX = (cropBox[2]! as PdfNumber).value!.toDouble();
      final double cropRY = (cropBox[3]! as PdfNumber).value!.toDouble();
      if ((cropX < 0 || cropY < 0 || cropRX < 0 || cropRY < 0) &&
          (cropY.abs().floor() == page.size.height.abs().floor()) &&
          (cropX.abs().floor()) == page.size.width.abs().floor()) {
        final Size pageSize = Size(
          <double>[cropX, cropRX].reduce(max),
          <double>[cropY, cropRY].reduce(max),
        );
        _graphics = PdfGraphicsHelper.load(
          pageSize,
          resources,
          _helper._content!,
        );
      } else {
        _graphics = PdfGraphicsHelper.load(
          page.size,
          resources,
          _helper._content!,
        );
        PdfGraphicsHelper.getHelper(_graphics!).cropBox = cropBox;
      }
    } else if ((llx < 0 || lly < 0 || urx < 0 || ury < 0) &&
        (lly.abs().floor() == page.size.height.abs().floor()) &&
        (urx.abs().floor() == page.size.width.abs().floor())) {
      final Size pageSize = Size(
        <double>[llx, urx].reduce(max),
        <double>[lly, ury].reduce(max),
      );
      if (pageSize.width <= 0 || pageSize.height <= 0) {
        _graphics = PdfGraphicsHelper.load(
          pageSize,
          resources,
          _helper._content!,
        );
      }
    } else {
      _graphics = PdfGraphicsHelper.load(
        page.size,
        resources,
        _helper._content!,
      );
    }
    if (isPageHasMediaBox) {
      PdfGraphicsHelper.getHelper(_graphics!).mediaBoxUpperRightBound = ury;
    }
    if (!PdfPageHelper.getHelper(page).isLoadedPage) {
      final PdfSectionCollection? sectionCollection =
          PdfSectionHelper.getHelper(
            PdfPageHelper.getHelper(page).section!,
          ).parent;
      if (sectionCollection != null) {
        _graphics!.colorSpace =
            PdfSectionCollectionHelper.getHelper(
              sectionCollection,
            ).document!.colorSpace;
      }
    }
    if (!_graphicsMap.containsKey(_graphics)) {
      _graphicsMap[_graphics!] = _graphics!;
    }
    if (!_pageGraphics.containsKey(page)) {
      _pageGraphics[page] = _graphics!;
    }
    _helper._content!.beginSave = _beginSaveContent;
  } else {
    if (!_helper.pages.contains(page)) {
      _graphicsContent(page);
    } else if (_pageGraphics.containsKey(page)) {
      _graphics = _pageGraphics[page];
      return _graphics!;
    }
  }
  PdfGraphicsHelper.getHelper(
    _graphics!,
  ).streamWriter!.write(PdfOperators.newLine);
  _graphics!.save();
  PdfGraphicsHelper.getHelper(_graphics!).initializeCoordinates();
  if (PdfGraphicsHelper.getHelper(_graphics!).hasTransparencyBrush) {
    PdfGraphicsHelper.getHelper(_graphics!).setTransparencyGroup(page);
  }
  if (PdfPageHelper.getHelper(page).isLoadedPage &&
      (page.rotation != PdfPageRotateAngle.rotateAngle0 ||
          PdfPageHelper.getHelper(
            page,
          ).dictionary!.containsKey(PdfDictionaryProperties.rotate))) {
    PdfArray? cropBox;
    if (PdfPageHelper.getHelper(
      page,
    ).dictionary!.containsKey(PdfDictionaryProperties.cropBox)) {
      cropBox =
          PdfPageHelper.getHelper(page).dictionary!.getValue(
                PdfDictionaryProperties.cropBox,
                PdfDictionaryProperties.parent,
              )
              as PdfArray?;
    }
    _updatePageRotation(page, _graphics, cropBox);
  }
  if (!PdfPageHelper.getHelper(page).isLoadedPage) {
    final PdfRectangle clipRect = PdfSectionHelper.getHelper(
      PdfPageHelper.getHelper(page).section!,
    ).getActualBounds(page, true);
    if (_clipPageTemplates) {
      if (PdfPageHelper.getHelper(page).origin.dx >= 0 &&
          PdfPageHelper.getHelper(page).origin.dy >= 0) {
        PdfGraphicsHelper.getHelper(
          _graphics!,
        ).clipTranslateMarginsWithBounds(clipRect);
      }
    } else {
      final PdfMargins margins =
          PdfPageHelper.getHelper(page).section!.pageSettings.margins;
      PdfGraphicsHelper.getHelper(_graphics!).clipTranslateMargins(
        clipRect.x,
        clipRect.y,
        margins.left,
        margins.top,
        margins.right,
        margins.bottom,
      );
    }
  }
  if (!_helper.pages.contains(page)) {
    _helper.pages.add(page);
  }
  PdfGraphicsHelper.getHelper(_graphics!).setLayer(null, this);
  return _graphics!;
}