//EPUBファイルがドロップされたらテキストボックスに表示し、読み込む
        private void OnDrop(object sender, DragEventArgs e)
        {
            string[] files = e.Data.GetData(DataFormats.FileDrop) as string[];
            if (files != null)
            {
                var textBox  = sender as TextBox;
                var fileName = files[0];

                //拡張子がepubでなければエラーメッセージを出して終了する
                if (Path.GetExtension(fileName).ToLower().Equals(".epub") != true)
                {
                    MessageBox.Show("EPUBファイルではありません");
                    return;
                }

                //Epubファイルなので読み込みを行う
                epubFile     = fileName;                                  //対象ファイルとして設定する
                textBox.Text = files[0];                                  //TextBoxに表示する

                tempDir = Unpacker.UnpackEpubToTemp(epubFile);            //Epubをテンポラリフォルダに解凍する
                tempDirsToDelete.Add(tempDir);                            //削除対象に追加

                var pacDoc    = ContainerXML.GetPackageDocument(tempDir); //パッケージ文書を取得する
                var textItems = PackageDocument.GetTextItems(pacDoc);     //Epub内のテキストファイルを取得する
                textItems = textItems.OrderBy(i => i).ToList();           //ソートする

                //ファイルをリストボックスに追加する
                fileLists.Items.Clear();                //現在のアイテムを削除する
                foreach (var item in textItems)
                {
                    fileLists.Items.Add(item.Remove(0, tempDir.Length + 1));   //相対パス部分だけを表示する
                }

                ePubGenBtn.IsEnabled = true;    //Epub生成ボタンを動作可能にする
            }
        }
예제 #2
0
        //テンプレートからEpubファイルを作成する
        public bool GenerateEpubDocument()
        {
            //ファイルの上書きを確認する
            var epubFileName = GetEpubFileName();

            if (File.Exists(epubFileName))
            {
                var overwrite = MessageBox.Show("ファイルを上書きしますか?", "Nov2Epub", MessageBoxButton.OKCancel);
                if (overwrite == MessageBoxResult.OK)
                {
                    File.Delete(epubFileName);
                }
                else //上書きしないならそのまま終了
                {
                    return(false);
                }
            }
            //テンプレートファイルをテンポラリディレクトリにコピーする
            var templateDir = GetTemplateDirectory();                                                            //テンプレートディレクトリ
            var tempDir     = Path.GetTempPath();                                                                //テンポラリディレクトリ
            var epubDirName = Path.Combine(tempDir, Path.GetFileNameWithoutExtension(Path.GetRandomFileName())); //ランダム

            CopyDirectory(templateDir, epubDirName);                                                             //コピーする

            //パッケージドキュメントを更新する
            var packFile = ContainerXML.GetPackageDocument(epubDirName);

            PackageDocument.WriteMetaData(packFile, metaData);

            //表紙ファイルを更新する
            var coverImageDst = Path.Combine(epubDirName, @"OEBPS\Images\Cover.JPG");

            File.Copy(coverImageFileName, coverImageDst, true);

            //扉ページを更新する
            var titlePageDst = Path.Combine(epubDirName, @"OEBPS\Text\Title.xhtml");

            InfoPage.UpdateTitlePage(titlePageDst, metaData);

            //テキストを更新する
            var textTemplateFile = Path.Combine(epubDirName, @"OEBPS\Text\Text.xhtml");
            var headerAnchors    = TextConverter.ConvertText(novelFileName, textTemplateFile, opt);

            //本文の縦書き/横書きをCSSに設定する
            var textCssTemplateFile = Path.Combine(epubDirName, @"OEBPS\Styles\Text.css");

            TextStyleSheet.SetOrientationStyle(textCssTemplateFile, metaData.isVertical);

            //目次の縦書き/横書きをCSSに設定する
            var navCssTemplateFile = Path.Combine(epubDirName, @"OEBPS\Styles\Nav.css");

            TextStyleSheet.SetOrientationStyle(navCssTemplateFile, metaData.isVertical);


            //ナビゲーションドキュメントを作成する
            var navFileName = Path.Combine(epubDirName, @"OEBPS\Text\nav.xhtml");

            NavigationDocument.WriteNavigationDocument(navFileName, headerAnchors);

            //奥付ページを更新する
            var ColophonPage = Path.Combine(epubDirName, @"OEBPS\Text\Colophon.xhtml");

            InfoPage.UpdateTitlePage(ColophonPage, metaData);

            //不要ファイルを削除する
            var thumbsFile = Path.Combine(epubDirName, @"OEBPS\Images\Thumbs.db");

            if (File.Exists(thumbsFile) == true)
            {
                File.Delete(thumbsFile);
            }

            //EPubファイルを作成する
            Archiver.ArchiveEpubWithPostProcess(epubDirName, epubFileName);

            //テンポラリディレクトリを削除する
            Directory.Delete(epubDirName, true);

            //Identifierを更新する
            IdentifierDictionary.SaveIdentifierDictionary();

            return(true);
        }