본문 바로가기

C#

Drag and Drop 으로 파일을(PDF) 프리뷰 하기

반응형

파일을 Drag&Drop해서 프리뷰 하는 방법에 대해서 간략하게 적어본다.

일단, 아래의 링크에 접속해서  파일을 다운로드 받아야한다.

http://www.adobe.com/devnet/acrobat/sdk/eula.html

자신의 환경에 맞는 파일을 다운받도록 합니다.

<소스관련>
화면구성은 아래와 같습니다. (일본에서 개발중이라, 일본어가 섞여 있습니다.)

메인화면 디자인

화면을 구성한 컨트롤은 아래와 같다.

리스트박스 1
PrintPreview 1
PictureBox 1
printDocument 1


실행하면, 아래와 같은 동작을 합니다.

<실행화면>

리스트박스에 엑셀파일, PDF 파일을 드래그 앤 드롭 실시

파일 드래그 앤 드롭
드래그 앤 드롭 후
PDF파일 더블클릭

물론, PDF 파일이기때문에 양쪽에 표시된 화살표를 클릭해서 추가 기능을 열고 접을수 있습니다.



코드는 아래와 같습니다.

using System;
using System.Drawing;
using System.Windows.Forms;

namespace DragAndDrop
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //ListBox1のDragEnterイベントハンドラ
        private void ListBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
            //コントロール内にドラッグされたとき実行される
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                //ドラッグされたデータ形式を調べ、ファイルのときはコピーとする
                e.Effect = DragDropEffects.Copy;
            else
                //ファイル以外は受け付けない
                e.Effect = DragDropEffects.None;
        }

        //ListBox1のDragDropイベントハンドラ
        private void ListBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            //コントロール内にドロップされたとき実行される
            //ドロップされたすべてのファイル名を取得する
            string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            //ListBoxに追加する
            listBox1.Items.AddRange(fileName);
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedItem != null)
            {
                DialogResult dr = MessageBox.Show("指定したファイルを削除しますか?", "【ファイル削除】", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);

                if (dr == DialogResult.OK)
                {
                    System.IO.File.Delete(listBox1.SelectedItem.ToString());
                    listBox1.Items.Remove(listBox1.SelectedItem);
                }
            }
            else
            {
                MessageBox.Show("選択されたアイテムがありません。", "【ファイル削除】", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            // 選択したファイルが存在する場合
            if (listBox1.SelectedItem != null)
            {
                // 拡張子を取得
                string extensionKey = System.IO.Path.GetExtension(listBox1.SelectedItem.ToString()).ToLower();

                switch (extensionKey)
                {
                    case ".pdf":     // PDFファイル
                        // ブラウザコントロールの作成
                        axAcroPDF1.Visible = true;
                        printPreviewControl1.Visible = false;

                        axAcroPDF1.LoadFile(listBox1.SelectedItem.ToString());
                        break;

                    case ".csv":     // CSVファイル
                        axAcroPDF1.Visible = false;
                        printPreviewControl1.Visible = true;

                        printPreviewControl1.Document = printDocument1;

                        break;

                    case ".xlsx":    // EXCELファイル
                        axAcroPDF1.Visible = false;
                        printPreviewControl1.Visible = true;

                        break;

                    default:
                        axAcroPDF1.Visible = false;
                        printPreviewControl1.Visible = false;

                        /* 特定できてない拡張子が来た場合を想定 */
                        break;
                }
            }
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //画像を読み込む
            Image img = Image.FromFile(listBox1.SelectedItem.ToString());
            //画像を描画する
            e.Graphics.DrawImage(img, 0, 0, img.Width, img.Height);
            //次のページがないことを通知する
            e.HasMorePages = false;
            //後始末をする
            img.Dispose();
        }
    }
}


소스에서 xlsx(엑셀) csv에 대해서는 아직 구현하지 않았고 보류중인 기능입니다.
참고로, 아래의 링크에 현재 구성된 소스 

사용된 소스 전체는 아래의 링크에서 다운받을수 있습니다.
아래의 계정을 github에서 follow 해두시면, 수정 및 업데이트 내용을 알람으로 받으실수 있습니다.

https://github.com/sungmanko/DragAndDrop

 

sungmanko/DragAndDrop

DragAndDrop Sample. Contribute to sungmanko/DragAndDrop development by creating an account on GitHub.

github.com

 

추가로 궁금하신점이 있으시면 아래의 링크를 통해서도 보다 많은 정보를 얻으실수 있습니다.
도움되시길 바랍니다.

<C#가이드>

 

C# 문서 - 시작, 자습서, 참조.

프로그래밍 C# 알아보기 - 초보 개발자, C#을 처음 사용하는 개발자, 숙련된 C# / .NET 개발자용

docs.microsoft.com

<C# 8.0의 새로운 기능>

 

C# 8.0의 새로운 기능 - C# 가이드

C# 8.0의 새로운 기능을 살펴봅니다.

docs.microsoft.com

<VB가이드>

 

Visual Basic 설명서 - 시작, 자습서, 참조.

.NET의 Visual Basic 프로그래밍 알아보기 - 초보 개발자, Visual Basic을 처음 사용하는 개발자, 숙련된 Visual Basic 개발자

docs.microsoft.com

<VB새로운기능>

 

C# 문서 - 시작, 자습서, 참조.

프로그래밍 C# 알아보기 - 초보 개발자, C#을 처음 사용하는 개발자, 숙련된 C# / .NET 개발자용

docs.microsoft.com

 

반응형