Exemple #1
0
        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");
        }
Exemple #2
0
        /*
         * 执行按钮
         */
        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("完成");
        }
Exemple #3
0
        /*
         * 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的索引文件
            //把子文档索引写进去
        }