Home C#WPF [Syncfusion] WPF에서 PDF, Excel, TXT 파일 실행 방법

[Syncfusion] WPF에서 PDF, Excel, TXT 파일 실행 방법

by DUBUKIMCH

Syncfusion 컨트롤을 사용하여 PDF, Excel, TXT 파일을 열어볼 수 있는 WPF 애플리케이션입니다. 각 코드 파일에 대해 자세히 설명하겠습니다.

1. FileLoadWindow.xaml

이 XAML 파일은 사용자 인터페이스(UI)를 정의합니다. 주요 구성 요소는 다음과 같습니다.

XAML 구조

<Window x:Class="SynfusionWpfApp.FileLoadWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:syncfusion="clr-namespace:Syncfusion.Windows.PdfViewer;assembly=Syncfusion.PdfViewer.WPF"
        xmlns:spreadsheet="clr-namespace:Syncfusion.UI.Xaml.Spreadsheet;assembly=Syncfusion.SfSpreadsheet.WPF"
        Title="File Viewer" Height="600" Width="800">

네임스페이스 선언

  • xmlns:syncfusion: Syncfusion PDF 뷰어를 위한 네임스페이스입니다.
  • xmlns:spreadsheet: Syncfusion Excel 스프레드시트를 위한 네임스페이스입니다.

메뉴와 DockPanel

<Menu DockPanel.Dock="Top">
    <MenuItem Header="File">
        <MenuItem Header="Open" Click="OpenFile_Click"/>
    </MenuItem>
</Menu>

  • Menu: 상단에 위치한 파일 메뉴입니다.
  • MenuItem: “File” 메뉴 안에 “Open” 항목이 있습니다. 클릭 시 OpenFile_Click 이벤트 핸들러가 호출됩니다.

TabControl과 각 탭

<TabControl Name="TabControlViewers">
    <!-- PDF Viewer 탭 -->
    <TabItem Header="PDF">
        <syncfusion:PdfViewerControl x:Name="PdfViewer"/>
    </TabItem>

    <!-- Excel Viewer 탭 -->
    <TabItem Header="Excel">
        <spreadsheet:SfSpreadsheet x:Name="Spreadsheet"/>
    </TabItem>

    <!-- TXT Viewer 탭 -->
    <TabItem Header="Text">
        <RichTextBox x:Name="TextViewer"/>
    </TabItem>
</TabControl>

  • TabControl: PDF, Excel, TXT 뷰어를 각각 탭으로 구분해서 보여줍니다.
  • TabItem:
    • PDF 탭: Syncfusion의 PdfViewerControl로 PDF 파일을 엽니다.
    • Excel 탭: Syncfusion의 SfSpreadsheet로 Excel 파일을 엽니다.
    • Text 탭: 기본 WPF RichTextBox로 TXT 파일을 엽니다.

2. FileLoadWindow.xaml.cs

이 코드 비하인드 파일은 UI에서 정의된 이벤트와 파일을 여는 로직을 구현합니다.

네임스페이스 및 클래스 선언

using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;
using Syncfusion.Windows.PdfViewer;
using Syncfusion.UI.Xaml.Spreadsheet;

namespace SynfusionWpfApp
{
    public partial class FileLoadWindow : Window
    {
        public FileLoadWindow()
        {
            InitializeComponent();
        }

  • 네임스페이스: 파일 열기 기능과 Syncfusion 컨트롤에 필요한 네임스페이스를 포함합니다.
  • 클래스: FileLoadWindow는 WPF 창을 나타냅니다.

파일 열기 이벤트 핸들러

OpenFile_Click

private void OpenFile_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog
    {
        Filter = "All Supported Files|*.xlsx;*.pdf;*.txt|Excel Files|*.xlsx|PDF Files|*.pdf|Text Files|*.txt",
        Title = "Select a File"
    };

    if (openFileDialog.ShowDialog() == true)
    {
        string filePath = openFileDialog.FileName;
        string extension = Path.GetExtension(filePath).ToLower();

        switch (extension)
        {
            case ".xlsx":
                LoadExcel(filePath);
                break;
            case ".pdf":
                LoadPDF(filePath);
                break;
            case ".txt":
                LoadText(filePath);
                break;
            default:
                MessageBox.Show("Unsupported file format.");
                break;
        }
    }
}

  • OpenFileDialog: 파일 선택 창을 띄웁니다.
  • Filter: 지원하는 파일 형식(XLSX, PDF, TXT)을 설정합니다.
  • 파일 확장자에 따라 적절한 메서드 호출:
    • Excel 파일: LoadExcel
    • PDF 파일: LoadPDF
    • TXT 파일: LoadText

    파일 로드 메서드

    1. Excel 파일 로드

    private void LoadExcel(string filePath)
    {
        try
        {
            Spreadsheet.Open(filePath);
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Error loading Excel: {ex.Message}");
        }
    }

    • Spreadsheet.Open(filePath): 선택한 Excel 파일을 SfSpreadsheet 컨트롤에 로드합니다.

    2. PDF 파일 로드

    private void LoadPDF(string filePath)
    {
        try
        {
            PdfViewer.Load(filePath);
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Error loading PDF: {ex.Message}");
        }
    }

    • PdfViewer.Load(filePath): 선택한 PDF 파일을 PdfViewerControl에 로드합니다.

    3. TXT 파일 로드

    private void LoadText(string filePath)
    {
        try
        {
            string textContent = File.ReadAllText(filePath);
            TextViewer.Document.Blocks.Clear();
            TextViewer.Document.Blocks.Add(new System.Windows.Documents.Paragraph(new System.Windows.Documents.Run(textContent)));
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Error loading text file: {ex.Message}");
        }
    }

    • File.ReadAllText(filePath): 텍스트 파일 내용을 읽습니다.
    • RichTextBox에 텍스트를 표시합니다.

    전체 코드

    FileLoadWindow.xaml

    <Window x:Class="SynfusionWpfApp.FileLoadWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:syncfusion="clr-namespace:Syncfusion.Windows.PdfViewer;assembly=Syncfusion.PdfViewer.WPF"
            xmlns:spreadsheet="clr-namespace:Syncfusion.UI.Xaml.Spreadsheet;assembly=Syncfusion.SfSpreadsheet.WPF"
            Title="File Viewer" Height="600" Width="800">
        <Grid>
            <DockPanel>
                <Menu DockPanel.Dock="Top">
                    <MenuItem Header="File">
                        <MenuItem Header="Open" Click="OpenFile_Click"/>
                    </MenuItem>
                </Menu>
    
                <TabControl Name="TabControlViewers">
                    <!-- PDF Viewer 탭 -->
                    <TabItem Header="PDF">
                        <syncfusion:PdfViewerControl x:Name="PdfViewer"/>
                    </TabItem>
    
                    <!-- Excel Viewer 탭 -->
                    <TabItem Header="Excel">
                        <spreadsheet:SfSpreadsheet x:Name="Spreadsheet"/>
                    </TabItem>
    
                    <!-- TXT Viewer 탭 -->
                    <TabItem Header="Text">
                        <RichTextBox x:Name="TextViewer"/>
                    </TabItem>
                </TabControl>
            </DockPanel>
        </Grid>
    </Window>
    

    FileLoadWindow.xaml.cs

    using System;
    using System.IO;
    using System.Windows;
    using Microsoft.Win32;
    using Syncfusion.Windows.PdfViewer;
    using Syncfusion.UI.Xaml.Spreadsheet;
    
    namespace SynfusionWpfApp
    {
        public partial class FileLoadWindow : Window
        {
            public FileLoadWindow ()
            {
                InitializeComponent();
            }
    
            private void OpenFile_Click (object sender, RoutedEventArgs e)
            {
                OpenFileDialog openFileDialog = new OpenFileDialog
                {
                    Filter = "All Supported Files|*.xlsx;*.pdf;*.txt|Excel Files|*.xlsx|PDF Files|*.pdf|Text Files|*.txt",
                    Title = "Select a File"
                };
    
                if (openFileDialog.ShowDialog() == true)
                {
                    string filePath = openFileDialog.FileName;
                    string extension = Path.GetExtension(filePath).ToLower();
    
                    switch (extension)
                    {
                        case ".xlsx":
                            LoadExcel(filePath);
                            break;
                        case ".pdf":
                            LoadPDF(filePath);
                            break;
                        case ".txt":
                            LoadText(filePath);
                            break;
                        default:
                            MessageBox.Show("Unsupported file format.");
                            break;
                    }
                }
            }
    
            private void LoadExcel (string filePath)
            {
                try
                {
                    Spreadsheet.Open(filePath);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading Excel: {ex.Message}");
                }
            }
    
            private void LoadPDF (string filePath)
            {
                try
                {
                    PdfViewer.Load(filePath);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading PDF: {ex.Message}");
                }
            }
    
            private void LoadText (string filePath)
            {
                try
                {
                    string textContent = File.ReadAllText(filePath);
                    TextViewer.Document.Blocks.Clear();
                    TextViewer.Document.Blocks.Add(new System.Windows.Documents.Paragraph(new System.Windows.Documents.Run(textContent)));
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading text file: {ex.Message}");
                }
            }
        }
    }

    실행 사진

    요약

    • XAML: PDF, Excel, TXT 파일을 열 수 있는 탭 인터페이스를 구성합니다.
    • C# 코드 비하인드: 파일을 선택하고 각 형식에 맞는 뷰어로 파일을 로드합니다.
      • Excel: SfSpreadsheet
      • PDF: PdfViewerControl
      • TXT: RichTextBox

    이 애플리케이션은 파일 열기 메뉴를 통해 다양한 파일을 간편하게 열어볼 수 있는 기능을 제공합니다.

    You may also like

    Leave a Comment

    error: Content is protected !!