文档管理中心

获取书籍信息

在导入本地书籍到书架时,开发者需通过DocumentViewPicker先将书籍文件导入到应用沙箱目录,然后利用解析能力获取书籍信息,包括书封、书名及作者等,以完成书架内容的展示。

业务流程

接口说明

获取书籍信息共涉及3个接口,具体API说明请参考下表。

展开
接口名 描述
getDefaultHandler(path: string): Promise<BookParserHandler> 获取书籍默认解析器。
getBookInfo(): BookInfo 获取书籍信息。
getResourceContent(spineIndex: number, filePath: string): ArrayBuffer 获取书籍内容资源。

开发步骤

  1. 导入相关模块。

    import { common } from '@kit.AbilityKit';
    import { bookParser } from '@kit.ReaderKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { image } from '@kit.ImageKit';
  2. 通过提前导入到应用沙箱目录中的书籍文件,初始化书籍解析器。

    private defaultHandler: bookParser.BookParserHandler | null = null;
    
    aboutToAppear(): void {
      this.init().then(() => {
      });
    }
    
    private async init() {
      let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
      let path: string = `${context.filesDir}/abc.epub`;
      try {
        this.defaultHandler = await bookParser.getDefaultHandler(path);
      } catch (error) {
        hilog.error(0x0000, "testTAG", `getDefaultHandler failed, Code: ${error.code}, message: ${error.message}`);
      }
    }
  3. 获取书名、作者、书封信息并进行展示。

    @State bookCover: PixelMap | null = null;
    @State bookTitle: string = '';
    @State author: string = '';
    
    aboutToAppear(): void {
      this.init().then(() => {
        this.getBookInfo();
      });
    }
    
    private async getBookInfo() {
      try {
        let bookInfo: bookParser.BookInfo | undefined = this.defaultHandler?.getBookInfo();
        if (bookInfo) {
          this.bookTitle = bookInfo.bookTitle || '';
          this.author = bookInfo?.bookCreator || '';
          let buffer = this.defaultHandler?.getResourceContent(-1, bookInfo.bookCoverImage);
          let imageSource: image.ImageSource = image.createImageSource(buffer);
          this.bookCover = await imageSource.createPixelMap();
          imageSource.release();
        }
        hilog.info(0x0000, 'testTAG', 'getBookInfo bookInfo is: ' + JSON.stringify(bookInfo));
      } catch (error) {
        hilog.error(0x0000, 'testTAG', `getBookInfo failed, Code: ${error.code}, message: ${error.message}`);
      }
    }
    
    build() {
      Column() {
        Text('书名:' + this.bookTitle)
          .fontSize(20)
          .fontColor("#E6000000")
          .margin({ top: 50 })
        Text('作者:' + this.author)
          .fontSize(20)
          .fontColor("#E6000000")
          .margin({ top: 10 })
        Image(this.bookCover)
          .width(200)
          .aspectRatio(3 / 4)
          .borderRadius(5)
          .margin({ top: 10 })
      }
      .alignItems(HorizontalAlign.Start)
      .margin({ left: 10, right: 10 })
    }