Documentos no WPF

O Windows Presentation Foundation (WPF) oferece uma ampla variedade de recursos de documento que permitem a criação de conteúdo de alta fidelidade projetado para ser acessado e lido mais facilmente do que nas gerações anteriores do Windows. Além dos recursos e da qualidade aprimorados, o WPF também fornece serviços integrados para exibição, empacotamento e segurança de documentos. Este tópico fornece uma introdução aos tipos de documento WPF e empacotamento de documentos.

Tipos de documentos

O WPF divide os documentos em duas grandes categorias com base no uso pretendido; Essas categorias de documentos são denominadas "documentos fixos" e "documentos de fluxo".

Os documentos fixos destinam-se a aplicações que exigem uma apresentação precisa "o que você vê é o que você obtém" (WYSIWYG), independentemente do hardware de exibição ou impressora usado. Os usos típicos de documentos estáticos incluem a editoração eletrônica, o processamento de texto e o layout de formulário, nos quais a aderência ao design original da página é essencial. Como parte de seu layout, um documento estático mantém o posicionamento preciso dos elementos de conteúdo, independente do dispositivo de impressão ou de exibição em uso. Por exemplo, uma página de documento estático exibida em uma tela de 96 dpi parecerá exatamente a mesma quando enviada a uma impressora a laser de 600 dpi ou quando for enviada para uma fotocompositora de 4800 dpi. O layout da página permanece o mesmo em todos os casos, embora a qualidade do documento seja maximizada para as capacidades de cada dispositivo.

Em comparação, os documentos dinâmicos são projetados para otimizar a exibição e legibilidade e são melhor utilizados quando a facilidade de leitura é o cenário principal de consumo de documento. Em vez de serem configurados para um layout predefinido, os documentos dinâmicos ajustam e refluem seu conteúdo com base em variáveis de tempo de execução como tamanho da janela, resolução do dispositivo e preferências opcionais do usuário. Uma página da Web é um exemplo simples de um documento dinâmico em que o conteúdo da página é formatado dinamicamente para se ajustar à janela atual. Os documentos dinâmicos otimizam a experiência de visualização e de leitura para o usuário, com base no ambiente de runtime. Por exemplo, o mesmo documento dinâmico será dinamicamente reformatado para legibilidade otimizada em uma tela de alta resolução de 19 polegadas ou uma tela pequena de PDA de 2x3 polegadas. Além disso, os documentos dinâmicos têm vários recursos internos, incluindo pesquisa, modos de exibição que otimizam a legibilidade e a capacidade de alterar o tamanho e a aparência das fontes. Consulte Visão geral de documento dinâmico para ilustrações, exemplos e informações aprofundadas sobre documentos dinâmicos.

Controles de documento e layout de texto

O .NET Framework fornece um conjunto de controles pré-criados que simplificam o uso de documentos fixos, documentos de fluxo e texto geral em seu aplicativo. A exibição de conteúdo de documento fixo é suportada usando o DocumentViewer controle. A exibição do conteúdo do documento de fluxo é suportada por três controles diferentes: FlowDocumentReader, FlowDocumentPageViewere FlowDocumentScrollViewer que mapeiam para diferentes cenários de usuário (consulte as seções abaixo). Outros controles WPF fornecem layout simplificado para dar suporte a usos gerais de texto (consulte Texto na interface do usuário, abaixo).

Controle de documento estático – DocumentViewer

O DocumentViewer controle foi projetado para exibir FixedDocument conteúdo. O DocumentViewer controle fornece uma interface de usuário intuitiva que fornece suporte interno para operações comuns, incluindo saída de impressão, cópia para área de transferência, zoom e recursos de pesquisa de texto. O controle fornece acesso a páginas de conteúdo por meio de um mecanismo de rolagem familiar. Como todos os controles WPF, suporta reestilização completa ou parcial, DocumentViewer o que permite que o controle seja visualmente integrado em praticamente qualquer aplicativo ou ambiente.

DocumentViewer é projetado para exibir conteúdo de maneira somente leitura; A edição ou modificação de conteúdo não está disponível e não é suportada.

Controles de documento dinâmico

Observação

Para obter informações mais detalhadas sobre os recursos do documento de fluxo e como criá-los, consulte Visão geral do documento de fluxo.

A exibição do conteúdo do documento de fluxo é suportada por três controles: FlowDocumentReader, FlowDocumentPageViewere FlowDocumentScrollViewer.

FlowDocumentReader

FlowDocumentReader Inclui recursos que permitem ao usuário escolher dinamicamente entre vários modos de visualização, incluindo um modo de visualização de página única (página por vez), um modo de visualização de duas páginas por vez (formato de leitura de livro) e um modo de visualização de rolagem contínua (sem fundo). Para obter mais informações sobre esses modos de exibição, consulte FlowDocumentReaderViewingMode. Se você não precisar da capacidade de alternar dinamicamente entre diferentes modos FlowDocumentPageViewer de exibição e FlowDocumentScrollViewer fornecer visualizadores de conteúdo de fluxo mais leves que são fixos em um modo de exibição específico.

FlowDocumentPageViewer e FlowDocumentScrollViewer

FlowDocumentPageViewer Mostra o conteúdo no modo de visualização Página por vez, enquanto FlowDocumentScrollViewer mostra o conteúdo no modo de rolagem contínua. Ambos FlowDocumentPageViewer e FlowDocumentScrollViewer são fixados para um modo de visualização específico. Compare com FlowDocumentReader, que inclui recursos que permitem ao usuário escolher dinamicamente entre vários modos de exibição (conforme fornecido pela FlowDocumentReaderViewingMode enumeração), ao custo de ser mais intensivo em recursos do que FlowDocumentPageViewer ou FlowDocumentScrollViewer.

Por padrão, uma barra de rolagem vertical é sempre exibida e uma barra de rolagem horizontal se torna visível se necessário. A interface do usuário padrão para não inclui uma barra de ferramentas, no entanto, a IsToolBarVisible propriedade pode ser usada para FlowDocumentScrollViewer habilitar uma barra de ferramentas interna.

Texto na interface do usuário

Além de adicionar texto a documentos, o texto também pode ser usado, obviamente, na interface do usuário do aplicativo, como em formulários. WPF inclui vários controles para desenhar texto para a tela. Cada controle é destinado a um cenário diferente e tem sua própria lista de recursos e limitações. Em geral, o elemento deve ser usado quando o TextBlock suporte de texto limitado é necessário, como uma breve frase em uma interface do usuário (UI). Label pode ser usado quando o suporte de texto mínimo é necessário. Para obter mais informações, consulte Visão geral do TextBlock.

Empacotamento de documento

As System.IO.Packaging APIs fornecem um meio eficiente para organizar dados de aplicativos, conteúdo de documentos e recursos relacionados em um único contêiner que é simples de acessar, portátil e fácil de distribuir. Um arquivo ZIP é um exemplo de um Package tipo capaz de conter vários objetos como uma única unidade. As APIs de empacotamento fornecem uma implementação padrão projetada usando um padrão ZipPackage Open Packaging Conventions com arquitetura de arquivo XML e ZIP. As APIs de empacotamento do WPF simplificam a criação de pacotes e o armazenamento e acesso a objetos dentro deles. Um objeto armazenado em um Package é referido como uma PackagePart ("parte"). Os pacotes também podem incluir certificados digitais assinados que podem ser usados para identificar o originador de uma parte e validar que o conteúdo de um pacote não foi modificado. Os pacotes também incluem um recurso que permite que informações adicionais sejam adicionadas a um PackageRelationship pacote ou associadas a partes específicas sem realmente modificar o conteúdo das partes existentes. Os serviços de pacote também oferecem suporte ao Microsoft Windows Rights Management (RM).

A arquitetura do pacote WPF serve como base para várias tecnologias-chave:

  • Documentos XPS em conformidade com a XML Paper Specification (XPS).

  • Formato de documentos Microsoft Office "12" Open XML (.docx).

  • Formatos de armazenamento personalizado para seu próprio projeto de aplicativo.

Com base nas APIs de empacotamento, um XpsDocument é projetado especificamente para armazenar documentos de conteúdo fixo WPF. Um XpsDocument é um documento independente que pode ser aberto em um visualizador, exibido em um controle, roteado para um DocumentViewer spool de impressão ou enviado diretamente para uma impressora compatível com XPS.

As seções a seguir fornecem informações adicionais sobre as APIs e XpsDocument as fornecidas com o Package WPF.

Componentes do pacote

As APIs de empacotamento do WPF permitem que dados e documentos de aplicativos sejam organizados em uma única unidade portátil. Um arquivo ZIP é um dos tipos mais comuns de pacotes e é o tipo de pacote padrão fornecido com o WPF. Package é uma classe abstrata a partir da qual ZipPackage é implementada usando uma arquitetura de arquivo XML e ZIP padrão aberto. O Open método usa ZipPackage para criar e usar arquivos ZIP por padrão. Um pacote pode conter três tipos básicos de itens:

Item Descrição
PackagePart Conteúdo, dados, documentos e arquivos de recurso do aplicativo.
PackageDigitalSignature [Certificado X.509] para identificação, autenticação e validação.
PackageRelationship Informações adicionadas relacionadas ao pacote ou a uma parte específica.

PackageParts

Uma PackagePart ("parte") é uma classe abstrata que se refere a um objeto armazenado em um Packagearquivo . Em um arquivo ZIP, as partes do pacote correspondem aos arquivos individuais armazenados no arquivo ZIP. ZipPackagePart Fornece a implementação padrão para objetos serializáveis armazenados em um ZipPackagearquivo . Como em um sistema de arquivos, as partes contidas no pacote são armazenadas em uma organização de diretório hierárquico ou de "estilo de pasta". Usando as APIs de empacotamento do WPF, os aplicativos podem gravar, armazenar e ler vários PackagePart objetos usando um único contêiner de arquivo ZIP.

PackageDigitalSignatures

Por segurança, uma PackageDigitalSignature ("assinatura digital") pode ser associada a partes dentro de um pacote. A PackageDigitalSignature incorpora um [509] que fornece dois recursos:

  1. Identifica e autentica o originador da parte.

  2. Valida que a parte não foi modificada.

A assinatura digital não evita que uma parte seja modificada, mas uma verificação de validação em relação à assinatura digital falhará se a parte tiver sido alterada de alguma maneira. O aplicativo pode adotar a ação adequada, por exemplo, bloquear a abertura da parte ou notificar o usuário que a parte foi modificada e não é segura.

PackageRelationships

Um PackageRelationship ("relacionamento") fornece um mecanismo para associar informações adicionais ao pacote ou a uma parte dentro do pacote. Um relacionamento é um recurso de nível de pacote que pode associar informações adicionais com uma parte, sem modificar o conteúdo da parte. Inserir novos dados diretamente no conteúdo de uma parte, geralmente, não é algo prático em muitos casos:

  • O tipo real da parte e seu esquema de conteúdo não é conhecido.

  • Mesmo se for conhecido, o esquema de conteúdo poderá não fornecer um meio para acrescentar novas informações.

  • A parte pode ser digitalmente assinada ou criptografada, impedindo qualquer modificação.

Os relacionamentos de pacotes fornecem um meio detectável de acrescentar e associar informações adicionais com as partes individuais ou com o pacote inteiro. Os relacionamentos de pacotes são usados para duas funções principais:

  1. Definir relações de dependência de uma parte com outra.

  2. Definir relacionamentos de informação que adicionam anotações ou outros dados relacionados à parte.

A PackageRelationship fornece um meio rápido e detectável para definir dependências e adicionar outras informações associadas a uma parte do pacote ou ao pacote como um todo.

Relações de dependência

As relações de dependência são usadas para descrever as dependências que uma parte cria com outras partes. Por exemplo, um pacote pode conter uma parte HTML que inclui uma ou mais <tags de imagem img> . As marcas de imagem referem-se a imagens localizadas como outras partes internas ao pacote ou externas ao pacote (tais como acessíveis pela Internet). Criar um PackageRelationship arquivo HTML associado torna a descoberta e o acesso aos recursos dependentes rápidos e fáceis. Um aplicativo de navegador ou visualizador pode acessar diretamente os relacionamentos de partes e imediatamente começar a montar os recursos dependentes sem conhecer o esquema ou analisar o documento.

Relacionamentos de informações

Semelhante a uma nota ou anotação, um PackageRelationship também pode ser usado para armazenar outros tipos de informações a serem associadas a uma parte sem ter que realmente modificar o conteúdo da parte em si.

Documentos XPS

O documento XPS (XML Paper Specification) é um pacote que contém um ou mais documentos fixos, juntamente com todos os recursos e informações necessários para a renderização. XPS também é o formato de arquivo de spool de impressão nativo do Windows Vista. Um XpsDocument é armazenado no conjunto de dados ZIP padrão e pode incluir uma combinação de XML e componentes binários, como arquivos de imagem e fonte. Os PackageRelationships são usados para definir as dependências entre o conteúdo e os recursos necessários para renderizar completamente o documento. O XpsDocument design fornece uma solução de documento única e de alta fidelidade que oferece suporte a vários usos:

  • Leitura, gravação e armazenamento de conteúdo e recursos de documento estático como um arquivo simples, portátil e de fácil distribuição.

  • Exibindo documentos com o aplicativo XPS Viewer.

  • Saída de documentos no formato de saída de spool de impressão nativo do Windows Vista.

  • Roteamento de documentos diretamente para uma impressora compatível com XPS.

Confira também