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

使用pdf/widgets.dart插入PDF图片报错:MemoryImage未定义

解决pdf库插入图片时MemoryImage未定义的问题

问题分析

你遇到的The function 'MemoryImage' isn't defined错误,是因为混淆了库的模块归属:MemoryImage属于package:pdf/pdf.dart的核心模块,而非package:pdf/widgets.dart(你用pw别名的模块),直接写pw.MemoryImage会导致找不到定义。

修正后的代码

import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;

class PdfParagraphApi {
  static Future<void> generate() async {
    final pdf = pw.Document();
    
    // 加载assets中的图片并转为Uint8List
    final ByteData imageData = await rootBundle.load('assets/img.png');
    final Uint8List imageBytes = imageData.buffer.asUint8List();
    
    // 向PDF添加包含图片的页面
    pdf.addPage(
      pw.MultiPage(
        build: (context) => <pw.Widget>[
          // 使用pdf库的MemoryImage创建图片提供者,传入pw.Image
          pw.Image(pdf.MemoryImage(imageBytes)),
        ],
      ),
    );

    // 可选:将生成的PDF保存到本地文件
    final outputFile = File('generated_pdf.pdf');
    await outputFile.writeAsBytes(await pdf.save());
  }
}

关键修正点

  • 导入dart:typed_data以确保Uint8List和ByteData能正常使用
  • 用pdf.MemoryImage替代错误的pw.MemoryImage,因为这个类属于pdf核心库
  • 先将assets资源转为Uint8List,再传入pdf.MemoryImage作为图片数据源

内容的提问来源于stack exchange,提问作者user7206608

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:10:34