import 'dart:io'; import 'dart:math'; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'package:pdf_image_renderer/pdf_image_renderer.dart'; /// Render PDF to image bits Future renderPdf( { String? path, Uint8List? pdfBytes, }) async { assert(path != null || pdfBytes != null); // Create temporary file if required var isTemp = false; if (path == null) { path = p.join( (await getTemporaryDirectory()).absolute.path, "render-${Random().nextInt(10000).toString()}+.pdf", ); await File(path).writeAsBytes(pdfBytes!); isTemp = true; } try { final pdf = PdfImageRenderer(path: path); await pdf.open(); await pdf.openPage(pageIndex: 0); // get the render size after the page is loaded final size = await pdf.getPageSize(pageIndex: 0); // get the actual image of the page final img = await pdf.renderPage( pageIndex: 0, x: 0, y: 0, width: size.width, // you can pass a custom size here to crop the image height: size.height, // you can pass a custom size here to crop the image scale: 1, // increase the scale for better quality (e.g. for zooming) background: Colors.white, ); // close the page again await pdf.closePage(pageIndex: 0); // close the PDF after rendering the page pdf.close(); return img!; } finally { if (isTemp) { await File(path).delete(); } } }