Compartilhar via


Documentos no WPF

O Windows Presentation Foundation (WPF) oferece uma ampla gama de recursos de documentos que permitem a criação de conteúdo de alta fidelidade que foi projetado para ser acessado e lido com mais facilidade do que nas gerações anteriores do Windows. Além de recursos e 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 do WPF e ao empacotamento de documentos.

Tipos de documentos

O WPF divide documentos em duas categorias amplas com base no uso pretendido; essas categorias de documento são denominadas "documentos fixos" e "documentos de fluxo".

Os documentos fixos são destinados a aplicativos que exigem uma apresentação precisa "o que você vê é o que você obtém" (WYSIWYG), independentemente do hardware de impressora ou de exibição usado. Os usos típicos para documentos fixos incluem publicação de área de trabalho, processamento de palavras e layout de formulário, em que a adesão ao design da página original é crítica. Como parte de seu layout, um documento fixo mantém o posicionamento posicional preciso de elementos de conteúdo independentemente do dispositivo de exibição ou impressão em uso. Por exemplo, uma página de documento fixa exibida em uma exibição de 96 dpi aparecerá exatamente a mesma quando for gerada para uma impressora laser de 600 dpi como quando ela for gerada para um fototiposetter de 4800 dpi. O layout da página permanece o mesmo em todos os casos, enquanto a qualidade do documento maximiza para os recursos de cada dispositivo.

Em comparação, os documentos de fluxo são projetados para otimizar a exibição e a legibilidade e são mais bem utilizados quando a facilidade de leitura é o cenário de consumo principal de documentos. Em vez de serem definidos como um layout predefinido, os documentos de fluxo ajustam e refluxam dinamicamente 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 de fluxo em que o conteúdo da página é formatado dinamicamente para se ajustar à janela atual. Os documentos de fluxo otimizam a experiência de exibição e leitura para o usuário, com base no ambiente de runtime. Por exemplo, o mesmo documento de fluxo reformatará dinamicamente a legibilidade ideal em uma tela de 19 polegadas de alta resolução ou em uma tela PDA pequena de 2x3 polegadas. Além disso, os documentos de fluxo têm uma série de 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. Confira a Visão geral do Documento do Flow para obter ilustrações, exemplos e informações detalhadas sobre documentos de fluxo.

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. Há suporte para a exibição de conteúdo de documento fixo usando o DocumentViewer controle. A exibição do conteúdo do documento de fluxo tem suporte por três controles diferentes: FlowDocumentReader, FlowDocumentPageViewere FlowDocumentScrollViewer qual mapa para diferentes cenários de usuário (consulte as seções abaixo). Outros controles do WPF fornecem layout simplificado para dar suporte a usos gerais de texto (consulte Texto na Interface do Usuário, abaixo).

Controle de Documento Fixo – DocumentViewer

O DocumentViewer controle foi projetado para exibir FixedDocument conteúdo. O DocumentViewer controle fornece uma interface do 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. Assim como todos os controles do WPF, DocumentViewer suporta restyling completo ou parcial, permitindo que o controle seja integrado visualmente a praticamente qualquer aplicativo ou ambiente.

DocumentViewer foi projetado para exibir o conteúdo de maneira somente leitura; edição ou modificação do conteúdo não é possível nem é suportada.

Controles de Documentos de Fluxo

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 do Flow.

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

FlowDocumentReader

FlowDocumentReader inclui recursos que permitem que o usuário escolha dinamicamente entre vários modos de exibição, incluindo um modo de exibição de página única (página por vez), um modo de exibição de duas páginas por vez (formato de leitura de livro) e um modo de exibiçã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 de exibição, FlowDocumentPageViewer e FlowDocumentScrollViewer oferecem visualizadores de conteúdo leve que são fixos em um modo de exibição específico.

FlowDocumentPageViewer e FlowDocumentScrollViewer

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

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

Texto na Interface do Usuário

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

Empacotamento de documentos

As System.IO.Packaging APIs fornecem um meio eficiente para organizar dados do aplicativo, conteúdo do documento 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 manter vários objetos como uma única unidade. As APIs de empacotamento fornecem uma implementação padrão ZipPackage projetada usando um padrão de Convenções de Empacotamento Aberto com arquitetura de arquivo XML e ZIP. As APIs de empacotamento do WPF simplificam a criação de pacotes e o armazenamento e o acesso de objetos dentro deles. Um objeto armazenado em um Package é conhecido como um PackagePart ("part"). 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 PackageRelationship recurso que permite que informações adicionais sejam adicionadas a um pacote ou associadas a partes específicas sem realmente modificar o conteúdo de partes existentes. Os serviços de pacote também dão suporte ao Microsoft Windows Rights Management (RM).

A arquitetura do Pacote WPF serve como base para várias tecnologias importantes:

  • Documentos XPS em conformidade com a XPS (Especificação de Papel XML).

  • Documentos de formato XML abertos do Microsoft Office "12" (.docx).

  • Formatos de armazenamento personalizados para seu próprio design de aplicativo.

Com base nas APIs de empacotamento, um XpsDocument foi projetado especificamente para armazenar documentos de conteúdo fixo do WPF. Um XpsDocument é um documento autocontido que pode ser aberto em um visualizador, exibido em controle DocumentViewer, redirecionado para um 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 Package e XpsDocument fornecidas com o WPF.

Componentes do pacote

As APIs de empacotamento do WPF permitem que os dados do aplicativo e os documentos 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 em si é uma classe abstrata da qual ZipPackage é implementada usando uma arquitetura de arquivo XML e ZIP padrão aberta. 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:

Elemento Descrição
PackagePart Conteúdo do aplicativo, dados, documentos e arquivos de recursos.
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.

PartesDoPacote

A PackagePart ("part") é uma classe abstrata que se refere a um objeto armazenado em um Package. 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 ZipPackage. Como um sistema de arquivos, as partes contidas no pacote são armazenadas no diretório hierárquico ou na organização "estilo 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

Para segurança, uma PackageDigitalSignature ("assinatura digital") pode ser associada a partes dentro de um pacote. Um 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 impede que uma parte seja modificada, mas uma verificação de validação em relação à assinatura digital falhará se a parte for alterada de alguma forma. O aplicativo pode tomar as medidas apropriadas, por exemplo, bloquear a abertura da parte ou notificar o usuário de que a parte foi modificada e não está segura.

Relações de Pacotes

Uma PackageRelationship ("relação") fornece um mecanismo para associar informações adicionais com o pacote ou uma parte dentro do pacote. Uma relação é uma funcionalidade de nível de pacote que pode associar informações adicionais a uma parte sem modificar o conteúdo da parte. A inserção de novos dados diretamente no conteúdo da parte geralmente não é prática em muitos casos:

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

  • Mesmo se conhecido, o esquema de conteúdo pode não fornecer um meio para adicionar novas informações.

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

As relações de pacote fornecem um meio detectável para adicionar e associar informações adicionais a partes individuais ou com o pacote inteiro. As relações de pacote são usadas para duas funções primárias:

  1. Definindo relações de dependência de uma parte para outra.

  2. Definindo relações de informações que adicionam anotações ou outros dados relacionados à parte.

Um 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 do 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 faz para outras partes. Por exemplo, um pacote pode conter uma parte HTML que inclui uma ou mais <marcas de imagem img> . As marcas de imagem referem-se a imagens localizadas como outras partes internas do pacote ou externas ao pacote (como acessíveis pela Internet). A criação de um PackageRelationship arquivo HTML associado facilita a descoberta e o acesso aos recursos dependentes. Um aplicativo de navegador ou visualizador pode acessar diretamente as relações de parte e imediatamente começar a montar os recursos dependentes sem conhecer o esquema ou analisar o documento.

Relações de informações

Semelhante a uma anotação ou anotação, uma PackageRelationship também pode ser usada 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 (Especificação de Papel XML) é um pacote que contém um ou mais documentos fixos, juntamente com todos os recursos e informações necessários para renderização. 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 componentes XML e binários, como arquivos de imagem e fonte. PackageRelationships são usados para definir as dependências entre o conteúdo e os recursos necessários para renderizar totalmente o documento. O XpsDocument design fornece uma única solução de documento de alta fidelidade que dá suporte a vários usos:

  • Leitura, gravação e armazenamento de conteúdo de documentos fixos e recursos como um único arquivo portátil e fácil de distribuir.

  • Exibindo documentos com o aplicativo Visualizador XPS.

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

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

Consulte também