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);
        }
예제 #2
0
        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");
        }
예제 #3
0
        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());
        }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
        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");
        }