Ionic应用本地存储PDF后获取绝对路径及预览打开方案求助
Ionic应用PDF文件打开功能解决方案
问题1:获取已保存PDF文件的完整路径
你使用的Capacitor Filesystem API提供了两种直接获取完整路径的方案:
- 方案1:直接读取
writeFile接口返回值的uri字段,你现有代码中result对象已经包含该属性,就是对应文件的绝对路径,无需额外调用接口。 - 方案2:调用
Filesystem.getUri()接口主动查询指定文件的完整路径,示例代码如下:
async getPdfFullPath(filename: string): Promise<string> { const { uri } = await Filesystem.getUri({ path: `/${filename}`, directory: FilesystemDirectory.Data }) return uri }
拿到的uri可以直接传给绝大多数PDF预览工具使用。
问题2:无完整路径时的PDF预览方案
如果你不想依赖本地文件路径,持有PDF字符串/Uint8Array数据时可以用以下两种常用方案实现预览:
方案1:调用系统原生应用打开PDF
依赖Capacitor社区插件@capacitor-community/file-opener,先将PDF数据写入系统缓存目录,再调用打开接口即可,无需自行管理路径,示例代码如下:
import { FileOpener } from '@capacitor-community/file-opener'; async openPdfFromData(pdfData: Uint8Array, filename: string) { // 将Uint8Array转换为base64格式 const base64Data = btoa(String.fromCharCode(...pdfData)); // 写入系统缓存目录 const { uri } = await Filesystem.writeFile({ path: `/${filename}`, data: base64Data, directory: FilesystemDirectory.Cache }) // 调用系统默认PDF应用打开 await FileOpener.open({ path: uri, contentType: 'application/pdf' }) }
如果你的PDF数据是base64字符串,可以直接跳过转换步骤写入缓存。
方案2:应用内Web预览
如果不需要调用外部应用,可以直接在应用内嵌入pdf.js,直接渲染Uint8Array格式的PDF数据,不需要本地存储也不需要路径权限,适合轻量预览场景。
内容的提问来源于stack exchange,提问作者Davide.77
相关产品推荐
相关产品推荐

