Flutter:如何从PDF预览页通过自定义函数保存生成的PDF文件
解决pdf包PdfPreview页面无法获取PDF字节流的问题
解决方案1:直接持有预生成的字节流
你在渲染PdfPreview组件时,必须传入必填参数bytes,这个参数本身就是你需要的Uint8List格式的PDF字节数据。你只需要将生成PDF时得到的字节流存为当前页面/逻辑层可访问的变量,后续执行保存、上传、删除逻辑时直接调用该变量即可,不需要从预览组件侧二次读取。
解决方案2:正确配置PdfPreviewAction的回调参数
如果你需要通过预览页的自定义按钮触发操作,只需要正确填写PdfPreviewAction的onPressed回调入参,回调的第二个参数就是当前预览PDF的字节流,示例代码如下:
PdfPreview( // 你初始化PdfPreview时传入的字节流参数 bytes: generatedPdfUint8List, // 自定义操作按钮 actions: [ PdfPreviewAction( icon: Icon(Icons.save_alt), // 必须完整填写三个入参,第二个参数bytes就是目标字节流 onPressed: (context, bytes, pageFormat) async { // 直接使用bytes执行业务逻辑即可 // 1. 保存到本地 await savePdfToLocal(bytes); // 2. 上传到Firebase Storage await uploadPdfToStorage(bytes); // 3. 删除本地临时文件 await clearTempFile(); }, ) ], )
常见踩坑说明
- 不要省略
onPressed的入参,很多开发者误写为onPressed: () {},会导致无法接收到组件返回的字节流 PdfPreview本身仅负责渲染PDF,不具备生成PDF的能力,所有预览用的字节流均来自外部传入,因此优先选择方案1持有原始字节流,稳定性更高
内容的提问来源于stack exchange,提问作者GBerga
相关产品推荐
相关产品推荐

