.NET библиотека для чтения EPUB документов

Открытый .NET API для доступа и чтения EPUB файлов, извлечения их содержимого и конвертации EPUB в PDF внутри приложений C#.

EpubReader — очень мощная открытая .NET‑библиотека, позволяющая разработчикам программного обеспечения открывать и читать EPUB‑документы в своих C#‑приложениях. Библиотека полностью поддерживает стандарты EPUB 2 (2.0, 2.0.1) и EPUB 3 (3.0, 3.0.1, 3.1, 3.2). Библиотека EpubReader поддерживает только чтение EPUB‑файлов и пока не предоставляет возможности записи.

Библиотека EpubReader поддерживает разбор EPUB‑книг и извлечение содержимого без каких-либо внешних зависимостей. EPUB‑документ может представлять собой набор HTML‑файлов, включая CSS, изображения, шрифты и многое другое. Поэтому его можно отобразить так же, как веб‑браузер отображает другие HTML‑файлы. Библиотека позволяет пользователям извлекать простой текст всей книги, поддерживает разбор глав, извлечение обложки книги и перебор всех EPUB‑файлов в каталоге с сбором статистики.

Previous Next

Начало работы с EpubReader

Рекомендуемый способ установки EpubReader — использовать NuGet. Пожалуйста, используйте следующую команду для плавной установки.

Установить EpubReader через NuGet

NuGet\Install-Package VersOne.Epub -Version 3.2.0 

Вы также можете установить его вручную; загрузите последние файлы релиза напрямую из репозитория GitHub.

Как загрузить и прочитать EPUB‑книгу через .NET‑библиотеку

Открытая библиотека EpubReader полностью поддерживает загрузку и чтение EPUB‑книг в приложениях .NET. Библиотека включает множество полезных методов для работы с EPUB‑книгами, таких как загрузка книги в память, вывод названия книги, вывод автора книги, вывод оглавления, вывод конкретной главы книги, вывод всех глав книги и т.д. Ниже приведён пример кода, демонстрирующий, как загрузить и вывести EPUB‑книгу с помощью библиотеки.

Чтение EPUB‑книги через .NET‑библиотеку

using System.Text;
using VersOne.Epub;
using HtmlAgilityPack;

// Load the book into memory
EpubBook book = EpubReader.ReadBook("test.epub");

// Print the title and the author of the book
Console.WriteLine($"Title: {book.Title}");
Console.WriteLine($"Author: {book.Author}");
Console.WriteLine();

// Print the table of contents
Console.WriteLine("TABLE OF CONTENTS:");
PrintTableOfContents();
Console.WriteLine();

// Print the text content of all chapters in the book
Console.WriteLine("CHAPTERS:");
PrintChapters();

void PrintTableOfContents()
{
    foreach (EpubNavigationItem navigationItem in book.Navigation)
    {
        PrintNavigationItem(navigationItem, 0);
    }
}

void PrintNavigationItem(EpubNavigationItem navigationItem, int identLevel)
{
    Console.Write(new string(' ', identLevel * 2));
    Console.WriteLine(navigationItem.Title);
    foreach (EpubNavigationItem nestedNavigationItem in navigationItem.NestedItems)
    {
        PrintNavigationItem(nestedNavigationItem, identLevel + 1);
    }
}

void PrintChapters()
{
    foreach (EpubTextContentFile textContentFile in book.ReadingOrder)
    {
        PrintTextContentFile(textContentFile);
    }
}

void PrintTextContentFile(EpubTextContentFile textContentFile)
{
    HtmlDocument htmlDocument = new();
    htmlDocument.LoadHtml(textContentFile.Content);
    StringBuilder sb = new();
    foreach (HtmlNode node in htmlDocument.DocumentNode.SelectNodes("//text()"))
    {
        sb.AppendLine(node.InnerText.Trim());
    }
    string contentText = sb.ToString();
    Console.WriteLine(contentText);
    Console.WriteLine();
}

Извлечение простого текста из EPUB‑книги с помощью C#

Открытая библиотека EpubReader позволяет разработчикам программного обеспечения загружать EPUB‑книгу и извлекать из неё простой текст с помощью кода C# .NET. Обратите внимание, что для выполнения этой задачи необходимо установить пакет HtmlAgilityPack через NuGet. Ниже приведён пример, показывающий, как извлечь простой текст всей книги всего несколькими строками кода .NET.

Извлечение простого текста из EPUB‑книги с помощью C#

using System;
using System.Text;
using HtmlAgilityPack;

namespace VersOne.Epub.ConsoleDemo
{
    internal static class ExtractPlainText
    {
        public static void Run(string filePath)
        {
            EpubBook book = EpubReader.ReadBook(filePath);
            foreach (EpubTextContentFile textContentFile in book.ReadingOrder)
            {
                PrintTextContentFile(textContentFile);
            }
        }

        private static void PrintTextContentFile(EpubTextContentFile textContentFile)
        {
            HtmlDocument htmlDocument = new();
            htmlDocument.LoadHtml(textContentFile.Content);
            StringBuilder sb = new();
            foreach (HtmlNode node in htmlDocument.DocumentNode.SelectNodes("//text()"))
            {
                sb.AppendLine(node.InnerText.Trim());
            }
            string contentText = sb.ToString();
            Console.WriteLine(contentText);
            Console.WriteLine();
        }
    }
}

Извлечение оглавления из EPUB‑книги через C# API

Библиотека с открытым исходным кодом EpubReader позволяет разработчикам программного обеспечения загружать EPUB‑книгу и извлекать из неё простой текст с помощью кода C# .NET. Обратите внимание, что для выполнения этой задачи необходимо установить пакет HtmlAgilityPack NuGet. Следующий пример демонстрирует, как извлечь простой текст всей книги всего несколькими строками кода .NET.

Как извлечь оглавление из EPUB‑книги с помощью .NET API?

using System;

namespace VersOne.Epub.ConsoleDemo
{
    internal static class PrintNavigation
    {
        public static void Run(string filePath)
        {
            using (EpubBookRef bookRef = EpubReader.OpenBook(filePath))
            {
                Console.WriteLine("Navigation:");
                foreach (EpubNavigationItemRef navigationItemRef in bookRef.GetNavigation())
                {
                    PrintNavigationItem(navigationItemRef, 0);
                }
            }
            Console.WriteLine();
        }

        private static void PrintNavigationItem(EpubNavigationItemRef navigationItemRef, int identLevel)
        {
            Console.Write(new string(' ', identLevel * 2));
            Console.WriteLine(navigationItemRef.Title);
            foreach (EpubNavigationItemRef nestedNavigationItemRef in navigationItemRef.NestedItems)
            {
                PrintNavigationItem(nestedNavigationItemRef, identLevel + 1);
            }
        }
    }
}
 Русский