文档管理中心
我的

您当前正在浏览HarmonyOS最新文档,覆盖已发布的所有API版本,可在API参考中筛选您使用的API版本。详细的版本配套关系请参考版本说明。

指南与API参考API参考应用服务Reader Kit(阅读服务)ArkTS APIreaderCore(阅读核心能力)

readerCore(阅读核心能力)

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

本模块为Reader Kit核心能力。提供阅读页面数据基础类、页面状态、内容分页信息、页面排版属性、组件控制器等能力。

起始版本: 5.0.4(16)

导入模块

收起
自动换行
深色代码主题
复制
  1. import { readerCore } from '@kit.ReaderKit';

PageDatabaseBean

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

页面数据基础类。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

展开
名称 类型 只读 可选 说明
nodeType string 否 否 节点类型,固定值为“ReaderCoreIdentity”,表示阅读器节点。
dataId string 否 否 节点标识,根据资源索引、页面偏移量自动生成。

constructor

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

constructor(nodeType: string, nodeDataId: string)

页面数据构造函数。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
nodeType string 是 节点类型,固定值为“ReaderCoreIdentity”,表示阅读器节点。
nodeDataId string 是 节点标识,根据子类PageDataInfo.resourceIndex、PageDataInfo.pageOffset字段自动生成。

PageState

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

页面状态。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

展开
名称 值 说明
PAGE_WAITING 1 初始化成功,正在等待排版引擎通知。
PAGE_LOADING 2 初始化成功,等待排版结果。
PAGE_ON_SHOW 3 排版成功并显示阅读页面。
OPEN_BOOK_FAIL 4 排版失败,未成功加载页面。

PageDataInfo

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

内容分页信息,继承PageDatabaseBean。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

展开
名称 类型 只读 可选 说明
nodeType string 否 否 节点类型,固定值为"ReaderCoreIdentity",表示阅读器节点。
dataId string 否 否 节点标识,根据“resourceIndex”、“pageOffset”字段自动生成。
pageHeaderContent string 否 否 页眉文本。(预留字段,暂不支持。)
pageFooterContent string 否 否 页脚文本。(预留字段,暂不支持。)
startDomPos string 否 否 当前页的起始位置信息。
endDomPos string 否 否 当前页的结束位置信息。
state PageState 否 否 页面状态。
resourceIndex number 否 否 书脊内容节点索引SpineItem.index。
pageOffset number 否 否

页数偏移值,从0开始取值。

例如:一个内容资源文件有50页,这个值的取值范围则为0-49。

constructor

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

constructor(nodeType: string, nodeId: string)

内容分页信息构造函数。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

展开
参数名 类型 必填 说明
nodeType string 是 节点类型,固定值为“ReaderCoreIdentity”。
nodeId string 是 节点标识,根据子类PageDataInfo.resourceIndex、PageDataInfo.pageOffset字段自动生成。

ReaderSetting

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

页面排版属性。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

展开
名称 类型 只读 可选 说明
fontName string 否 否 字体名称。
fontSize number 否 否 字号大小,单位:px。
fontWeight number 否 否 文本的字体粗细,依赖所引用的字体文件是否支持设置文本的粗细。(预留字段,暂不支持。)
fontColor string 否 否

字体颜色。例如'#ffffff'、'rgba(248, 249, 250, 1)'。

字体颜色值的限制如下:

- 对于16进制颜色值,只支持6位颜色值,不支持透明度。

- 对于rgba颜色值,透明度的值只支持1。

fontPath string 否 否

字体文件本地路径。

支持两种存放路径:

- 工程目录resources/rawfile文件夹。适合预置字体场景。

- 应用沙箱目录。适合在线下载字体场景。

lineHeight number 否 否 行高系数。一行文本实际显示高度为fontSize * lineHeight。
nightMode boolean 否 否

是否深色模式,需要开发者在监听到深、浅模式变化时手动设置。

用于仿真翻页时背面主题色的绘制。

- true:深色模式。

- false:浅色模式,默认是false。

themeColor string 否 否

主题背景色。示例:'#ffffff'、'rgba(248, 249, 250, 1)'。

如果有设置背景图片的情况下,通常用于仿真翻页时背面主题色的绘制。

如果没有设置背景图片,还会用于渲染阅读页的背景色。

背景色的值限制如下:

- 对于16进制颜色值,只支持6位颜色值,不支持透明度。

- 对于rgba颜色值,透明度的值只支持1。

themeBgImg string 否 否

主题背景图路径,用于阅读页背景的绘制。

支持两种存放路径:

- 工程目录resources/rawfile文件夹。适合预置背景图场景。

- 应用沙箱目录。适合在线下载背景图场景。

flipMode string 否 否

翻页方式。

- '0':仿真。

- '1':横滑。

默认值为0。

scaledDensity number 否 否

系统显示文本的缩放因子,该值通过display.getDefaultDisplaySync().scaledDensity字段获取。

在智慧多窗等场景,文本缩放因子发生变化时,开发者需要调用ReaderComponentController组件控制器的setPageConfig接口更新该属性。

viewPortWidth number 否 否 排版视口宽度,单位:px。
viewPortHeight number 否 否 排版视口高度,单位:px。

ReaderComponentController

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

ReadPageComponent组件控制器,需要配合ReadPageComponent组件一起使用。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

init

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

init(context: common.UIAbilityContext): Promise<void>

初始化ReaderComponentController,使用Promise异步回调。

说明

在集成ReaderComponentController时,初始化接口一定要优先于controller的其他接口之前执行。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
context common.UIAbilityContext 是 当前应用上下文。

返回值:

展开
类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码:

展开
错误码ID 错误信息
401 Parameter error.
1016910004 Invalid caller.

示例:

收起
自动换行
深色代码主题
复制
  1. import { readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.init();
  11. }
  12. private async init() {
  13. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  14. await this.readerComponentController.init(context);
  15. hilog.info(0x0000, 'ReaderLog', `init succeeded`);
  16. }
  17. build() {
  18. Stack() {
  19. ReadPageComponent({
  20. controller: this.readerComponentController,
  21. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  22. this.readerComponentController = data;
  23. }
  24. })
  25. }.width('100%').height('100%')
  26. }
  27. }

registerBookParser

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

registerBookParser(bookParserHandler: bookParser.BookParserHandler): void

注册书籍解析器。

说明

registerBookParser接口需要在startPlay接口之前调用。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
bookParserHandler bookParser.BookParserHandler 是 书籍解析器。

错误码:

展开
错误码ID 错误信息
401 Parameter error.
1016900002 Read Page Component is not initialized.
1016900003 Invalid request.
1016900999 Other error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { bookParser, readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.registerBookParser();
  11. }
  12. private async registerBookParser() {
  13. // 通过提前导入到应用沙箱目录中的书籍文件,初始化书籍解析器
  14. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  15. let filePath: string = `${context.filesDir}/abc.epub`;
  16. let bookParserHandler: bookParser.BookParserHandler = await bookParser.getDefaultHandler(filePath);
  17. await this.readerComponentController.init(context);
  18. this.readerComponentController.registerBookParser(bookParserHandler);
  19. hilog.info(0x0000, 'ReaderLog', `registerBookParser succeeded`);
  20. }
  21. build() {
  22. Stack() {
  23. ReadPageComponent({
  24. controller: this.readerComponentController,
  25. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  26. this.readerComponentController = data;
  27. }
  28. })
  29. }.width('100%').height('100%')
  30. }
  31. }

setPageConfig

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

setPageConfig(pageConfig: ReaderSetting): void

设置或者修改页面排版属性。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
pageConfig ReaderSetting 是 页面排版属性。

错误码:

展开
错误码ID 错误信息
401 Parameter error.
1016900002 Read Page Component is not initialized.
1016900003 Invalid request.
1016900999 Other error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { common } from '@kit.AbilityKit';
  3. import { hilog } from '@kit.PerformanceAnalysisKit';
  4. import { display } from '@kit.ArkUI';
  5. import { BusinessError } from '@kit.BasicServicesKit';
  6. @Entry
  7. @Component
  8. struct Reader {
  9. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  10. aboutToAppear(): void {
  11. this.setPageConfig();
  12. }
  13. private async setPageConfig() {
  14. let readerSetting: readerCore.ReaderSetting = {
  15. fontName: '系统字体',
  16. fontPath: '',
  17. fontSize: 18,
  18. fontColor: '#000000',
  19. fontWeight: 400,
  20. lineHeight: 1.9,
  21. nightMode: false,
  22. themeColor: 'rgba(248, 249, 250, 1)',
  23. themeBgImg: '',
  24. flipMode: '0',
  25. scaledDensity: display.getDefaultDisplaySync().scaledDensity > 0 ? display.getDefaultDisplaySync().scaledDensity :
  26. 1,
  27. viewPortWidth: 1260, // 视口宽度,需要根据设备实际情况获取,否则会导致阅读界面异常
  28. viewPortHeight: 2720 // 视口高度,需要根据设备实际情况获取,否则会导致阅读界面异常
  29. };
  30. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  31. await this.readerComponentController.init(context);
  32. this.readerComponentController.setPageConfig(readerSetting);
  33. hilog.info(0x0000, 'ReaderLog', `setPageConfig succeeded`);
  34. }
  35. build() {
  36. Stack() {
  37. ReadPageComponent({
  38. controller: this.readerComponentController,
  39. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  40. this.readerComponentController = data;
  41. }
  42. })
  43. }.width('100%').height('100%')
  44. }
  45. }

startPlay

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

startPlay(spineIndex: number, domPos: string): Promise<void>

以指定阅读进度打开书籍,使用Promise异步回调。

说明

startPlay接口需在registerBookParser事件成功触发后,才能调用。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
spineIndex number 是 内容资源索引SpineItem.index。
domPos string 是 用户上次阅读进度。

返回值:

展开
类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码:

展开
错误码ID 错误信息
401 Parameter error.
1016900002 Read Page Component is not initialized.
1016900003 Invalid request.
1016900999 Other error.
1016910001 Invalid spine item.
1016910002 Unexpected spine item resource data.
1016910003 Spine item resource data out of range.

示例:

收起
自动换行
深色代码主题
复制
  1. import { bookParser, readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.startPlay();
  11. }
  12. private async startPlay() {
  13. // 通过提前导入到应用沙箱目录中的书籍文件,初始化书籍解析器
  14. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  15. let filePath: string = `${context.filesDir}/abc.epub`;
  16. let bookParserHandler: bookParser.BookParserHandler = await bookParser.getDefaultHandler(filePath);
  17. let spineList: bookParser.SpineItem[] = bookParserHandler.getSpineList();
  18. let spineIndex: number = spineList[0].index;
  19. let domPos: string = '';
  20. await this.readerComponentController.init(context);
  21. this.readerComponentController.registerBookParser(bookParserHandler);
  22. // 调用startPlay接口初始化书籍内容显示
  23. await this.readerComponentController.startPlay(spineIndex || 0, domPos);
  24. hilog.info(0x0000, 'ReaderLog', `startPlay succeeded`);
  25. }
  26. build() {
  27. Stack() {
  28. ReadPageComponent({
  29. controller: this.readerComponentController,
  30. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  31. this.readerComponentController = data;
  32. }
  33. })
  34. }.width('100%').height('100%')
  35. }
  36. }

flipPage

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

flipPage(isNext: boolean): void

触发ReadPageComponent组件进行翻页。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
isNext boolean 是

是否翻到下一页。

- true:往下一页翻页。

- false:往上一页翻页。

错误码:

展开
错误码ID 错误信息
401 Parameter error.
1016900002 Read Page Component is not initialized.
1016900003 Invalid request.
1016900999 Other error.

示例:

收起
自动换行
深色代码主题
复制
  1. import { readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.flipPage();
  11. }
  12. private async flipPage() {
  13. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  14. await this.readerComponentController.init(context);
  15. // 翻下一页
  16. this.readerComponentController.flipPage(true);
  17. hilog.info(0x0000, 'ReaderLog', `flipPage succeeded`);
  18. }
  19. build() {
  20. Stack() {
  21. ReadPageComponent({
  22. controller: this.readerComponentController,
  23. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  24. this.readerComponentController = data;
  25. }
  26. })
  27. }.width('100%').height('100%')
  28. }
  29. }

releaseBook

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

releaseBook(): void

释放书籍资源,在退出阅读器等释放资源场景时使用。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

示例:

收起
自动换行
深色代码主题
复制
  1. import { readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.releaseBook();
  11. }
  12. private async releaseBook() {
  13. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  14. await this.readerComponentController.init(context);
  15. // 释放加载书籍时的资源
  16. this.readerComponentController.releaseBook();
  17. hilog.info(0x0000, 'ReaderLog', `releaseBook succeeded`);
  18. }
  19. build() {
  20. Stack() {
  21. ReadPageComponent({
  22. controller: this.readerComponentController,
  23. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  24. this.readerComponentController = data;
  25. }
  26. })
  27. }.width('100%').height('100%')
  28. }
  29. }

on('pageShow')

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

on(type: 'pageShow', callback: Callback<PageDataInfo>): void

注册页面展示的通知服务,该通知在页面排版成功展示后触发。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
type string 是 事件回调类型,支持的事件为“pageShow”。
callback Callback<PageDataInfo> 是 回调函数,返回内容分页排版信息。

示例:

收起
自动换行
深色代码主题
复制
  1. import { readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.registerListener();
  11. }
  12. private async registerListener() {
  13. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  14. await this.readerComponentController.init(context)
  15. // 此处只演示方法调用,实际触发回调,需要配合startPlay接口使用
  16. this.readerComponentController.on('pageShow', (data: readerCore.PageDataInfo): void => {
  17. // 开发者可在此保存内容分布排版数据,利用data.resourceIndex及data.startDomPos数据调用startPlay接口继续阅读
  18. hilog.info(0x0000, 'ReaderLog', 'pageshow: data is: ' + JSON.stringify(data));
  19. });
  20. }
  21. build() {
  22. Stack() {
  23. ReadPageComponent({
  24. controller: this.readerComponentController,
  25. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  26. this.readerComponentController = data;
  27. }
  28. })
  29. }.width('100%').height('100%')
  30. }
  31. }

off('pageShow')

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

off(type: 'pageShow', callback?: Callback<PageDataInfo>): void

注销章节内容分页展示结果回调,可在页面销毁时调用。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
type string 是 事件回调类型,支持的事件为“pageShow”。
callback Callback<PageDataInfo> 否 回调函数,需要传on('pageShow')注册时的回调函数,若不传则注销所有的回调函数。

示例:

收起
自动换行
深色代码主题
复制
  1. import { readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.unregisterListener();
  11. }
  12. private async unregisterListener() {
  13. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  14. let readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  15. await readerComponentController.init(context);
  16. readerComponentController.off('pageShow');
  17. hilog.info(0x0000, 'ReaderLog', `offPageShow succeeded`);
  18. }
  19. build() {
  20. Stack() {
  21. ReadPageComponent({
  22. controller: this.readerComponentController,
  23. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  24. this.readerComponentController = data;
  25. }
  26. })
  27. }.width('100%').height('100%')
  28. }
  29. }

on('resourceRequest')

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

on(type: 'resourceRequest', callback: bookParser.CallbackRes<string, ArrayBuffer>): void

注册资源请求回调,如果设置了自定义背景,字体时,排版引擎会通过此接口获取对应的资源ArrayBuffer。

说明

注册多个资源请求回调时,只会生效最后一个。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
type string 是 事件回调类型,支持的事件为“resourceRequest”。
callback bookParser.CallbackRes<string, ArrayBuffer> 是 回调函数,string:请求资源路径。ArrayBuffer:请求资源对应的二进制数据。

示例:

收起
自动换行
深色代码主题
复制
  1. import { bookParser, readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. // 字体文件以实际文件名及路径为准
  10. private selectFontPath = 'fonts/SourceHanSerifCN-VF.ttf';
  11. aboutToAppear(): void {
  12. this.registerListener();
  13. }
  14. private async registerListener() {
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. await this.readerComponentController.init(context);
  17. // 此处只演示方法调用,实际触发回调,需要配合startPlay接口使用
  18. this.readerComponentController.on('resourceRequest', this.resourceRequest);
  19. }
  20. private resourceRequest: bookParser.CallbackRes<string, ArrayBuffer> = (fileName: string): ArrayBuffer => {
  21. if (this.isFont(fileName)) {
  22. let res = $rawfile(this.selectFontPath);
  23. let context = this.getUIContext().getHostContext();
  24. if (res && context) {
  25. // 获取资源路径下的字体数据
  26. let value: Uint8Array = context.resourceManager.getRawFileContentSync(this.selectFontPath);
  27. hilog.info(0x0000, 'ReaderLog', 'resourceRequest : get success');
  28. return value.buffer as ArrayBuffer;
  29. }
  30. }
  31. return new ArrayBuffer(0);
  32. }
  33. private isFont(filePath: string): boolean {
  34. let options = ['.ttf', '.woff2', '.otf'];
  35. let path = filePath.toLowerCase();
  36. let result = path.indexOf(options[0]) != -1 || path.indexOf(options[1]) != -1 || path.indexOf(options[2]) != -1;
  37. hilog.info(0x0000, 'ReaderLog', 'isFont = ' + result);
  38. return result;
  39. }
  40. build() {
  41. Stack() {
  42. ReadPageComponent({
  43. controller: this.readerComponentController,
  44. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  45. this.readerComponentController = data;
  46. }
  47. })
  48. }.width('100%').height('100%')
  49. }
  50. }

off('resourceRequest')

Phone5.0.4(16)+PC/2in15.0.4(16)+Tablet5.0.4(16)+

off(type: 'resourceRequest', callback?: bookParser.CallbackRes<string, ArrayBuffer>): void

注销资源请求回调接口,可在页面销毁时调用。

模型约束: 此接口仅可在Stage模型下使用。

元服务API: 从版本5.0.4(16)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.Reader.ReaderService.ReaderCore

起始版本: 5.0.4(16)

参数:

展开
参数名 类型 必填 说明
type string 是 事件回调类型,支持的事件为“resourceRequest”。
callback bookParser.CallbackRes<string, ArrayBuffer> 否 回调函数,需要传on('resourceRequest')注册时的回调函数,若不传则注销所有的回调函数。

示例:

收起
自动换行
深色代码主题
复制
  1. import { readerCore, ReadPageComponent } from '@kit.ReaderKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
  5. @Entry
  6. @Component
  7. struct Reader {
  8. private readerComponentController: readerCore.ReaderComponentController = new readerCore.ReaderComponentController();
  9. aboutToAppear(): void {
  10. this.unregisterListener();
  11. }
  12. private async unregisterListener() {
  13. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  14. await this.readerComponentController.init(context);
  15. this.readerComponentController.off('resourceRequest');
  16. hilog.info(0x0000, 'ReaderLog', `offResourceRequest succeeded`);
  17. }
  18. build() {
  19. Stack() {
  20. ReadPageComponent({
  21. controller: this.readerComponentController,
  22. readerCallback: (err: BusinessError, data: readerCore.ReaderComponentController) => {
  23. this.readerComponentController = data;
  24. }
  25. })
  26. }.width('100%').height('100%')
  27. }
  28. }