pageImage static method

Future<Uint8List?> pageImage(
  1. UPdfController controller,
  2. int pageIndex, {
  3. double dpi = 150,
  4. bool png = true,
})

Implementation

static Future<Uint8List?> pageImage(UPdfController controller, int pageIndex, {double dpi = 150, bool png = true}) async {
  try {
    final ui.Picture? picture = await controller.renderPage(pageIndex);
    if (picture == null) return null;
    final Size size = controller.pageInfo(pageIndex).rotatedSize;
    final double scale = (dpi <= 0 ? 150 : dpi) / 72;
    final int width = (size.width * scale).round().clamp(1, 10000);
    final int height = (size.height * scale).round().clamp(1, 10000);
    final ui.PictureRecorder recorder = ui.PictureRecorder();
    final Canvas canvas = Canvas(recorder);
    canvas.drawRect(Rect.fromLTWH(0, 0, width.toDouble(), height.toDouble()), Paint()..color = const Color(0xFFFFFFFF));
    canvas.scale(scale);
    canvas.drawPicture(picture);
    final ui.Picture scaled = recorder.endRecording();
    final ui.Image image = await scaled.toImage(width, height);
    scaled.dispose();
    final ByteData? data = await image.toByteData(format: png ? ui.ImageByteFormat.png : ui.ImageByteFormat.rawRgba);
    image.dispose();
    return data?.buffer.asUint8List();
  } on Object {
    return null;
  }
}