private static void GenerateEpub(string path, IReadOnlyList <Chapter> chaptersHtml, MetaInformation meta) { var epub = new Document(); epub.AddBookIdentifier(Guid.NewGuid().ToString()); epub.AddLanguage("English"); //TODO Publish date epub.AddMetaItem("dc:date", meta.PublishDate.ToString("YYYY-MM-DD")); epub.AddStylesheetData("style.css", Resources.style); epub.AddTitle(meta.Title); epub.AddAuthor(meta.Author); var chapterNumber = 0; if (meta.CoverImageFile?.Exists == true) { var coverImageId = epub.AddImageData(meta.CoverImageFile.Name, File.ReadAllBytes(meta.CoverImageFile.FullName)); epub.AddMetaItem("cover", coverImageId); var coverPage = Resources.epub_cover_template.Replace("{cover}", meta.CoverImageFile.Name); epub.AddXhtmlData($"page{chapterNumber}.xhtml", coverPage); epub.AddNavPoint("Cover", $"page{chapterNumber}.xhtml", chapterNumber); chapterNumber++; } var chapterTemplate = Resources.epub_template.Replace("{title}", meta.Title); for (var i = 0; i < chaptersHtml.Count; i++, chapterNumber++) { var chapter = chaptersHtml[i]; var chapterFile = $"page{chapterNumber}.xhtml"; var chapterContent = chapterTemplate.Replace("{body}", chapter.Html); epub.AddXhtmlData(chapterFile, chapterContent); epub.AddNavPoint(chapter.GetNavPoint(i + 1), chapterFile, chapterNumber); } epub.Generate(path); }
private static void GeneratePdf(string path, IEnumerable <Chapter> chaptersHtml, MetaInformation meta) { var joinedChapters = string.Join("\n<div class=\"pagebreak\"></div>\n", chaptersHtml.Select(c => c.Html)); var cover = string.Empty; var chapterContent = Resources.pdf_template .Replace("{title}", meta.Title) .Replace("{style}", Resources.style) .Replace("{body}", joinedChapters) .Replace("{cover}", cover); var settings = new GlobalSettings { UseCompression = true, PaperSize = PaperKind.A4, DocumentTitle = meta.Title }; var chapterSettings = new ObjectSettings { HtmlContent = chapterContent }; var pdfDocument = new HtmlToPdfDocument { GlobalSettings = settings, Objects = { chapterSettings } }; var converter = new BasicConverter(new PdfTools()); try { var bytes = converter.Convert(pdfDocument); File.WriteAllBytes(path, bytes); } catch (DllNotFoundException e) { Console.Error.WriteLine("Missing assemblies. Make sure libwkhtmltox is with the tool and" + " zlib1g fontconfig libfreetype6 libx11-6 libxext6 libxrender1 are installed."); Console.Error.WriteLine(e); throw; } }