public void SetCover(byte[] data, ImageFormat imageFormat) { if (data == null) { throw new ArgumentNullException(nameof(data)); } RemoveCover(); string filename; EpubContentType type; switch (imageFormat) { case ImageFormat.Gif: filename = "cover.gif"; type = EpubContentType.ImageGif; break; case ImageFormat.Jpeg: filename = "cover.jpeg"; type = EpubContentType.ImageJpeg; break; case ImageFormat.Png: filename = "cover.png"; type = EpubContentType.ImagePng; break; case ImageFormat.Svg: filename = "cover.svg"; type = EpubContentType.ImageSvg; break; default: throw new ArgumentException($"Unsupported cover format: {format}", nameof(format)); } var coverResource = new EpubByteFile { AbsolutePath = filename, Href = filename, ContentType = type, Content = data }; coverResource.MimeType = ContentType.ContentTypeToMimeType[coverResource.ContentType]; resources.Images.Add(coverResource); var coverItem = new OpfManifestItem { Id = OpfManifest.ManifestItemCoverImageProperty, Href = coverResource.Href, MediaType = coverResource.MimeType }; coverItem.Properties.Add(OpfManifest.ManifestItemCoverImageProperty); format.Opf.Manifest.Items.Add(coverItem); }
public EpubChapter AddChapter(string title, string html, string fileId = null) { if (string.IsNullOrWhiteSpace(title)) { throw new ArgumentNullException(nameof(title)); } if (html == null) { throw new ArgumentNullException(nameof(html)); } fileId = fileId ?? Guid.NewGuid().ToString("N"); var file = new EpubTextFile { AbsolutePath = fileId + ".html", Href = fileId + ".html", TextContent = html, ContentType = EpubContentType.Xhtml11 }; file.MimeType = ContentType.ContentTypeToMimeType[file.ContentType]; resources.Html.Add(file); var manifestItem = new OpfManifestItem { Id = fileId, Href = file.Href, MediaType = file.MimeType }; format.Opf.Manifest.Items.Add(manifestItem); var spineItem = new OpfSpineItemRef { IdRef = manifestItem.Id, Linear = true }; format.Opf.Spine.ItemRefs.Add(spineItem); FindNavTocOl()?.Add(new XElement(NavElements.Li, new XElement(NavElements.A, new XAttribute("href", file.Href), title))); format.Ncx?.NavMap.NavPoints.Add(new NcxNavPoint { Id = Guid.NewGuid().ToString("N"), NavLabelText = title, ContentSrc = file.Href, PlayOrder = format.Ncx.NavMap.NavPoints.Any() ? format.Ncx.NavMap.NavPoints.Max(e => e.PlayOrder) : 1 }); return(new EpubChapter { Id = fileId, Title = title, RelativePath = file.AbsolutePath }); }