示例#1
0
        private static EpubBook CreateInternal(byte[] data)
        {
            var b = new EpubBook();

            try {
                using (var ms = new MemoryStream(data)) {
                    using (var gz = new ZipArchive(ms)) {
                        // ******************** CONTAINER.XML ********************//
                        var metainf = gz.Entries.First(z => z.FullName == "META-INF/container.xml");
                        using (var mscontainer = new MemoryStream()) {
                            metainf.Open().CopyTo(mscontainer);
                            mscontainer.Position = 0;
                            var containerDoc = XDocument.Load(mscontainer);
                            // Container
                            b.ContainerData = Container.CreateContainer(containerDoc.Root);
                        }
                        // OPF (Package)
                        using (var msopf = new MemoryStream()) {
                            // opf folder
                            var opsFolder = Path.GetDirectoryName(b.ContainerData.Rootfiles.First().FullPath).Replace("\\", "/");
                            //
                            metainf = gz.Entries.First(z => z.FullName == b.ContainerData.Rootfiles.First().FullPath);
                            metainf.Open().CopyTo(msopf);
                            msopf.Position = 0;
                            // ******************** OPF ********************//
                            var    reader = XmlReader.Create(msopf);
                            var    opfDoc = XDocument.Load(reader);
                            string ncxHref;
                            b.PackageData = OpfPackage.CreatePackage(opfDoc.Root, gz, opsFolder, out ncxHref);
                            // metadata head
                            // ******************** NCX ********************//
                            using (var msncx = new MemoryStream()) {
                                metainf = gz.Entries.First(z => z.FullName == opsFolder.CreatePath(ncxHref));
                                metainf.Open().CopyTo(msncx);
                                msncx.Position = 0;
                                var ncxDocument = XDocument.Load(msncx);
                                b.NavigationData = Navigation.CreateNavigation(b.PackageData.Manifest, ncxDocument);
                            }
                        }
                        // pull from regular content for faster access using Guide information
                        b.CoverDescription = b.PackageData.Guide.ReferenceTitle;
                        var coverItem = b.PackageData.Manifest.Items.FirstOrDefault(i => i.Href == b.PackageData.Guide.ReferenceHref);
                        if (coverItem != null)
                        {
                            b.CoverImage = coverItem.Data;
                        }
                    }
                }
            } catch (System.Exception) {
                return(null);
            }
            return(b);
        }
示例#2
0
        public EpubBook GenerateEpubMedia(int id)
        {
            doc = ProjectManager.Instance.GetDocument(id);

            if (doc == null)
            {
                throw new ArgumentNullException("opus");
            }

            manifest.Items = new List <ManifestItem>();

            var book = new EpubBook(); //create epub book object

            ClearObjectValues();       //reset older values.


            //set values for container.xml to book object
            book.ContainerData = new Container();

            //create & set value for content.opf
            OpfPackage package = new OpfPackage();

            //set values for opf
            package.Dir        = ProgressionDirection.Ltr;
            package.Version    = "2.0";
            package.Language   = "en";
            package.Identifier = "urn:isbn:9780735656680";
            package.MetaData   = GenerateMetaData();
            package.Manifest   = GenerateManifest(doc);
            package.Spine      = GenerateSpine();
            package.Guide      = GenerateGuide();
            book.PackageData   = package;

            //create & set values for toc.ncx
            Navigation navigationdata = new Navigation();

            //set Head
            navigationdata.HeadMetaData = GenerateHeadMetaData();
            //set NavMap
            navigationdata.NavMap = navList;
            book.NavigationData   = navigationdata;

            book.CoverDescription = book.PackageData.MetaData.Title.Text;
            book.CoverImage       = ReadBytesFromFile(HttpContext.Current.Server.MapPath("~/data/Epub") + "\\httpatomoreillycomsourcemspimages741241.jpg");

            return(book);
        }
示例#3
0
        // opfdata.opf
        private static MemoryStream GetOpfData(OpfPackage package)
        {
            var opfDoc = new XDocument();

            opfDoc.Declaration = XmlDeclaration;
            var xe = OpfPackage.CreateXElement(package);

            xe.Add(MetaData.CreateXElement(package.MetaData));
            xe.Add(Manifest.CreateXElement(package.Manifest));
            xe.Add(Spine.CreateXElement(package.Spine));
            xe.Add(Guide.CreateXElement(package.Guide));
            opfDoc.Add(xe);
            var ms = new MemoryStream();

            opfDoc.Save(ms);
            ms.Position = 0;
            return(ms);
        }