Flutter开发:如何将图片构成的PDF文件转为图片列表?
Flutter PDF转图片列表实现方案
针对PDF转图片列表的需求,这里提供两个成熟的Flutter包实现方案,附带核心代码和后续操作说明:
方案一:使用pdf_render(轻量跨平台)
这是一个专注于PDF页面渲染的轻量包,支持iOS、Android、Web等平台,适合快速实现转图片需求。
步骤:
- 添加依赖到
pubspec.yaml:
dependencies: pdf_render: ^1.10.0
- 核心转换代码:
import 'package:pdf_render/pdf_render.dart'; import 'dart:io'; Future<List<Image>> convertPdfToImages(String pdfFilePath) async { // 打开本地PDF文件 final pdfDoc = await PdfDocument.openFile(pdfFilePath); final List<Image> imageList = []; // 遍历所有页面渲染成图片 for (int pageNum = 1; pageNum <= pdfDoc.pageCount; pageNum++) { final page = await pdfDoc.getPage(pageNum); // 渲染页面为PNG图片,2倍分辨率保证清晰度 final renderedImage = await page.render( width: page.width * 2, height: page.height * 2, format: PdfPageImageFormat.png, ); if (renderedImage != null) { imageList.add(Image.memory(renderedImage.bytes)); } await page.close(); // 释放页面资源 } await pdfDoc.close(); // 释放文档资源 return imageList; }
方案二:使用syncfusion_flutter_pdf(功能丰富)
这个包提供了完整的PDF处理能力,除了页面渲染,还支持PDF编辑、提取文本等功能,适合复杂场景。
步骤:
- 添加依赖到
pubspec.yaml:
dependencies: syncfusion_flutter_pdf: ^25.1.35
- 核心转换代码:
import 'package:syncfusion_flutter_pdf/pdf.dart'; import 'dart:ui' as ui; import 'dart:typed_data'; import 'dart:io'; Future<List<Image>> syncfusionConvertPdfToImages(String pdfFilePath) async { final File pdfFile = File(pdfFilePath); final PdfDocument pdfDoc = PdfDocument(inputBytes: await pdfFile.readAsBytes()); final List<Image> imageList = []; for (int i = 0; i < pdfDoc.pages.count; i++) { final PdfPage page = pdfDoc.pages[i]; // 渲染页面为PNG格式 final Uint8List? imageBytes = await page.render( width: page.size.width * 2, height: page.size.height * 2, format: PdfImageFormat.png, ); if (imageBytes != null) { // 将字节数据转为Image对象 final ui.Codec codec = await ui.instantiateImageCodec(imageBytes); final ui.FrameInfo frame = await codec.getNextFrame(); imageList.add(Image(image: frame.image)); } } pdfDoc.dispose(); // 释放文档资源 return imageList; }
后续操作:排序与删除图片
得到List<Image>后,直接对列表进行常规操作即可:
- 删除指定图片:
imageList.removeAt(targetIndex); - 重新排序:可以使用
imageList.sort()自定义排序逻辑,或者配合reorderables包实现拖拽排序交互
注意事项
- 权限配置:Android需添加
READ_EXTERNAL_STORAGE(API级别<33),iOS需在Info.plist中配置NSPhotoLibraryUsageDescription权限 - 性能优化:处理大页数PDF时,建议分页加载渲染,避免一次性加载所有页面导致内存溢出
- 清晰度调整:通过
width和height参数调整渲染分辨率,数值越大图片越清晰,但内存占用也会增加
内容的提问来源于stack exchange,提问作者Muhammad Haroon
相关产品推荐
相关产品推荐

