//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生成ボタンを動作可能にする } }
//テンプレートから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); }