You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter开发:如何将图片构成的PDF文件转为图片列表?

Flutter PDF转图片列表实现方案

针对PDF转图片列表的需求,这里提供两个成熟的Flutter包实现方案,附带核心代码和后续操作说明:

方案一:使用pdf_render(轻量跨平台)

这是一个专注于PDF页面渲染的轻量包,支持iOS、Android、Web等平台,适合快速实现转图片需求。

步骤:

  1. 添加依赖到pubspec.yaml:
dependencies:
  pdf_render: ^1.10.0
  1. 核心转换代码:
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编辑、提取文本等功能,适合复杂场景。

步骤:

  1. 添加依赖到pubspec.yaml:
dependencies:
  syncfusion_flutter_pdf: ^25.1.35
  1. 核心转换代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:35:42