使用Flutter pdf包生成PDF遇FileSystemException错误求助
解决Flutter PDF生成时的FileSystemException(只读文件系统)错误
错误原因
你直接使用File('example.pdf')尝试在应用根路径写入文件,但Flutter应用在移动端(iOS/Android)没有根目录的写入权限,系统会返回只读文件系统错误(errno=30)。
解决步骤
1. 添加path_provider依赖
在pubspec.yaml的dependencies下添加:
dependencies: flutter: sdk: flutter pdf: ^3.10.1 # 确保你的pdf包版本为最新稳定版 path_provider: ^2.1.1
执行flutter pub get完成依赖安装。
2. 修改代码获取可写目录
使用path_provider获取应用专属的可写文档目录,再在该目录下创建PDF文件:
import 'dart:io'; import 'package:pdf/widgets.dart' as pw; import 'package:path_provider/path_provider.dart'; Future<void> main() async { final pdf = pw.Document(); pdf.addPage( pw.Page( build: (pw.Context context) => pw.Center( child: pw.Text('Hello World!'), ), ), ); // 获取应用专属的可写文档目录 final directory = await getApplicationDocumentsDirectory(); final file = File('${directory.path}/example.pdf'); await file.writeAsBytes(await pdf.save()); print('PDF已保存到: ${file.path}'); }
3. 平台适配补充
- Web端:不能直接使用
dart:io的File类,需改用浏览器下载API:import 'dart:html' as html; // 替换写入文件的代码 final bytes = await pdf.save(); final blob = html.Blob([bytes], 'application/pdf'); final url = html.Url.createObjectUrlFromBlob(blob); html.AnchorElement(href: url) ..setAttribute('download', 'example.pdf') ..click(); html.Url.revokeObjectUrl(url); - 移动端可通过打印的路径,在设备文件管理器的应用专属目录下找到生成的PDF文件。
内容的提问来源于stack exchange,提问作者harsha voleti
相关产品推荐
相关产品推荐

