public EpubBuilder WithFiles(string path, string searchPattern, EpubContentType type) { foreach (var file in Directory.GetFiles(path, searchPattern)) { Console.WriteLine($"Добавляем файл {file.CoverQuotes()}"); _writer.AddFile(Path.GetFileName(file), File.ReadAllBytes(file), EpubContentType.FontTruetype); } return(this); }
private static void WriteEPubX() { //insert img data into this byte array byte[] imgData = null; byte[] cntData = null; EpubWriter writer = new EpubWriter(); writer.AddAuthor("An anuthor"); writer.SetCover(imgData, ImageFormat.Jpeg); writer.AddFile("string", cntData, EpubContentType.ImageJpeg); writer.Write("newBook.epub"); }
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 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"); }