WPF의 문서

WPF(Windows Presentation Foundation)는 이전 세대의 Windows보다 더 쉽게 액세스하고 읽을 수 있는 고품질 콘텐츠를 만드는 다양한 문서 기능을 제공합니다. 향상된 기능과 품질 외에도 WPF는 문서 표시, 패키징 및 보안을 위한 통합 서비스도 제공합니다. 이 항목에서는 WPF 문서 종류와 문서 패키징을 소개합니다.

문서 종류

WPF에서는 용도에 따라 문서를 두 개의 광범위한 범주로 구분합니다. 이러한 문서 범주를 “고정 문서”와 “유동 문서”라고 합니다.

고정 문서는 사용된 디스플레이 또는 프린터 하드웨어와 무관하게 정확한 WYSIWYG(“what you see is what you get”) 프레젠테이션이 필요한 애플리케이션용으로 디자인되었습니다. 일반적으로 고정 문서는 데스크톱 출판, 워드 프로세싱 및 양식 레이아웃에 사용되며, 이 경우 원래 페이지 디자인을 고수하는 것이 중요합니다. 고정 문서에서는 사용 중인 디스플레이나 인쇄 디바이스와 무관하게 콘텐츠 요소의 정확한 위치를 레이아웃의 일부로 유지합니다. 예를 들어, 96dpi 디스플레이에 보이는 고정 문서 페이지는 600dpi 레이저 프린터로 출력할 때와 4800dpi 사진 식자기로 출력할 때 모두 똑같이 표시됩니다. 어느 경우에든 페이지 레이아웃은 동일하며, 문서 품질은 각 디바이스의 기능에 따라 최대화됩니다.

이에 비해 유동 문서는 보기와 가독성을 최적화하도록 설계되어 있으며, 문서 이용 시 용이한 가독성이 주된 요인인 시나리오에서 최적으로 활용할 수 있습니다. 유동 문서는 미리 정의된 하나의 레이아웃으로 설정되는 것이 아니라, 창 크기, 디바이스 해상도 및 선택적 사용자 기본 설정 등의 런타임 변수에 따라 동적으로 콘텐츠를 조정하고 리플로우합니다. 웹 페이지는 페이지 콘텐츠를 현재 창에 맞게 동적으로 형식화하는 유동 문서의 간단한 예입니다. 유동 문서는 런타임 환경을 기반으로 사용자의 보기 및 읽기 환경을 최적화합니다. 예를 들어, 동일한 유동 문서가 고해상도 19인치 디스플레이나 소형 2x3인치 PDA 화면에서 최적의 가독성을 제공하기 위해 동적으로 서식을 다시 지정합니다. 또한 유동 문서에는 검색, 가독성을 최적화하는 보기 모드 및 글꼴의 모양과 크기를 변경하는 기능 등의 여러 기본 제공 기능이 포함되어 있습니다. 플로우 문서에 대한 그림, 예제 및 자세한 정보는 유동 문서 개요를 참조하세요.

문서 컨트롤 및 텍스트 레이아웃

.NET Framework에서는 고정 문서, 유동 문서 및 애플리케이션의 일반 텍스트를 간편하게 사용할 수 있게 하는 미리 빌드된 컨트롤 세트를 제공합니다. 고정 문서 콘텐츠 표시는 DocumentViewer 컨트롤을 사용하여 지원됩니다. 유동 문서 콘텐츠 표시는 각각 서로 다른 사용자 시나리오에 매핑되는 세 가지 컨트롤, FlowDocumentReader, FlowDocumentPageViewer, FlowDocumentScrollViewer를 사용하여 지원됩니다(아래 섹션 참조). 기타 WPF 컨트롤에서는 일반 텍스트 사용을 지원하는 간소화된 레이아웃을 제공합니다(아래 사용자 인터페이스의 텍스트 참조).

고정 문서 컨트롤 - DocumentViewer

DocumentViewer 컨트롤은 FixedDocument 콘텐츠를 표시하도록 디자인되었습니다. DocumentViewer 컨트롤에서는 인쇄 출력, 클립보드에 복사, 확대/축소 및 텍스트 검색 기능 등의 일반적인 작업을 위한 기본 제공 지원을 제공하는 직관적인 사용자 인터페이스를 제공합니다. 컨트롤에서는 친숙한 스크롤링 메커니즘을 통해 콘텐츠 페이지에 액세스하는 권한을 제공합니다. 모든 WPF 컨트롤과 마찬가지로 DocumentViewer에서는 전체 또는 부분 스타일 재지정을 지원합니다. 이 기능을 사용하면 거의 모든 애플리케이션 또는 환경에 시각적으로 컨트롤을 통합할 수 있습니다.

DocumentViewer는 읽기 전용 방식으로 콘텐츠를 표시하도록 디자인되었습니다. 콘텐츠 편집 또는 수정은 사용할 수 없으며 지원되지 않습니다.

유동 문서 컨트롤

참고

유동 문서 기능 및 해당 기능을 만드는 방법에 대한 자세한 내용은 유동 문서 개요를 참조하세요.

유동 문서 콘텐츠 표시는 세 개의 컨트롤, FlowDocumentReader, FlowDocumentPageViewer, FlowDocumentScrollViewer를 통해 지원됩니다.

FlowDocumentReader

FlowDocumentReader에는 단일 페이지(한 번에 한 페이지) 보기 모드, 한 번에 두 페이지(책 읽기 형식) 보기 모드, 연속 스크롤링(바닥이 없음) 보기 모드 등의 다양한 보기 모드를 동적으로 선택할 수 있는 기능이 포함되어 있습니다. 이러한 보기 모드에 관한 자세한 내용은 FlowDocumentReaderViewingMode를 참조하세요. 다양한 보기 모드 간에 동적으로 전환하는 기능이 필요하지 않은 경우 FlowDocumentPageViewerFlowDocumentScrollViewer는 특정 보기 모드에 고정되는 간단한 흐름 콘텐츠 뷰어를 제공합니다.

FlowDocumentPageViewer 및 FlowDocumentScrollViewer

FlowDocumentPageViewer는 한 번에 한 페이지 보기 모드로 콘텐츠를 표시하는 반면, FlowDocumentScrollViewer는 연속 스크롤링 모드에서 콘텐츠를 표시합니다. FlowDocumentPageViewerFlowDocumentScrollViewer는 모두 특정 보기 모드로 고정됩니다. FlowDocumentPageViewer 또는 FlowDocumentScrollViewer보다 리소스는 많이 사용하지만, 사용자가 다양한 보기 모드(FlowDocumentReaderViewingMode 열거를 통해 제공)를 동적으로 선택할 수 있도록 하는 기능이 포함된 FlowDocumentReader와 비교합니다.

기본적으로 세로 스크롤 막대는 항상 표시되며 가로 스크롤 막대는 필요한 경우 표시됩니다. FlowDocumentScrollViewer의 기본 UI에는 도구 모음이 포함되지 않습니다. 그러나 IsToolBarVisible 속성을 사용하여 기본 제공 도구 모음을 사용하도록 설정할 수 있습니다.

사용자 인터페이스의 텍스트

문서에 텍스트를 추가하는 외에도 양식과 같은 애플리케이션 UI에서 명확하게 텍스트를 사용할 수 있습니다. WPF에는 화면에 텍스트를 그리는 데 사용하는 여러 컨트롤이 포함됩니다. 각 컨트롤은 다른 시나리오를 대상으로 하며 고유 기능 및 제한 사항 목록을 가지고 있습니다. 일반적으로 TextBlock 요소는 UI(사용자 인터페이스)의 간략한 문장과 같이 제한된 텍스트 지원이 필요할 때 사용해야 합니다. Label은 최소 텍스트 지원이 필요한 경우 사용할 수 있습니다. 자세한 내용은 TextBlock 개요를 참조하세요.

문서 패키징

System.IO.Packaging API에서는 애플리케이션 데이터, 문서 콘텐츠 및 관련 리소스를 액세스하기 쉽고 이식 가능하며 쉽게 배포할 수 있는 단일 컨테이너에 구성하는 효율적인 방법을 제공합니다. ZIP 파일은 단일 단위로 여러 개체를 보유할 수 있는 Package 형식의 한 예입니다. 패키징 API에서는 XML 및 ZIP 파일 아키텍처가 있는 Open Packaging Conventions 표준을 사용하여 디자인된 기본 ZipPackage 구현을 제공합니다. WPF 패키징 API를 사용하면 쉽게 패키지를 만들어 개체를 저장하고 액세스할 수 있습니다. Package에 저장된 개체를 PackagePart(“파트”)라고 합니다. 패키지에는 파트의 작성기를 식별하고 패키지의 콘텐츠가 수정되지 않았는지 유효성을 검사하는 데 사용할 수 있는 서명된 디지털 인증서도 포함될 수 있습니다. 패키지에는 기존 파트의 콘텐츠를 실제로 수정하지 않고도 추가 정보를 패키지에 추가하거나 특정 파트와 연결할 수 있는 PackageRelationship 기능도 포함되어 있습니다. 패키지 서비스는 Microsoft Windows RM(Rights Management)도 지원합니다.

WPF 패키지 아키텍처는 다음과 같은 여러 주요 기술의 기초 역할을 합니다.

  • XPS(XML Paper Specification)를 준수하는 XPS 문서.

  • Microsoft Office “12” Open XML 형식 문서(.docx).

  • 고유 애플리케이션 디자인에 맞는 사용자 지정 스토리지 형식.

패키징 API를 기반으로 하는 XpsDocument는 특별히 WPF 고정 콘텐츠 문서를 저장하도록 디자인되었습니다. XpsDocument는 뷰어에서 열거나, DocumentViewer 컨트롤에 표시되거나, 인쇄 스풀로 라우팅되거나, XPS 호환 가능 프린터에 직접 출력할 수 있는 자체 포함 문서입니다.

다음 섹션에서는 WPF와 함께 제공되는 PackageXpsDocument API에 대한 자세한 내용을 제공합니다.

패키지 구성 요소

WPF 패키징 API를 사용하면 애플리케이션 데이터와 문서를 이식 가능한 단일 단위로 구성할 수 있습니다. ZIP 파일은 가장 일반적인 패키지 유형 중 하나이고, WPF에서 제공하는 기본 패키지 유형입니다. Package 자체는 개방형 표준 XML 및 ZIP 파일 아키텍처를 사용하여 ZipPackage를 구현하는 추상 클래스입니다. Open 메서드는 기본적으로 ZipPackage를 사용하여 ZIP 파일을 만들고 사용합니다. 패키지에는 다음과 같은 세 가지 기본 유형의 항목이 포함될 수 있습니다.

항목 설명
PackagePart 애플리케이션 콘텐츠, 데이터, 문서 및 리소스 파일.
PackageDigitalSignature ID, 인증 및 유효성 검사용 [X.509 인증서].
PackageRelationship 패키지 또는 특정 파트와 관련된 추가 정보.

PackageParts

PackagePart(“파트”)는 Package에 저장된 개체를 나타내는 추상 클래스입니다. ZIP 파일에서 패키지 파트는 ZIP 파일에 저장된 개별 파일에 해당합니다. ZipPackagePartZipPackage에 저장된 직렬화 가능 개체의 기본 구현을 제공합니다. 파일 시스템과 마찬가지로 패키지에 포함된 파트는 계층 구조 디렉터리 또는 “폴더 스타일” 조직에 저장됩니다. 애플리케이션에서는 WPF 패키징 API를 사용하여 단일 ZIP 파일 컨테이너를 통해 여러 PackagePart 개체를 쓰고, 저장하고, 읽을 수 있습니다.

PackageDigitalSignatures

보안을 위해 PackageDigitalSignature(“디지털 서명”)를 패키지의 파트와 연결할 수 있습니다. PackageDigitalSignature는 다음 두 기능을 제공하는 [509]를 통합합니다.

  1. 파트의 작성기를 식별하고 인증합니다.

  2. 파트가 수정되지 않았는지 유효성을 검사합니다.

디지털 시그니처는 파트를 수정하지 못하게 하지는 않지만, 파트를 임의 방식으로 변경하면 디지털 시그니처의 유효성 검사 확인이 실패합니다. 그러면 애플리케이션에서 파트 열기를 차단하거나 사용자에게 파트가 수정되어 안전하지 않음을 알리는 등의 적절한 조치를 수행할 수 있습니다.

PackageRelationships

PackageRelationship(“관계”)은 패키지나 패키지 내 파트와 추가 정보를 연결하는 메커니즘을 제공합니다. 관계는 실제 파트 콘텐츠를 수정하지 않고 파트와 추가 정보를 연결할 수 있는 패키지 수준 기능입니다. 대부분의 경우 새 데이터를 파트 콘텐츠에 직접 삽입하는 것은 실용적이지 않습니다.

  • 파트의 실제 형식 및 해당 콘텐츠 스키마는 알 수 없습니다.

  • 알려진 경우에도 콘텐츠 스키마에서는 새 정보를 추가하는 방법을 제공하지 않습니다.

  • 파트는 디지털 방식으로 서명되거나 암호화될 수 있으며, 수정은 불가능합니다.

패키지 관계에서는 자세한 정보를 추가하여 개별 파트 또는 전체 패키지와 연결하는 검색 가능한 방법을 제공합니다. 패키지 관계는 다음 두 개의 주요 기능에 사용합니다.

  1. 파트 간 종속성 관계 정의.

  2. 메모 또는 파트와 관련된 다른 데이터를 추가하는 정보 관계 정의.

PackageRelationship은 종속성을 정의하고 패키지의 파트 또는 패키지 전체와 연결된 기타 정보를 추가하는 빠르고 검색 가능한 방법을 제공합니다.

종속성 관계

종속성 관계는 한 파트가 다른 파트에 지정하는 종속성을 설명하는 데 사용됩니다. 예를 들어, 패키지에는 하나 이상의 <img> 이미지 태그를 포함하는 HTML 파트가 포함될 수 있습니다. 이미지 태그는 패키지 내부의 다른 파트 또는 패키지 외부의 다른 파트(예: 인터넷을 통해 액세스 가능)로 있는 이미지를 참조합니다. HTML 파일과 연결된 PackageRelationship을 만들면 종속 리소스를 빠르고 쉽게 검색하여 액세스할 수 있습니다. 브라우저 또는 뷰어 애플리케이션에서 파트 관계에 직접 액세스하고 스키마를 모르거나 문서를 구문 분석하지 않아도 종속 리소스의 어셈블링을 즉시 시작할 수 있습니다.

정보 관계

메모 또는 주석과 유사하게 PackageRelationship은 실제로 파트 콘텐츠를 수정하지 않아도 파트와 연결할 다른 유형의 정보를 저장하는 데 사용할 수 있습니다.

XPS 문서

XPS(XML Paper Specification) 문서는 렌더링에 필요한 모든 리소스 및 정보와 함께 하나 이상의 고정 문서를 포함하는 패키지입니다. 또한 XPS는 기본 Windows Vista 인쇄 스풀 파일 형식입니다. XpsDocument는 표준 ZIP 데이터 세트에 저장되며, XML과 이진 구성 요소의 조합을 포함할 수 있습니다(예: 이미지 및 글꼴 파일). PackageRelationships는 문서를 완전하게 렌더링하는 데 필요한 리소스와 콘텐츠 사이의 종속성을 정의하는 데 사용합니다. XpsDocument 디자인에서는 다음과 같이 여러 용도를 지원하는 고품질의 단일 문서 솔루션을 제공합니다.

  • 고정 문서 콘텐츠와 리소스를 읽고 쓰며, 이식 가능하고 배포하기 쉬운 단일 파일로 저장.

  • XPS 뷰어 애플리케이션으로 문서 표시.

  • Windows Vista의 기본 인쇄 스풀 출력 형식으로 문서 출력.

  • XPS 호환 가능 프린터에 직접 문서 라우팅.

참고 항목