/* ----------------------------------------------------------------- */ /// /// GetErrorMessage /// /// <summary> /// エラーメッセージを取得します。 /// </summary> /// /* ----------------------------------------------------------------- */ private string GetErrorMessage(CubePdf.Converter converter) { var dest = string.Empty; foreach (var message in converter.Messages) { if (message.Level == Message.Levels.Fatal || message.Level == Message.Levels.Error || message.Level == Message.Levels.Warn) dest = message.Value; System.Diagnostics.Trace.WriteLine(message.ToString()); } return dest; }
/* ----------------------------------------------------------------- */ /// /// LoadUserSetting /// /// <summary> /// レジストリからユーザ設定をロードします。 /// </summary> /// /* ----------------------------------------------------------------- */ private static void LoadUserSetting(UserSetting setting, CubePdf.Settings.CommandLine cmdline) { if (cmdline.Options.ContainsKey("Em")) { setting.Load(cmdline.Options["UserName"]); setting.EmergencyMode = true; setting.PostProcess = Parameter.PostProcesses.OpenFolder; } else setting.Load(); }
/* ----------------------------------------------------------------- */ /// /// AssertPdf /// /// <summary> /// 生成された PDF が有効なものかどうかをチェックします。 /// </summary> /// /* ----------------------------------------------------------------- */ private void AssertPdf(CubePdf.UserSetting setting) { try { var password = !string.IsNullOrEmpty(setting.Permission.Password) ? setting.Permission.Password : !string.IsNullOrEmpty(setting.Password) ? setting.Password : string.Empty; using (var reader = new CubePdf.Editing.DocumentReader(setting.OutputPath, password)) { Assert.AreEqual(1, reader.Metadata.Version.Major); Assert.AreEqual(GetMinorVersion(setting.PDFVersion), reader.Metadata.Version.Minor); Assert.AreEqual(setting.Document.Title, reader.Metadata.Title); Assert.AreEqual(setting.Document.Author, reader.Metadata.Author); Assert.AreEqual(setting.Document.Subtitle, reader.Metadata.Subtitle); Assert.AreEqual(setting.Document.Keyword, reader.Metadata.Keywords); Assert.AreEqual(setting.Permission.Password, reader.Encryption.OwnerPassword); if (reader.Encryption.Method != Data.EncryptionMethod.Aes256) { // AES256 の場合、ユーザパスワードを取得できないのでスキップ Assert.AreEqual(setting.Password, reader.Encryption.UserPassword); } } } catch (Exception err) { Assert.Fail(err.ToString()); } }
/* ----------------------------------------------------------------- */ /// /// Save /// /// <summary> /// 設定情報を CubePdf.Settings.Document オブジェクトに保存します。 /// </summary> /// /// <remarks> /// アップデートをチェックする項目のみ、チェックの有無にしたがって /// スタートアップに関係するレジストリの内容を変更しなければならない /// ので、該当する処理もこのメソッドで同時に行っています。 /// </remarks> /// /* ----------------------------------------------------------------- */ private void Save(CubePdf.Settings.Document document) { // パス関連 document.Root.Add(new CubePdf.Settings.Node(_RegLastAccess, _output)); document.Root.Add(new CubePdf.Settings.Node(_RegLastInputAccess, _input)); document.Root.Add(new CubePdf.Settings.Node(_RegUserProgram, _program)); document.Root.Add(new CubePdf.Settings.Node(_RegUserArguments, _argument)); // チェックボックスのフラグ関連 int flag = _rotation ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegPageRotation, flag)); flag = _embed ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegEmbedFont, flag)); flag = _grayscale ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegGrayscale, flag)); flag = _web ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegWebOptimize, flag)); flag = _update ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegCheckUpdate, flag)); flag = _advance ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegAdvancedMode, flag)); flag = _visible ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegVisible, flag)); flag = _selectable ? 1 : 0; document.Root.Add(new CubePdf.Settings.Node(_RegSelectInput, flag)); // コンボボックスのインデックス関連 document.Root.Add(new CubePdf.Settings.Node(_RegFileType, (int)_type)); document.Root.Add(new CubePdf.Settings.Node(_RegPdfVersion, (int)_pdfver)); document.Root.Add(new CubePdf.Settings.Node(_RegResolution, (int)_resolution)); document.Root.Add(new CubePdf.Settings.Node(_RegExistedFile, (int)_exist)); document.Root.Add(new CubePdf.Settings.Node(_RegPostProcess, (int)_postproc)); document.Root.Add(new CubePdf.Settings.Node(_RegDownSampling, (int)_downsampling)); document.Root.Add(new CubePdf.Settings.Node(_RegImageFilter, (int)_filter)); document.Root.Add(new CubePdf.Settings.Node(_RegSaveSetting, (int)_save)); // アップデートプログラムの登録および削除 using (var startup = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run")) { if (_update) { string value = startup.GetValue(_RegUpdateProgram) as string; if (startup.GetValue(_RegUpdateProgram) == null && _install.Length > 0) { startup.SetValue(_RegUpdateProgram, '"' + _install + '\\' + _RegUpdateProgram + ".exe\""); } } else startup.DeleteValue(_RegUpdateProgram, false); } }
/* ----------------------------------------------------------------- */ /// /// SetupUserSetting /// /// <summary> /// プログラムに指定された引数等を用いて、UserSetting オブジェクトを /// 初期化します。 /// </summary> /// /* ----------------------------------------------------------------- */ private static void SetupUserSetting(UserSetting setting, CubePdf.Settings.CommandLine cmdline) { var docname = cmdline.Options.ContainsKey("DocumentName") ? cmdline.Options["DocumentName"] : ""; bool is_config = false; try { if (!string.IsNullOrEmpty(docname) && IoEx.Path.GetExtension(docname) == setting.Extension && IoEx.File.Exists(docname)) { is_config = true; } } catch (Exception err) { // docname に Windows のファイル名に使用できない記号が含まれる // 場合に例外が送出されるので、その対策。 CubePdf.Message.Trace(err.ToString()); is_config = false; } if (is_config) setting.LoadXml(docname); else { LoadUserSetting(setting, cmdline); var filename = DocumentName.CreateFileName(docname); if (filename != null) { string ext = Parameter.GetExtension((Parameter.FileTypes)setting.FileType); filename = IoEx.Path.ChangeExtension(filename, ext); string dir = ""; if (setting.OutputPath == String.Empty) dir = setting.LibPath; else { dir = (IoEx.Directory.Exists(setting.OutputPath)) ? setting.OutputPath : IoEx.Path.GetDirectoryName(setting.OutputPath); } setting.OutputPath = dir + '\\' + filename; CubePdf.Message.Debug(setting.OutputPath); } } setting.UserName = cmdline.Options.ContainsKey("UserName") ? cmdline.Options["UserName"] : ""; setting.InputPath = cmdline.Options.ContainsKey("InputFile") ? cmdline.Options["InputFile"] : ""; setting.DeleteOnClose = cmdline.Options.ContainsKey("DeleteOnClose"); if (IoEx.Directory.Exists(setting.LibPath)) System.Environment.SetEnvironmentVariable("TEMP", setting.LibPath, EnvironmentVariableTarget.Process); else CubePdf.Message.Trace("LibPath Not Found"); }
/* ----------------------------------------------------------------- */ /// /// LoadPaths /// /// <summary> /// CubePdf.Settings.Document オブジェクトからパス関連の情報を /// 抽出して、対応する変数にロードします。 /// </summary> /// /* ----------------------------------------------------------------- */ private void LoadPaths(CubePdf.Settings.Document document) { var desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); var output = document.Root.Find(_RegLastAccess); if (output != null) _output = output.GetValue(_output); if (string.IsNullOrEmpty(_output)) _output = desktop; var input = document.Root.Find(_RegLastInputAccess); if (input != null) _input = input.GetValue(_input); if (string.IsNullOrEmpty(_input)) _input = desktop; var program = document.Root.Find(_RegUserProgram); if (program != null) _program = program.GetValue(_program); var argument = document.Root.Find(_RegUserArguments); if (argument != null) _argument = argument.GetValue(_argument); }
/* ----------------------------------------------------------------- */ /// /// LoadIndices /// /// <summary> /// CubePdf.Settings.Document オブジェクトから CubePDF メイン画面で /// 表示されているコンボボックスのインデックス関連の情報を抽出して、 /// 対応する変数にロードします。 /// </summary> /// /* ----------------------------------------------------------------- */ private void LoadIndices(CubePdf.Settings.Document document) { var filetype = document.Root.Find(_RegFileType); if (filetype != null) { foreach (int item in Enum.GetValues(typeof(Parameter.FileTypes))) { if (item == (int)filetype.Value) { _type = (Parameter.FileTypes)filetype.Value; break; } } } var pdfversion = document.Root.Find(_RegPdfVersion); if (pdfversion != null) { foreach (int item in Enum.GetValues(typeof(Parameter.PdfVersions))) { if (item == (int)pdfversion.Value) { _pdfver = (Parameter.PdfVersions)pdfversion.Value; break; } } } var resolution = document.Root.Find(_RegResolution); if (resolution != null) { foreach (int item in Enum.GetValues(typeof(Parameter.Resolutions))) { if (item == (int)resolution.Value) { _resolution = (Parameter.Resolutions)resolution.Value; break; } } } var exist = document.Root.Find(_RegExistedFile); if (exist != null) { foreach (int item in Enum.GetValues(typeof(Parameter.ExistedFiles))) { if (item == (int)exist.Value) { _exist = (Parameter.ExistedFiles)exist.Value; break; } } } var postproc = document.Root.Find(_RegPostProcess); if (postproc != null) { foreach (int item in Enum.GetValues(typeof(Parameter.PostProcesses))) { if (item == (int)postproc.Value) { _postproc = (Parameter.PostProcesses)postproc.Value; break; } } } var downsampling = document.Root.Find(_RegDownSampling); if (downsampling != null) { foreach (int item in Enum.GetValues(typeof(Parameter.DownSamplings))) { if (item == (int)downsampling.Value) { _downsampling = (Parameter.DownSamplings)downsampling.Value; break; } } } var filter = document.Root.Find(_RegImageFilter); if (filter != null) { foreach (int item in Enum.GetValues(typeof(Parameter.ImageFilters))) { if (item == (int)filter.Value) { _filter = (Parameter.ImageFilters)filter.Value; break; } } } var save = document.Root.Find(_RegSaveSetting); if (save != null) { foreach (int item in Enum.GetValues(typeof(Parameter.SaveSettings))) { if (item == (int)save.Value) { _save = (Parameter.SaveSettings)save.Value; break; } } } }
/* ----------------------------------------------------------------- */ /// /// LoadFlags /// /// <summary> /// CubePdf.Settings.Document オブジェクトから CubePDF メイン画面で /// 表示されているチェックボックスのフラグ関連の情報を抽出して、 /// 対応する変数にロードします。 /// </summary> /// /* ----------------------------------------------------------------- */ private void LoadFlags(CubePdf.Settings.Document document) { var rotation = document.Root.Find(_RegPageRotation); if (rotation != null) _rotation = ((int)rotation.Value != 0); var embed = document.Root.Find(_RegEmbedFont); if (embed != null) _embed = ((int)embed.Value != 0); var grayscale = document.Root.Find(_RegGrayscale); if (grayscale != null) _grayscale = ((int)grayscale.Value != 0); var web = document.Root.Find(_RegWebOptimize); if (web != null) _web = ((int)web.Value != 0); var update = document.Root.Find(_RegCheckUpdate); if (update != null) _update = ((int)update.Value != 0); var advance = document.Root.Find(_RegAdvancedMode); if (advance != null) _advance = ((int)advance.Value != 0); var visible = document.Root.Find(_RegVisible); if (visible != null) _visible = ((int)visible.Value != 0); var selectable = document.Root.Find(_RegSelectInput); if (selectable != null) _selectable = ((int)selectable.Value != 0); }
/* ----------------------------------------------------------------- */ /// /// Load /// /// <summary> /// CubePdf.Settings.Document オブジェクトから必要な情報をロード /// します。 /// </summary> /// /* ----------------------------------------------------------------- */ private void Load(CubePdf.Settings.Document document) { LoadPaths(document); LoadFlags(document); LoadIndices(document); }
/* ----------------------------------------------------------------- */ /// /// ShowMessage /// /// <summary> /// メッセージを表示します。 /// </summary> /// /* ----------------------------------------------------------------- */ private DialogResult ShowMessage(CubePdf.Message message, MessageBoxButtons button = MessageBoxButtons.OK) { var title = Properties.Resources.InfoTitle; var icon = MessageBoxIcon.Information; switch (message.Level) { case Message.Levels.Fatal: case Message.Levels.Error: title = Properties.Resources.ErrorTitle; icon = MessageBoxIcon.Error; break; case Message.Levels.Warn: title = Properties.Resources.WarningTitle; icon = MessageBoxIcon.Warning; break; default: break; } return MessageBox.Show(message.Value, title, button, icon); }