public void Cosnowego() { var epub = new Document(); // set metadata epub.AddAuthor("Jerome K. Jerome"); epub.AddTitle("Three Men in a Boat (To Say Nothing of the Dog)"); epub.AddLanguage("en"); // embed fonts epub.AddFile("C:\\Fonts\\LiberationSerif-Regular.ttf", "fonts/LiberationSerif-Regular.ttf", "application/octet-stream"); epub.AddFile("C:\\Fonts\\LiberationSerif-Bold.ttf", "fonts/LiberationSerif-Bold.ttf", "application/octet-stream"); epub.AddFile("C:\\Fonts\\LiberationSerif-Italic.ttf", "LiberationSerif-Italic.ttf", "application/octet-stream"); epub.AddFile("C:\\Fonts\\LiberationSerif-BoldItalic.ttf", "fonts/LiberationSerif-BoldItalic.ttf", "application/octet-stream"); // Add stylesheet with @font-face epub.AddStylesheetFile("templates\\style.css", "style.css"); // Add image files (figures) epub.AddImageFile("figures\\fig1.png", "fig1.png"); epub.AddImageFile("figures\\drawing.svg", "drawing.svg"); // add chapters' xhtml and setup TOC entries int navCounter = 1; for (int chapterCounter = 1; chapterCounter < 10; chapterCounter++) { String chapterFile = String.Format("page{0}.xhtml", chapterCounter); String chapterName = String.Format("Chapter {0}", chapterCounter); epub.AddXhtmlFile("tempdir\\" + chapterFile, chapterFile); var chapterTOCEntry = epub.AddNavPoint(chapterName, chapterFile, navCounter++); // add nested TOC entries for (int part = 0; part < 3; part++) { String partName = String.Format("Part {0}", part); String partHref = chapterFile + String.Format("#{0}", part); chapterTOCEntry.AddNavPoint(partName, partHref, navCounter++); } } // Generate resulting epub file epub.Generate("output\\mybook.epub"); }
/* * 执行按钮 */ private void tbGenerateEpub_Click(object sender, EventArgs e) { if (btnStart.Text.Equals("下一步"))//下一步的命令 { tabControl1.SelectedIndex = 1;//强制跳到第一个 return; } tabControl1.SelectedIndex = 2;//切换到进度tab if (tbEPubFilePath.Text.Length < 1)//为空时需要选择文件名 { btnSelectEPubFilePath_Click(null, null);//强制弹出按钮 } if (tbEPubFilePath.Text.Length < 1) { AddLog("未选择保存的epub文件路径"); return; } createTemp();//创建临时目录 _documentOrder = 0;//重新初始化计数 _folderOrder = 0; _playorder = 1;//重新初始化,从1开始,0表示封面的编号 int docCount = getWizFolderDocumentCount(axWizCategoryTree.SelectedFolder as WizFolder); progressBarConver.Maximum = docCount; progressBarConver.Value = 0; Document epub = new Document(); //Add metadata epub.AddAuthor(tbAuthor.Text); epub.AddTitle(tbTitle.Text); epub.AddLanguage(tbLanguage.Text); epub.AddType(tbSubject.Text); epub.AddStylesheetFile(Path.Combine(Application.StartupPath, "style.css"), "style.css"); if (picCover.Image != null) { FileInfo imgfile = new FileInfo(picCover.ImageLocation); if (imgfile.Exists) { string imgname = "cover" + imgfile.Extension.ToLower(); epub.AddImageFile(imgfile.FullName, imgname); epub.AddNavPoint("封面", "cover.xhtml", _playorder++); string html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Cover</title><style type=\"text/css\"> img { max-width: 100%; } </style></head><body><div id=\"cover-image\"><img src=\"" + imgname + "\" alt=\"为知笔记电子书\"/></div></body></html>"; epub.AddXhtmlData("cover.xhtml", html); } } ExportWizFolder(_temppath, axWizCategoryTree.SelectedFolder as WizFolder, null, true, epub); AddLog("正在生成EPub文件,请稍候..."); try { epub.Generate(tbEPubFilePath.Text); AddLog("生成EPub完成:" + tbEPubFilePath.Text); } catch (Exception ex) { AddLog("失败:" + ex.Message); } AddLog("正在清理临时文件,请稍候..."); clearTemp();//清理缓存 AddLog("完成"); }
/* * wiz doc导出为html */ private NavPoint ExportWizFolderDocuments(WizFolder wizfolder, string path, NavPoint nav, bool isroot, Document epub, int flags) { string strBy = cbBy.SelectedItem as string; string strSort = cbSort.SelectedItem as string; if (strBy == String.Empty || strSort == string.Empty) { strBy = "Title"; strSort = "Asc"; } WizDocumentCollection documents = wizfolder.GetDocuments3(0, strBy, strSort); //将文件导出为ziw,同时生成本节点的索引 var categorycontent = new StringBuilder(25); string categoryhtml = File.ReadAllText(Path.Combine(Application.StartupPath, "page.xhtml")); categorycontent.Append("<h1>目录</h1>\r\n"); categorycontent.Append("<h1>目录</h1>\r\n"); string folderindexname = getFolderFileName(wizfolder.Name) + ".xhtml"; NavPoint contentNav = null; if (nav == null)//根节点创建 { if (isroot) { folderindexname = "root.xhtml"; epub.AddNavPoint("目录", folderindexname, _playorder++);//创建节点 contentNav = null; } else { contentNav = epub.AddNavPoint(wizfolder.Name, folderindexname, _playorder++);//创建节点 } } else//子节点创建目录 { contentNav = nav.AddNavPoint(wizfolder.Name, folderindexname, _playorder++);//创建节点 } //第一次循环,生成catelog.html Hashtable hsTemp = new Hashtable(); AddLog("正在生成目录:" + wizfolder.Name); foreach (WizDocument objDoc in documents) { string name = objDoc.Title; string fileindex = getDocumentFileName(name); string filename = fileindex + ".xhtml"; hsTemp.Add(fileindex, objDoc);//加入到临时hashmap中 StringBuilder stringBuilder = categorycontent.AppendFormat("<div><a href=\"{0}\">{1}</a></div>\r\n", filename, name); } categoryhtml = categoryhtml.Replace("%%TITLE%%", wizfolder.Name); categoryhtml = categoryhtml.Replace("%%CONTENT%%", categorycontent.ToString()); epub.AddXhtmlData(folderindexname, categoryhtml);//写入content //需要对key先排序,fileindex定长,根据asc排序 ArrayList keylist= new ArrayList(hsTemp.Keys); keylist.Sort(); //第二次循环再加入数据 foreach (object key in keylist) { string fileindex = key as string; WizDocument objDoc = hsTemp[key] as WizDocument; string name = objDoc.Title; string filename = fileindex + ".xhtml"; string filefullname = Path.Combine(path, filename); AddLog("正在处理:" + wizfolder.Location + name); try { objDoc.SaveToHtml(filefullname, flags); html2xhtmlWithCss(filefullname);//转换为xhtml格式 epub.AddXhtmlFile(filefullname, filename);//写入到epub中 //加入到content中 //加入所有资源文件 string respath = fileindex + "_files"; string resfullpath = Path.Combine(path, respath); if (Directory.Exists(resfullpath))//不存在则不处理子目录 { //foreach(FileInfo imgfile in GetFiles(resfullpath, tbImageRule.Text)) //{ // epub.AddImageFile(imgfile.FullName, Path.Combine(respath, imgfile.Name)); //} //foreach(FileInfo cssFile in GetFiles(resfullpath, ".css;")) //{ // epub.AddStylesheetFile(cssFile.FullName, Path.Combine(respath, cssFile.Name)); //} Parallel.ForEach(GetFiles(resfullpath, tbImageRule.Text), imgfile => epub.AddImageFile(imgfile.FullName, Path.Combine(respath, imgfile.Name))); Parallel.ForEach(GetFiles(resfullpath, ".css;"), cssFile => epub.AddStylesheetFile(cssFile.FullName, Path.Combine(respath, cssFile.Name))); } //加入到navpoint中 if (isroot)//如果是根目录,则加入到根目录 { epub.AddNavPoint(name, filename, _playorder++); } else { contentNav.AddNavPoint(name, filename, _playorder++); } } catch (Exception e) { AddLog("导出html失败:" + e.Message); } IncrementProgress(); } return contentNav;//返回nav节点 //categoryhtml //生成folder的索引文件 //把子文档索引写进去 }