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); }
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); }
// 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); }