示例#1
0
        /* ----------------------------------------------------------------- */
        ///
        /// ConfigureCommonImage
        ///
        /// <summary>
        /// 画像に関わるオプションを設定します。
        /// </summary>
        ///
        /// <remarks>
        /// 全てのファイルタイプ共通の設定です。
        /// </remarks>
        ///
        /* ----------------------------------------------------------------- */
        private void ConfigureCommonImage(UserSetting setting, Ghostscript.Converter gs)
        {
            gs.AddOption("ColorConversionStrategy", setting.Grayscale ? "/Gray" : "/RGB");
            gs.AddOption("DownsampleColorImages", true);
            gs.AddOption("DownsampleGrayImages", true);
            gs.AddOption("DownsampleMonoImages", true);

            // 解像度
            var resolution = Parameter.ToValue(setting.Resolution);
            var mono       = resolution < 300 ? 300 : 1200;

            gs.AddOption("ColorImageResolution", resolution);
            gs.AddOption("GrayImageResolution", resolution);
            gs.AddOption("MonoImageResolution", mono);

            // 画像圧縮
            gs.AddOption("AutoFilterColorImages", false);
            gs.AddOption("AutoFilterGrayImages", false);
            gs.AddOption("AutoFilterMonoImages", false);
            gs.AddOption("ColorImageFilter", "/" + setting.ImageFilter.ToString());
            gs.AddOption("GrayImageFilter", "/" + setting.ImageFilter.ToString());
            gs.AddOption("MonoImageFilter", "/" + setting.ImageFilter.ToString());

            // ダウンサンプリング
            if (setting.DownSampling != Parameter.DownSamplings.None)
            {
                gs.AddOption("ColorImageDownsampleType", "/" + setting.DownSampling.ToString());
                gs.AddOption("GrayImageDownsampleType", "/" + setting.DownSampling.ToString());
                gs.AddOption("MonoImageDownsampleType", "/" + setting.DownSampling.ToString());
            }
        }
示例#2
0
        /* ----------------------------------------------------------------- */
        ///
        /// ConfigImageOperations
        ///
        /// <summary>
        /// 画像に関わるオプションを設定します。
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        public void ConfigImageOperations(UserSetting setting, Ghostscript.Converter gs)
        {
            // 解像度
            var resolution = Parameter.ResolutionValue(setting.Resolution);

            gs.AddOption("ColorImageResolution", resolution);
            gs.AddOption("GrayImageResolution", resolution);
            gs.AddOption("MonoImageResolution", (resolution < 300) ? 300 : 1200);

            // 画像圧縮
            gs.AddOption("AutoFilterColorImages", false);
            gs.AddOption("AutoFilterGrayImages", false);
            gs.AddOption("AutoFilterMonoImages", false);
            gs.AddOption("ColorImageFilter", "/" + setting.ImageFilter.ToString());
            gs.AddOption("GrayImageFilter", "/" + setting.ImageFilter.ToString());
            gs.AddOption("MonoImageFilter", "/" + setting.ImageFilter.ToString());

            // ダウンサンプリング
            if (setting.DownSampling == Parameter.DownSamplings.None)
            {
                gs.AddOption("DownsampleColorImages", false);
                gs.AddOption("DownsampleGrayImages", false);
                gs.AddOption("DownsampleMonoImages", false);
            }
            else
            {
                gs.AddOption("DownsampleColorImages", true);
                gs.AddOption("DownsampleGrayImages", true);
                gs.AddOption("DownsampleMonoImages", true);
                gs.AddOption("ColorImageDownsampleType", "/" + setting.DownSampling.ToString());
                gs.AddOption("GrayImageDownsampleType", "/" + setting.DownSampling.ToString());
                gs.AddOption("MonoImageDownsampleType", "/" + setting.DownSampling.ToString());
            }
        }
示例#3
0
        /* ----------------------------------------------------------------- */
        ///
        /// Configure
        ///
        /// <summary>
        /// Ghostscript オブジェクトを生成し、必要な設定を行います。
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        private Ghostscript.Converter Configure(UserSetting setting, string src, string dest)
        {
            var gs = new Ghostscript.Converter(_messages);

            if (!string.IsNullOrEmpty(setting.LibPath))
            {
                gs.AddInclude(IoEx.Path.Combine(setting.LibPath, "lib"));
            }
            gs.Device     = Parameter.GetDevice(setting.FileType, setting.Grayscale);
            gs.Resolution = Parameter.ToValue(setting.Resolution);
            if (setting.Orientation == Parameter.Orientations.Auto)
            {
                gs.AutoRotatePages = true;
            }
            else
            {
                gs.Orientation = (int)setting.Orientation;
            }

            ConfigureCommonImage(setting, gs);
            if (Parameter.IsImageType(setting.FileType))
            {
                ConfigureBitmap(setting, gs);
            }
            else
            {
                ConfigureDocument(setting, gs);
            }

            gs.AddSource(src);
            gs.Destination = dest;

            return(gs);
        }
示例#4
0
        /* ----------------------------------------------------------------- */
        ///
        /// ConfigPdf
        ///
        /// <summary>
        /// PDF ファイルに変換するために必要なオプションを設定します。
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        public void ConfigPdf(UserSetting setting, Ghostscript.Converter gs)
        {
            gs.AddOption("CompatibilityLevel", Parameter.PdfVersionValue(setting.PDFVersion));
            gs.AddOption("UseFlateCompression", true);

            if (setting.PDFVersion == Parameter.PdfVersions.VerPDFA)
            {
                this.ConfigPdfA(setting, gs);
            }
            else if (setting.PDFVersion == Parameter.PdfVersions.VerPDFX)
            {
                this.ConfigPdfX(setting, gs);
            }
            else
            {
                if (setting.EmbedFont)
                {
                    gs.AddOption("EmbedAllFonts", true);
                    gs.AddOption("SubsetFonts", true);
                }
                else
                {
                    gs.AddOption("EmbedAllFonts", false);
                }

                if (setting.Grayscale)
                {
                    gs.AddOption("ProcessColorModel", "/DeviceGray");
                    gs.AddOption("ColorConversionStrategy", "/Gray");
                }
            }
        }
示例#5
0
 /* ----------------------------------------------------------------- */
 ///
 /// ConfigurePdfX
 ///
 /// <summary>
 /// PDF/X 形式に変換するのに必要なオプションを設定します。
 /// </summary>
 ///
 /// <remarks>
 /// PDF/X(1-a) の主な要求項目は以下の通り:
 ///
 /// - すべてのイメージのカラーは CMYKか 特色
 /// - 基本 14 フォントを含む全てのフォントの埋め込み
 /// </remarks>
 ///
 /* ----------------------------------------------------------------- */
 private void ConfigurePdfX(UserSetting setting, Ghostscript.Converter gs)
 {
     gs.AddOption("PDFX");
     gs.AddOption("EmbedAllFonts", true);
     gs.AddOption("SubsetFonts", true);
     if (!setting.Grayscale)
     {
         gs.AddOption("ColorConversionStrategy", "/CMYK");
     }
 }
示例#6
0
 /* ----------------------------------------------------------------- */
 ///
 /// ConfigureDocument
 ///
 /// <summary>
 /// PDF, PostScript, EPS のファイルに変換するために必要なオプションを
 /// 設定します。
 /// </summary>
 ///
 /* ----------------------------------------------------------------- */
 private void ConfigureDocument(UserSetting setting, Ghostscript.Converter gs)
 {
     gs.AddOption("EmbedAllFonts", setting.EmbedFont);
     if (setting.EmbedFont)
     {
         gs.AddOption("SubsetFonts", true);
     }
     if (setting.FileType == Parameter.FileTypes.PDF)
     {
         ConfigurePdf(setting, gs);
     }
 }
示例#7
0
 /* ----------------------------------------------------------------- */
 ///
 /// ConfigPdfA
 ///
 /// <summary>
 /// PDF/A 形式に変換するのに必要なオプションを設定します。
 /// </summary>
 ///
 /// <remarks>
 /// PDF/A の主な要求項目は以下の通り:
 ///
 /// - デバイス独立カラーまたは PDF/A-1 OutputIntent 指定でカラーの
 ///   再現性を保証する
 /// - 基本 14 フォントを含む全てのフォントの埋め込み
 /// - PDF/Aリーダは,システムのフォントでなく埋め込みフォントで
 ///   表示すること
 /// - XMPメタデータの埋め込み
 /// - タグ付きPDFとする(PDF/A-1aのみ)
 /// </remarks>
 ///
 /* ----------------------------------------------------------------- */
 public void ConfigPdfA(UserSetting setting, Ghostscript.Converter gs)
 {
     gs.AddOption("PDFA");
     gs.AddOption("EmbedAllFonts", true);
     gs.AddOption("SubsetFonts", true);
     if (setting.Grayscale)
     {
         gs.AddOption("ProcessColorModel", "/DeviceGray");
         gs.AddOption("ColorConversionStrategy", "/Gray");
     }
     gs.AddOption("UseCIEColor");
 }
示例#8
0
 /* ----------------------------------------------------------------- */
 ///
 /// ConfigurePdf
 ///
 /// <summary>
 /// PDF ファイルに変換するために必要なオプションを設定します。
 /// </summary>
 ///
 /* ----------------------------------------------------------------- */
 private void ConfigurePdf(UserSetting setting, Ghostscript.Converter gs)
 {
     gs.AddOption("CompatibilityLevel", Parameter.ToValue(setting.PDFVersion));
     gs.AddOption("UseFlateCompression", true);
     if (setting.PDFVersion == Parameter.PdfVersions.VerPDFA)
     {
         ConfigurePdfA(setting, gs);
     }
     if (setting.PDFVersion == Parameter.PdfVersions.VerPDFX)
     {
         ConfigurePdfX(setting, gs);
     }
 }
示例#9
0
 /* ----------------------------------------------------------------- */
 ///
 /// ConfigDocument
 ///
 /// <summary>
 /// pdf, ps, eps, svg のベクター系ファイルに変換するために必要な
 /// オプションを設定します。
 /// </summary>
 ///
 /* ----------------------------------------------------------------- */
 public void ConfigDocument(UserSetting setting, Ghostscript.Converter gs)
 {
     if (setting.FileType == Parameter.FileTypes.PDF)
     {
         this.ConfigPdf(setting, gs);
     }
     else
     {
         if (setting.EmbedFont)
         {
             gs.AddOption("EmbedAllFonts", true);
             gs.AddOption("SubsetFonts", true);
         }
         else
         {
             gs.AddOption("EmbedAllFonts", false);
         }
     }
 }
示例#10
0
 /* ----------------------------------------------------------------- */
 ///
 /// ConfigurePdfA
 ///
 /// <summary>
 /// PDF/A 形式に変換するのに必要なオプションを設定します。
 /// </summary>
 ///
 /// <remarks>
 /// PDF/A の主な要求項目は以下の通り:
 ///
 /// - デバイス独立カラーまたは PDF/A-1 OutputIntent 指定でカラーの
 ///   再現性を保証する
 /// - 基本 14 フォントを含む全てのフォントの埋め込み
 /// - PDF/Aリーダは,システムのフォントでなく埋め込みフォントで
 ///   表示すること
 /// - XMPメタデータの埋め込み
 /// - タグ付きPDFとする(PDF/A-1aのみ)
 /// </remarks>
 ///
 /* ----------------------------------------------------------------- */
 private void ConfigurePdfA(UserSetting setting, Ghostscript.Converter gs)
 {
     gs.AddOption("PDFA");
     gs.AddOption("EmbedAllFonts", true);
     gs.AddOption("SubsetFonts", true);
 }
示例#11
0
 /* ----------------------------------------------------------------- */
 ///
 /// ConfigureBitmap
 ///
 /// <summary>
 /// BMP, PNG, JPEG のビットマップ系ファイルに変換するために必要な
 /// オプションを設定します。
 /// </summary>
 ///
 /* ----------------------------------------------------------------- */
 private void ConfigureBitmap(UserSetting setting, Ghostscript.Converter gs)
 {
     gs.AddOption("GraphicsAlphaBits", 4);
     gs.AddOption("TextAlphaBits", 4);
 }
示例#12
0
        /* ----------------------------------------------------------------- */
        //  UserSetting の値を基に各種設定を行う
        /* ----------------------------------------------------------------- */
        #region Configuration

        /* ----------------------------------------------------------------- */
        ///
        /// ConfigImage
        ///
        /// <summary>
        /// bmp, png, jpeg, gif のビットマップ系ファイルに変換するために
        /// 必要なオプションを設定します。
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        public void ConfigImage(UserSetting setting, Ghostscript.Converter gs)
        {
            gs.AddOption("GraphicsAlphaBits", 4);
            gs.AddOption("TextAlphaBits", 4);
        }
示例#13
0
        /* ----------------------------------------------------------------- */
        ///
        /// Run
        ///
        /// <summary>
        /// ファイル変換処理を実行します。
        /// </summary>
        ///
        /// <remarks>
        /// 文書プロパティ、パスワード関連とファイル結合は iTextSharp
        /// を利用します。出力パスに指定されたファイルが既に存在する場合、
        /// ExistedFile プロパティの指定(上書き、先頭に結合、末尾に結合、
        /// リネーム)に従います。
        /// </remarks>
        ///
        /* ----------------------------------------------------------------- */
        public bool Run(UserSetting setting)
        {
            // Ghostscript に指定するパスに日本語が入るとエラーが発生する
            // 場合があるので,作業ディレクトリを変更する.
            this.CreateWorkingDirectory(setting);

            Ghostscript.Converter gs = new Ghostscript.Converter(_messages);
            gs.Device = Parameter.Device(setting.FileType, setting.Grayscale);
            bool status = true;

            try {
                gs.AddInclude(setting.LibPath + @"\lib");
                gs.PageRotation = setting.PageRotation;
                gs.Resolution   = Parameter.ResolutionValue(setting.Resolution);

                this.ConfigImageOperations(setting, gs);
                if (Parameter.IsImageType(setting.FileType))
                {
                    this.ConfigImage(setting, gs);
                }
                else
                {
                    this.ConfigDocument(setting, gs);
                }
                this.EscapeExistedFile(setting);

                gs.AddSource(setting.InputPath);
                gs.Destination = setting.OutputPath;
                gs.Run();

                if (setting.FileType == Parameter.FileTypes.PDF)
                {
                    PdfModifier modifier = new PdfModifier(_escaped, _messages);
                    status = modifier.Run(setting);
                    _messages.Add(new Message(Message.Levels.Info, String.Format("CubePdf.PDFModifier.Run: {0}", status.ToString())));
                }

                if (status)
                {
                    PostProcess postproc = new PostProcess(_messages);
                    status = postproc.Run(setting);
                    _messages.Add(new Message(Message.Levels.Info, String.Format("CubePdf.PostProcess.Run: {0}", status.ToString())));
                }
            }
            catch (Exception err) {
                _messages.Add(new Message(Message.Levels.Error, err));
                _messages.Add(new Message(Message.Levels.Debug, err));
                status = false;
            }
            finally {
                if (Directory.Exists(Utility.WorkingDirectory))
                {
                    Directory.Delete(Utility.WorkingDirectory, true);
                }
                if (setting.DeleteOnClose && File.Exists(setting.InputPath))
                {
                    _messages.Add(new Message(Message.Levels.Debug, String.Format("{0}: delete on close", setting.InputPath)));
                    File.Delete(setting.InputPath);
                }
            }

            return(status);
        }