Flutter中使用printing:^5.5.0插件如何向PDF内添加网络图片
问题根因与修复方案
现有代码存在4类核心错误,按优先级修复即可解决运行时报错:
- 变量类型声明错误:你当前声明
images为MemoryImage类型,但实际赋值为空列表,类型不匹配会直接触发运行时错误 - 图片类型使用错误:
pw.RawImage无法直接接收网络图片字节,printing库加载内存格式图片需使用pw.MemoryImage - 缺少网络请求异常捕获逻辑,请求失败时会直接触发崩溃
- 未配置对应平台的网络权限,可能导致图片请求被系统拦截
修复后完整代码(previewpage.dart)
import 'package:http/http.dart' as http; import 'package:pdf/widgets.dart' as pw; import 'package:printing/printing.dart'; final pdf = pw.Document(); // 修正变量类型声明 List<pw.ImageProvider> images = []; Future _getImage() async { try { for (var i = 0; i < 2; i++) { var response = await http.get(Uri.parse("替换为你的实际图片地址")); // 校验请求成功再处理图片 if (response.statusCode == 200) { // 改用pw.MemoryImage加载图片字节,宽高可在渲染PDF时指定 final image = pw.MemoryImage(response.bodyBytes); images.add(image); } } _writeOnPdf(); } catch (e) { // 可自行添加错误提示逻辑 print("图片加载失败: $e"); } } // 补充PDF写入逻辑示例,可按自身需求调整 void _writeOnPdf() { pdf.addPage( pw.Page( build: (pw.Context context) { return pw.Column( children: images.map((img) => pw.Image(img, width: 50, height: 100)).toList(), ); }, ), ); }
额外配置要求
- 安卓端需在
android/app/src/main/AndroidManifest.xml中添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - iOS端如果请求的是HTTP协议图片,需在
ios/Runner/Info.plist中添加HTTP访问权限:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
内容的提问来源于stack exchange,提问作者Yash Savsani
相关产品推荐
相关产品推荐

