Flutter电子书阅读插件epubxx的使用

Flutter电子书阅读插件epubxx的使用

epubxx 是一个用于读取和写入EPUB文件的Dart库。该库受一个非常出色的C# EPUB阅读器启发,可以从任何地方获取EPUB内容,并将其读入内存。

安装

首先,在你的 pubspec.yaml 文件中添加依赖项:

dependencies:
  epubxx: any

示例代码

以下是一个完整的示例,展示如何使用 epubxx 插件来读取EPUB文件并访问其内容。

import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:epubxx/epubxx.dart';

void main() async {
  // 获取EPUB文件到内存中
  String fileName = 'sample.epub';
  String fullPath = path.join(Directory.current.path, fileName);
  var targetFile = File(fullPath);
  List<int> bytes = await targetFile.readAsBytes();

  // 打开书籍并读取其所有内容到内存
  EpubBook epubBook = await EpubReader.readBook(bytes);

  // 常用属性

  // 书籍的标题
  String title = epubBook.Title;

  // 书籍的作者(逗号分隔的列表)
  String author = epubBook.Author;

  // 书籍的作者(作者名字的列表)
  List<String> authors = epubBook.AuthorList;

  // 书籍的封面图像(如果没有封面则为null)
  Image coverImage = epubBook.CoverImage;

  // 章节

  // 枚举章节
  epubBook.Chapters.forEach((EpubChapter chapter) {
    // 章节标题
    String chapterTitle = chapter.Title;

    // 当前章节的HTML内容
    String chapterHtmlContent = chapter.HtmlContent;

    // 子章节
    List<EpubChapter> subChapters = chapter.SubChapters;
  });

  // 内容

  // 书籍的内容(HTML文件、样式表、图像、字体等)
  EpubContent bookContent = epubBook.Content;

  // 图像

  // 书籍中的所有图像(文件名作为键)
  Map<String, EpubByteContentFile> images = bookContent.Images;

  EpubByteContentFile firstImage = images.values.first;

  // 内容类型(例如 EpubContentType.IMAGE_JPEG, EpubContentType.IMAGE_PNG)
  EpubContentType contentType = firstImage.ContentType;

  // MIME 类型(例如 "image/jpeg", "image/png")
  String mimeContentType = firstImage.ContentMimeType;

  // HTML & CSS

  // 书籍中的所有XHTML文件(文件名作为键)
  Map<String, EpubTextContentFile> htmlFiles = bookContent.Html;

  // 书籍中的所有CSS文件(文件名作为键)
  Map<String, EpubTextContentFile> cssFiles = bookContent.Css;

  // 书籍的整个HTML内容
  htmlFiles.values.forEach((EpubTextContentFile htmlFile) {
    String htmlContent = htmlFile.Content;
  });

  // 书籍中的所有CSS内容
  cssFiles.values.forEach((EpubTextContentFile cssFile) {
    String cssContent = cssFile.Content;
  });

  // 其他内容

  // 书籍中的所有字体(文件名作为键)
  Map<String, EpubByteContentFile> fonts = bookContent.Fonts;

  // 书籍中的所有文件(包括HTML、CSS、图像、字体和其他类型的文件)
  Map<String, EpubContentFile> allFiles = bookContent.AllFiles;

  // 访问原始模式信息

  // EPUB OPF数据
  EpubPackage package = epubBook.Schema.Package;

  // 枚举书籍的贡献者
  package.Metadata.Contributors.forEach((EpubMetadataContributor contributor) {
    String contributorName = contributor.Contributor;
    String contributorRole = contributor.Role;
  });

  // EPUB NCX数据
  EpubNavigation navigation = epubBook.Schema.Navigation;

  // 枚举NCX元数据
  navigation.Head.Metadata.forEach((EpubNavigationHeadMeta meta) {
    String metadataItemName = meta.Name;
    String metadataItemContent = meta.Content;
  });

  // 写入数据
  var written = await EpubWriter.writeBook(epubBook);

  // 你可以甚至可以将书籍重新读入一个新的对象!
  var bookRoundTrip = await EpubReader.readBook(written);
}

更多关于Flutter电子书阅读插件epubxx的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter电子书阅读插件epubxx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,epub_view 是一个常用的插件,用于在应用中展示和阅读 ePub 格式的电子书。epub_view 是基于 flutter_epub 开发的,提供了简单易用的 API 来加载和显示 ePub 文件。

以下是使用 epub_view 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 epub_view 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  epub_view: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 epub_view 插件:

import 'package:epub_view/epub_view.dart';

3. 加载和显示 ePub 文件

你可以使用 EpubView 小部件来加载和显示 ePub 文件。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:epub_view/epub_view.dart';

class EpubReaderScreen extends StatefulWidget {
  @override
  _EpubReaderScreenState createState() => _EpubReaderScreenState();
}

class _EpubReaderScreenState extends State<EpubReaderScreen> {
  EpubController _epubController;

  @override
  void initState() {
    super.initState();
    _loadEpub();
  }

  Future<void> _loadEpub() async {
    // 加载 ePub 文件
    _epubController = EpubController(
      document: EpubDocument.openAsset('assets/example.epub'), // 从 assets 加载
      // document: EpubDocument.openFile('/path/to/example.epub'), // 从文件加载
    );

    setState(() {});
  }

  @override
  void dispose() {
    _epubController?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ePub Reader'),
      ),
      body: _epubController != null
          ? EpubView(
              controller: _epubController,
            )
          : Center(
              child: CircularProgressIndicator(),
            ),
    );
  }
}

4. 添加 ePub 文件到 assets

如果你从 assets 加载 ePub 文件,需要在 pubspec.yaml 中配置:

flutter:
  assets:
    - assets/example.epub

5. 运行应用

现在你可以运行应用并查看 ePub 文件的阅读效果。

6. 其他功能

epub_view 还提供了其他一些功能,如书签、章节导航、文本搜索等。你可以通过 EpubController 来控制这些功能。

例如,跳转到特定章节:

_epubController.jumpTo(index: 2); // 跳转到第3章

7. 处理错误

在实际使用中,可能会遇到 ePub 文件加载失败的情况。你可以通过捕获异常来处理这些错误:

try {
  _epubController = EpubController(
    document: EpubDocument.openAsset('assets/example.epub'),
  );
} catch (e) {
  print('Error loading ePub file: $e');
}

8. 自定义样式

你可以通过 EpubViewstyle 参数来自定义阅读器的样式,例如字体大小、颜色等。

EpubView(
  controller: _epubController,
  style: EpubViewStyle(
    backgroundColor: Colors.white,
    textColor: Colors.black,
    fontSize: 16.0,
  ),
);
回到顶部