有两种方案可以在元服务中打开PDF文件:AtomicServiceEnhancedWeb组件和文件预览。需要注意的是,AtomicServiceEnhancedWeb组件可以在元服务内打开PDF,而文件预览会跳出当前元服务。
import { AtomicServiceEnhancedWeb, AtomicServiceEnhancedWebController } from '@atomicservice/ascfapi'; @Entry @Component struct WebComponent { @State controller: AtomicServiceEnhancedWebController = new AtomicServiceEnhancedWebController(); build() { Column() { // 本地资源,需自行替换 AtomicServiceEnhancedWeb({ src: $rawfile('sample.pdf'), controller: this.controller }); }; } }
import { common } from '@kit.AbilityKit'; import { fileIo as fs, fileUri } from '@kit.CoreFileKit'; import { filePreview } from '@kit.PreviewKit'; import { BusinessError } from '@kit.BasicServicesKit'; function previewLocalPdf(context: common.UIAbilityContext) { try { // 假设我们已经在data目录下放置了一个sample.pdf文件 const filePath = context.filesDir + '/sample.pdf'; // 检查文件是否存在 const isExist = fs.accessSync(filePath); if (!isExist) { console.error('The local file does not exist. Please ensure the file has been placed in the application directory.'); return; } // 构建PreviewInfo let uri = fileUri.getUriFromPath(filePath); let fileInfo: filePreview.PreviewInfo = { title: 'sample.pdf', uri: uri, mimeType: 'application/pdf', }; // 打开文件预览 filePreview.openPreview(context, fileInfo).then(() => { console.info('Succeeded in opening preview'); }).catch((err: BusinessError) => { console.error(`Failed to open preview, err.code = ${err.code}, err.message = ${err.message}`); }); } catch (error) { console.error(`Failed to preview local file: ${JSON.stringify(error)}`); } } @Entry @Component struct PDFPage { build() { Column() { Button('预览PDF').onClick(() => { let context = this.getUIContext().getHostContext() as common.UIAbilityContext; previewLocalPdf(context); }); } .width('100%') .height('100%') .justifyContent(FlexAlign.Center); } }