EpubService.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.Collections.Generic;
  2. using GxPress.Request.Media;
  3. using GxPress.Result.Category;
  4. using GxPress.Result.Media;
  5. using GxPress.Service.Interface.Epub;
  6. using VersOne.Epub;
  7. namespace GxPress.Service.Implement.Epub
  8. {
  9. public class EpubService : IEpubService
  10. {
  11. /// <summary>
  12. /// 获取书籍目录
  13. /// </summary>
  14. public List<BookCatalogResult> GetCatalog(string path)
  15. {
  16. var result = new List<BookCatalogResult>();
  17. EpubBook epubBook = EpubReader.ReadBook(path);
  18. int i = 1;
  19. // 目录
  20. //列举章节
  21. foreach (EpubNavigationItem chapter in epubBook.Navigation)
  22. {
  23. //本章标题
  24. var bookCatalog = new BookCatalogResult();
  25. bookCatalog.Id = i;
  26. bookCatalog.CatalogNameg = chapter.Title;
  27. bookCatalog.CatalogId = chapter.HtmlContentFile.FileName;
  28. result.Add(bookCatalog);
  29. //嵌套章节
  30. List<EpubNavigationItem> subChapters = chapter.NestedItems;
  31. foreach (var item in subChapters)
  32. {
  33. bookCatalog = new BookCatalogResult();
  34. bookCatalog.CatalogNameg = item.Title;
  35. bookCatalog.CatalogId = item.HtmlContentFile.FileName;
  36. bookCatalog.ParentId = i;
  37. result.Add(bookCatalog);
  38. }
  39. i++;
  40. }
  41. return result;
  42. }
  43. /// <summary>
  44. /// 获取章节内容
  45. /// </summary>
  46. /// <returns></returns>
  47. public string GetBookCatalogContent(BookCatalogRequest request)
  48. {
  49. if (string.IsNullOrEmpty(request.Path))
  50. return string.Empty;
  51. EpubBook epubBook = EpubReader.ReadBook(request.Path);
  52. string htmlContent = string.Empty;
  53. foreach (EpubTextContentFile textContentFile in epubBook.ReadingOrder)
  54. {
  55. if (textContentFile.FileName.Equals(request.CatalogId) || textContentFile.FileName.Equals(request.CatalogNameg))
  56. {
  57. //当前文本内容文件的HTML
  58. htmlContent = ReplaceHtmlTag(textContentFile.Content);
  59. break;
  60. }
  61. }
  62. return htmlContent;
  63. }
  64. /// <summary>
  65. /// C#去除HTML标签
  66. /// </summary>
  67. /// <param name="html">带有html标签的文本</param>
  68. /// <param name="length">截取长度</param>
  69. /// <returns></returns>
  70. public string ReplaceHtmlTag(string html, int length = 0)
  71. {
  72. string strText = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+>", "");
  73. strText = System.Text.RegularExpressions.Regex.Replace(strText, "&[^;]+;", "");
  74. if (length > 0 && strText.Length > length)
  75. return strText.Substring(0, length);
  76. return strText;
  77. }
  78. }
  79. }