8.Ghost Script Sharp (PDF→画像変換ライブラリ)

PDF→画像変換ライブラリ(Ghost Script Sharp)について説明していきます。

アグリモの製品では、ひかりFAX電話CTIと日報検索データベースで使用しています。

用途としては、顧客(物件)登録画面で、読み込んだPDFファイルを添付する際にJPGのサムネイル画像を作成し、画面に貼り付けています。

 

1.新規にソリューションを作成します。

2.パッケージマネージャーコンソールで、「Install-Package GhostScriptSharp」と入力してEnterキーを押下します。

3.プロジェクトの参照にDLLが追加されます。

 

4.以下は使用サンプルソースです。(ひかりFAX電話CTIから抜粋しています。)

private void btn_pdf_insert_1_Click(object sender, EventArgs e)
{
    try
    {
        if (this.pic_pdf_1.Image != null)
        {
            if (Logs_MessageBox.Show("既にPDFが追加されていますが、\r\n追加してもよろしいですか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
            {
                return;
            }
        }

        //オープンファイルダイアログ
        OpenFileDialog f = new OpenFileDialog();
        f.FileName = "";
        f.Filter = "PDFファイル|*.pdf|すべてのファイル|*.*";
        f.Title = "PDFファイルを指定してください。";
        f.CheckPathExists = true;
        f.RestoreDirectory = true;

        if (f.ShowDialog() != DialogResult.OK)
        {
            f.Dispose();

            //元に戻す
            Cursor.Current = Cursors.Default;
            return;
        }

        string filePath = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\AGRIMO.JP\\ひかりFAX電話CTI\\";
        string file_name = filePath + "pdf_master_1" + System.IO.Path.GetExtension(f.FileName);

        //PDFをコピーする
        File.Copy(f.FileName, file_name, true);

        f.Dispose();

        this.txt_pdf_file_name_1.Text = Path.GetFileName(file_name);
        pdf_path_1 = file_name;

        //カレントディレクトリを記憶
        string curr = System.Environment.CurrentDirectory;
        //カレントディレクトリをデータフォルダへ変更
        System.Environment.CurrentDirectory = @filePath;
        //ファイルコピー
        File.Copy(f.FileName, "pdf_master_1.pdf", true);
        //PDFの1枚目のイメージを抽出
        GhostscriptWrapper.GeneratePageThumb("pdf_master_1.pdf", "pdf_master_1.jpg", 1, 100, 100);
        //PictureBoxにイメージを貼り付け
        this.pic_pdf_1.ImageLocation = file_name.Replace(".pdf", ".jpg");
        //カレントディレクトリを元に戻す
        System.Environment.CurrentDirectory = curr;
    }
    catch (Exception ex)
    {
        Logs_MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}