# 应用内PDF文件预览失败

#### 问题现象

用户在应用内预览PDF文件时，可能会出现预览失败，显示空白的现象。

#### 背景知识

*   PdfView预览组件：HarmonyOS应用通过集成该组件完成PDF文件的预览功能。
    
    预览PDF文档：通过加载本地路径的PDF文档，实现打开PDF文档的预览功能（为了避免文件目录的权限问题，建议通过沙箱目录加载和保存PDF文档）。
    
    | 接口名 | 描述 |
    | --- | --- |
    | loadDocument() | 加载PDF文档。 |
    | saveDocument() | 保存PDF文档。 |
    
*   Web组件预览PDF文档：Web组件提供了在网页中预览PDF的能力。应用通过Web组件的src参数和loadUrl()接口加载PDF文档。
    
    由于PDF预览页面会根据用户操作使用window.localStorage记录侧边导航栏的展开状态，因此需要开启文档对象模型存储domStorageAccess权限。
    

#### 问题定位

1.  PdfView预览组件提供预览PDF文档能力：搜索loadDocument()，检查传入的文件是否属于本地文件，不支持在线预览。
2.  使用Web组件的PDF文档预览能力：
    *   搜索domStorageAccess，检查是否开启文档对象模型存储接口。
    *   搜索Web组件的src参数和loadUrl()接口，检查传入的URL是否正确。
        
        对于加载应用沙箱内PDF文档，检查是否开启应用中文件系统的访问fileAccess权限。
        
        Web组件的第一个参数变量src不能通过状态变量（例如：@State）动态更改地址，如需更改，请通过loadUrl()重新加载。
        

#### 分析结论

#### 场景一

PdfView预览组件提供预览PDF文档能力，由于不支持在线预览，导致预览失败。

#### 场景二

使用Web组件的PDF文档预览能力：

1.  由于未开启Web组件的文档对象模型存储（domStorageAccess）接口，导致预览失败。
2.  传入Web组件中src参数和loadUrl()接口的URL不正确，导致预览失败。

#### 修改建议

#### 场景一

应用需要预览在线PDF文档时，可以先将PDF文件下载到本地，然后再通过PdfView组件进行预览，具体可参见预览PDF文档。

#### 场景二

1.  将domStorageAccess的值设置为true，开启文档对象模型存储。
2.  正确使用Web组件的src参数和loadUrl()接口加载PDF文件。大致分为预览加载网络PDF文档、预览加载应用沙箱内PDF文档（需要开启应用中文件系统的访问fileAccess权限）和预览加载本地PDF文档。详情请参考使用Web组件的PDF文档预览能力。

#### FAQ

Q：Windows(X86)系统模拟器中使用Web组件加载PDF文档，为什么无法显示？

A：模拟器加载PDF文档只支持在MacOS(ARM)版本上运行，Windows(X86)系统的模拟器不支持加载预览。