コード例 #1
0
        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);
        }
コード例 #2
0
        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
            });
        }