public void RemoveCoverTest() { var epub1 = EpubReader.Read(Cwd.Combine(@"Samples/epub-assorted/Inversions - Iain M. Banks.epub")); var writer = new EpubWriter(EpubWriter.MakeCopy(epub1)); writer.RemoveCover(); var epub2 = WriteAndRead(writer); Assert.NotNull(epub1.CoverImage); Assert.Null(epub2.CoverImage); Assert.Equal(epub1.Resources.Images.Count - 1, epub2.Resources.Images.Count); }
public void RemoveCoverTest() { var epub1 = EpubReader.Read(@"Samples/epub-assorted/afrique_du_sud_2016_carnet_petit_fute.epub", null); var writer = new EpubWriter(EpubWriter.MakeCopy(epub1)); writer.RemoveCover(); var epub2 = WriteAndRead(writer); Assert.IsNotNull(epub1.CoverImage); Assert.IsNull(epub2.CoverImage); Assert.AreEqual(epub1.Resources.Images.Count - 1, epub2.Resources.Images.Count); }
private void ReadWriteTest(List <string> archives) { foreach (var archive in archives) { var originalEpub = EpubReader.Read(archive); var stream = new MemoryStream(); EpubWriter.Write(originalEpub, stream); stream.Seek(0, SeekOrigin.Begin); var savedEpub = EpubReader.Read(stream, false); AssertEpub(originalEpub, savedEpub); } }
public void ClearChaptersTest() { var writer = new EpubWriter(); writer.AddChapter("Chapter 1", "bla bla bla"); writer.AddChapter("Chapter 2", "foo bar"); writer.AddChapter("Chapter 3", "fooz barz"); var epub = WriteAndRead(writer); Assert.AreEqual(3, epub.TableOfContents.Count); writer = new EpubWriter(epub); writer.ClearChapters(); epub = WriteAndRead(writer); Assert.AreEqual(0, epub.TableOfContents.Count); }
public void AddRemoveTitleTest() { var writer = new EpubWriter(); writer.SetTitle("Title1"); var epub = WriteAndRead(writer); Assert.AreEqual("Title1", epub.Title); writer.SetTitle("Title2"); epub = WriteAndRead(writer); Assert.AreEqual("Title2", epub.Title); writer.RemoveTitle(); epub = WriteAndRead(writer); Assert.IsNull(epub.Title); writer.RemoveTitle(); }
public void CanAddChapterTest() { var writer = new EpubWriter(); var chapters = new[] { writer.AddChapter("Chapter 1", "bla bla bla"), writer.AddChapter("Chapter 2", "foo bar") }; var epub = WriteAndRead(writer); Assert.AreEqual("Chapter 1", chapters[0].Title); Assert.AreEqual("Chapter 2", chapters[1].Title); Assert.AreEqual(2, epub.TableOfContents.Count); for (var i = 0; i < chapters.Length; ++i) { Assert.AreEqual(chapters[i].Title, epub.TableOfContents[i].Title); Assert.AreEqual(chapters[i].FileName, epub.TableOfContents[i].FileName); Assert.AreEqual(chapters[i].Anchor, epub.TableOfContents[i].Anchor); Assert.AreEqual(0, chapters[i].SubChapters.Count); Assert.AreEqual(0, epub.TableOfContents[i].SubChapters.Count); } }
public void CanAddChapterTest() { var writer = new EpubWriter(); var chapters = new[] { writer.AddChapter("Chapter 1", "bla bla bla"), writer.AddChapter("Chapter 2", "foo bar") }; var epub = WriteAndRead(writer); Assert.Equal("Chapter 1", chapters[0].Title); Assert.Equal("Chapter 2", chapters[1].Title); Assert.Equal(2, epub.TableOfContents.Count); for (var i = 0; i < chapters.Length; ++i) { Assert.Equal(chapters[i].Title, epub.TableOfContents[i].Title); Assert.Equal(chapters[i].RelativePath, epub.TableOfContents[i].RelativePath); Assert.Equal(chapters[i].HashLocation, epub.TableOfContents[i].HashLocation); Assert.Equal(0, chapters[i].SubChapters.Count); Assert.Equal(0, epub.TableOfContents[i].SubChapters.Count); } }
public void AddFileTest() { var writer = new EpubWriter(); writer.AddFile("style.css", "body {}", EpubContentType.Css); writer.AddFile("img.jpeg", new byte[] { 0x42 }, EpubContentType.ImageJpeg); writer.AddFile("font.ttf", new byte[] { 0x24 }, EpubContentType.FontTruetype); var epub = WriteAndRead(writer); Assert.AreEqual(1, epub.Resources.Css.Count); Assert.AreEqual("style.css", epub.Resources.Css.First().FileName); Assert.AreEqual("body {}", epub.Resources.Css.First().TextContent); Assert.AreEqual(1, epub.Resources.Images.Count); Assert.AreEqual("img.jpeg", epub.Resources.Images.First().FileName); Assert.AreEqual(1, epub.Resources.Images.First().Content.Length); Assert.AreEqual(0x42, epub.Resources.Images.First().Content.First()); Assert.AreEqual(1, epub.Resources.Fonts.Count); Assert.AreEqual("font.ttf", epub.Resources.Fonts.First().FileName); Assert.AreEqual(1, epub.Resources.Fonts.First().Content.Length); Assert.AreEqual(0x24, epub.Resources.Fonts.First().Content.First()); }
public abstract string ConvertToHtml(FileInfo file, EpubWriter writer);
public void GenerateEpub(Settings options, string[] files) { EpubWriter writer = new EpubWriter(); writer.AddAuthor(options.Author); if (!string.IsNullOrWhiteSpace(options.Cover)) { using (var ms = new MemoryStream()) { try { var img = Image.FromFile(options.GetPathStr(options.Cover), true); img.Save(ms, img.RawFormat); writer.SetCover(ms.ToArray(), ImageFormat.Png); writer.AddChapter("Cover", GeneratePageTemplate("<img src='cover.png' />")); } catch (FileNotFoundException e) { LastStatus = $"Failed to find Cover Image at {options.GetPathStr(options.Cover)}. Defaulting to blank cover image. If you have a proper cover, please provide a relative path to it in the settings json file"; var img = new Bitmap(1, 1); img.SetPixel(0, 0, Color.White); img.Save(ms, SysImg.ImageFormat.Png); writer.SetCover(ms.ToArray(), ImageFormat.Png); } } } writer.SetTitle(options.Title); int maxLength = files.Length * 2 + 1; for (int i = 0; i < files.Length; i++) { string file = files[i]; FileInfo info = new FileInfo(file); string text = string.Empty; try { OnProgress(i * 2, maxLength); text = ConvertToHtml(info, writer); } catch (Exception ex) { throw new Exception($"Unable to convert file: {file}", ex); } writer.AddChapter(info.Name.Replace($".{FileType}", ""), text); OnProgress(i * 2 + 1, maxLength); } if (files.Length == 0) { string path = Path.GetDirectoryName(options.Path); if (path == ".") { path = Environment.CurrentDirectory; } LastStatus = $"No {FileType} files found in {path}"; } writer.Write(options.GetTitlePath()); OnProgress(maxLength, maxLength); }
private EpubBuilder() { _writer = new EpubWriter(); }
public override string ConvertToHtml(FileInfo file, EpubWriter writer) { this.LastStatus = $"Processing File: {file.Name}"; byte[] byteArray = File.ReadAllBytes(file.FullName); using (MemoryStream memoryStream = new MemoryStream()) { memoryStream.Write(byteArray, 0, byteArray.Length); using (WordprocessingDocument wDoc = WordprocessingDocument.Open(memoryStream, true)) { var pageTitle = file.FullName; var part = wDoc.CoreFilePropertiesPart; if (part != null) { pageTitle = (string)part.GetXDocument().Descendants(DC.title).FirstOrDefault() ?? file.FullName; } HtmlConverterSettings settings = new HtmlConverterSettings() { AdditionalCss = "body { margin: 1cm auto; max-width: 20cm; padding: 0; }", PageTitle = pageTitle, FabricateCssClasses = true, CssClassPrefix = "pt-", RestrictToSupportedLanguages = false, RestrictToSupportedNumberingFormats = false, ImageHandler = imageInfo => { string extension = imageInfo.ContentType.Split('/')[1].ToLower(); SysImg.ImageFormat imageFormat = null; if (extension == "png") { imageFormat = SysImg.ImageFormat.Png; } else if (extension == "gif") { imageFormat = SysImg.ImageFormat.Gif; } else if (extension == "bmp") { imageFormat = SysImg.ImageFormat.Bmp; } else if (extension == "jpeg") { imageFormat = SysImg.ImageFormat.Jpeg; } else if (extension == "tiff") { // Convert tiff to gif. extension = "gif"; imageFormat = SysImg.ImageFormat.Gif; } else if (extension == "x-wmf") { extension = "wmf"; imageFormat = SysImg.ImageFormat.Wmf; } // If the image format isn't one that we expect, ignore it, // and don't return markup for the link. if (imageFormat == null) { return(null); } string fileName = $"{Guid.NewGuid()}.{extension}"; string filePath = $"images/{fileName}"; using (var ms = new MemoryStream()) { imageInfo.Bitmap.Save(ms, SysImg.ImageFormat.Png); writer.AddFile(filePath, ms.ToArray(), EpubSharp.Format.EpubContentType.ImagePng); } XElement ximg = new XElement(Xhtml.img, new XAttribute(NoNamespace.src, filePath), imageInfo.ImgStyleAttribute, imageInfo.AltText != null ? new XAttribute(NoNamespace.alt, imageInfo.AltText) : null); return(ximg); } }; XElement htmlElement = HtmlConverter.ConvertToHtml(wDoc, settings); var html = new XDocument( new XDocumentType("html", null, null, null), htmlElement); var htmlString = html.ToString(SaveOptions.DisableFormatting); return(htmlString); } } }
public static void Main() { var writer = new EpubWriter(); writer.AddAuthor("Furesoft"); var uris = new[] { "https://rss.golem.de/rss.php?tp=dev&feed=RSS2.0", "https://www.heise.de/rss/heiseplus-atom.xml", "https://www.spiegel.de/schlagzeilen/tops/index.rss", "https://www.spiegel.de/schlagzeilen/index.rss", "https://www.welt.de/feeds/topnews.rss", }; var feedinfo = new List <object>(); var ids = new Dictionary <string, string>(); foreach (var uri in uris) { var feed = FeedReader.ReadAsync(uri).Result; var id = Guid.NewGuid().ToString(); feedinfo.Add(new { title = feed.Title, id }); ids.Add(feed.Title, id); } var noc = Template.Parse(Resources.TOC).Render(new { info = feedinfo }); writer.AddFile("toc.ncx", noc, EpubSharp.Format.EpubContentType.Xml); foreach (var uri in uris) { var feed = FeedReader.ReadAsync(uri).Result; if (feed.ImageUrl != null) { var webClient = new WebClient(); var logo = webClient.DownloadData(feed.ImageUrl); writer.AddFile(Path.GetFileName(feed.ImageUrl), logo, EpubSharp.Format.EpubContentType.ImageJpeg); } foreach (var item in feed.Items) { if (item.Content != null) { var d = new HtmlDocument(); d.LoadHtml(item.Content); var nodes = d.DocumentNode.SelectNodes("img"); if (nodes != null) { foreach (var n in nodes) { var url = n.Attributes["src"].Value; //download image var webClient = new WebClient(); var logo = webClient.DownloadData(url); writer.AddFile(Path.GetFileName(url), logo, EpubSharp.Format.EpubContentType.ImageJpeg); //set new uri n.Attributes["src"].Value = Path.GetFileName(url); } var ms = new MemoryStream(); d.Save(ms); item.Content = Encoding.UTF8.GetString(ms.ToArray()); } } } var template = Template.Parse(Resources.Template); var scriptObject1 = new ScriptObject { { "logo", Path.GetFileName(feed.ImageUrl) }, { "feed", feed } }; var context = new TemplateContext(); context.PushGlobal(scriptObject1); var result = template.Render(context); writer.AddChapter(feed.Title, result, ids[feed.Title]); } writer.SetCover(Resources.cover, ImageFormat.Jpeg); writer.SetTitle($"epaper_{DateTime.Now.Date}"); writer.Write($"epaper_{DateTime.Now.Date.ToShortDateString()}.epub"); }