iOS端react-native-pdf加载部分base64格式PDF报错load pdf failed如何解决
iOS端react-native-pdf部分PDF加载失败修复方案
- 首先关闭cache参数测试
react-native-pdf的iOS端对data URI格式的source兼容cache:true存在已知缺陷,超长base64字符串在缓存写入时会被截断,直接导致解析失败。修改代码如下:
setSource({uri:`data:application/pdf;base64,${documentBinary}`, cache:false})
- base64转本地临时文件加载(兼容性最高方案)
iOS原生PDFKit对直接传入的base64格式PDF支持度有限,尤其是包含特殊内嵌字体、非标准压缩格式的PDF,都会触发解析失败。可以先把base64内容写入本地临时PDF文件,再传入本地路径加载,示例代码如下:
import RNFS from 'react-native-fs'; import { Platform } from 'react-native'; const loadPdf = async (documentBinary) => { const tempPdfPath = `${RNFS.TemporaryDirectoryPath}/temp_${Date.now()}.pdf`; // 把base64写入本地pdf文件 await RNFS.writeFile(tempPdfPath, documentBinary, 'base64'); setSource({ uri: Platform.OS === 'ios' ? `file://${tempPdfPath}` : tempPdfPath, cache: false }); }
组件调用无需修改,加载完成后可按需删除临时文件释放存储空间。
- 修复异常PDF格式
部分加载失败的PDF本身不符合标准PDF 1.7规范,多是旧版编辑器导出、文件头损坏或者内嵌了iOS不支持的字体导致,用桌面端PDF编辑工具重新导出为标准PDF格式后即可正常加载。 - 升级依赖版本
将react-native-pdf升级到最新正式版,同时确认iOS端原生依赖已正确链接,旧版本对大于20M的base64格式PDF存在内存溢出问题,会直接抛出加载失败错误。
内容的提问来源于stack exchange,提问作者eyal gromzin
相关产品推荐
相关产品推荐

