Share via


Documenti in WPF

Windows Presentation Foundation (WPF) offre un'ampia gamma di funzionalità dedicate ai documenti per la creazione di contenuto ad alta fedeltà progettato per garantire un accesso e una lettura semplificati rispetto alle generazioni precedenti di Windows. Oltre a caratteristiche avanzate in termini di funzionalità e qualità, WPF offre servizi integrati per la visualizzazione, l'assemblaggio e la sicurezza dei documenti. In questo argomento viene fornita un'introduzione ai tipi di documenti WPF e al loro assemblaggio.

Nel presente argomento sono contenute le seguenti sezioni.

  • Tipi di documenti
  • Controlli dei documenti e layout del testo
  • Assemblaggio di documenti
  • Documenti XPS
  • Argomenti correlati

Tipi di documenti

In WPF i documenti si suddividono in due categorie generali in base all'utilizzo previsto: documenti statici e documenti dinamici.

I documenti statici sono destinati ad applicazioni che richiedono una presentazione "what you see is what you get" (WYSIWYG) precisa, indipendente dall'hardware di visualizzazione o di stampa. Tra gli utilizzi tipici dei documenti statici sono incluse le attività di desktop publishing, elaborazione di testi e layout di form, in cui la corrispondenza alla progettazione della pagina originale è essenziale. Come parte del layout, in un documento statico viene mantenuta la disposizione precisa degli elementi di contenuto indipendentemente dal dispositivo di visualizzazione o di stampa in uso. Ad esempio, la pagina di un documento statico visualizzata con un'impostazione di 96 dpi non varia quando viene stampata con una stampante laser a 600 dpi o con un compositore di foto a 4800 dpi. Il layout della pagina rimane invariato in ogni caso, sebbene la qualità del documento dipenda dalle capacità del dispositivo utilizzato.

Per contro, i documenti dinamici sono progettati per ottimizzare la visualizzazione e la leggibilità e sono particolarmente adatti quando la facilità di lettura è il principale requisito di utilizzo del documento. Anziché essere impostati su un layout predefinito, questi documenti consentono di regolare e scorrere il contenuto in modo dinamico in base a variabili in fase di esecuzione, quali le dimensioni della finestra, la risoluzione del dispositivo e le preferenze facoltative dell'utente. Una pagina Web è un esempio semplice di documento dinamico in cui il contenuto delle pagine viene formattato in modo dinamico per adattarsi alla finestra corrente. I documenti dinamici ottimizzano l'esperienza di visualizzazione e di lettura per l'utente, in base all'ambiente di runtime. Ad esempio, lo stesso documento dinamico verrà riformattato in modo dinamico per una leggibilità ottimale sia su dispositivi di visualizzazione da 19 pollici ad alta risoluzione sia su piccoli schermi PDA da 2 x 3 pollici. Tali documenti offrono inoltre numerose funzionalità incorporate, tra cui la ricerca, le modalità di visualizzazione che ottimizzano la leggibilità e la possibilità di modificare la dimensione e l'aspetto dei tipi di carattere. Per figure, esempi e informazioni approfondite sui documenti dinamici, vedere Cenni preliminari sui documenti dinamici.

Controlli dei documenti e layout del testo

In .NET Framework è disponibile un set di controlli precompilati che semplificano l'utilizzo di documenti statici, documenti dinamici e testo generico in un'applicazione. La visualizzazione del contenuto dei documenti statici è supportata tramite il controllo DocumentViewer. La visualizzazione del contenuto dei documenti dinamici è supportata da tre controlli: FlowDocumentReader, FlowDocumentPageViewer e FlowDocumentScrollViewer che eseguono il mapping su scenari utente diversi (vedere le sezioni riportate di seguito). Altri controlli WPF forniscono un layout semplificato per supportare l'utilizzo generale di testo (vedere la sezione Testo nell'interfaccia utente di seguito).

Controllo dei documenti statici: DocumentViewer

Il controllo DocumentViewer è progettato per visualizzare il contenuto di FixedDocument. Il controllo DocumentViewer offre un'interfaccia utente intuitiva con supporto incorporato per operazioni comuni, tra cui stampa dell'output, copia negli Appunti, zoom e funzionalità di ricerca nel testo. Il controllo consente di accedere a pagine di contenuto attraverso un meccanismo di scorrimento intuitivo. Come tutti i controlli WPF, DocumentViewer supporta la modifica completa o parziale dello stile, che consente l'integrazione visiva del controllo praticamente in qualsiasi applicazione o ambiente.

DocumentViewer è progettato per visualizzare il contenuto in sola lettura, mentre la modifica del contenuto non è disponibile e non è supportata.

Controlli dei documenti dinamici

Nota: per informazioni più dettagliate sulle funzionalità dei documenti dinamici e su come crearli, vedere Cenni preliminari sui documenti dinamici.

La visualizzazione del contenuto dei documenti dinamici è supportata da tre controlli: FlowDocumentReader, FlowDocumentPageViewer e FlowDocumentScrollViewer.

Controllo FlowDocumentReader

FlowDocumentReader include funzionalità che consentono all'utente di scegliere dinamicamente tra le varie modalità di visualizzazione, inclusa una modalità di visualizzazione a pagina singola (una pagina per volta), una a pagina doppia (formato di lettura libro) e una a scorrimento continuo (infinito). Per ulteriori informazioni su queste modalità di visualizzazione, vedere FlowDocumentReaderViewingMode. Se la possibilità di passare dinamicamente da una modalità di visualizzazione all'altra non è necessaria, i controlli FlowDocumentPageViewer e FlowDocumentScrollViewer forniscono visualizzatori di contenuto del flusso più semplici che sono fissi a una modalità di visualizzazione particolare.

Controlli FlowDocumentPageViewer e FlowDocumentScrollViewer

Il controllo FlowDocumentPageViewer visualizza il contenuto nella modalità di visualizzazione di una pagina alla volta mentre il controllo FlowDocumentScrollViewer visualizza il contenuto nella modalità di scorrimento continuo. FlowDocumentPageViewer e FlowDocumentScrollViewer rimangono fissi in una particolare modalità di visualizzazione. Effettuare il confronto con il controllo FlowDocumentReader, che include funzionalità che consentono all'utente di scegliere in modo dinamico tra le varie modalità di visualizzazione (fornite dall'enumerazione FlowDocumentReaderViewingMode), a discapito di un utilizzo di risorse maggiore rispetto a FlowDocumentPageViewer o FlowDocumentScrollViewer.

Per impostazione predefinita, viene sempre visualizzata una barra di scorrimento verticale e una barra di scorrimento orizzontale diventa visibile, se necessario. L'UI predefinita di FlowDocumentScrollViewer non include una barra degli strumenti, ma la proprietà IsToolBarVisible può essere utilizzata per abilitare una barra degli strumenti incorporata.

Testo nell'interfaccia utente

Oltre all'aggiunta di testo ai documenti, è ovviamente possibile utilizzare testo nell'interfaccia utente delle applicazioni, ad esempio nei form. WPF include più controlli per la creazione di testo sullo schermo. Ogni controllo è destinato a uno scenario diverso e dispone di un proprio elenco di funzionalità e limitazioni. In genere, è opportuno utilizzare l'elemento TextBlock quando è necessario un supporto limitato del testo, ad esempio una breve frase in un'user interface (UI). Quando è necessario un supporto minimo del testo, è possibile utilizzare Label. Per ulteriori informazioni, vedere Cenni preliminari sul controllo TextBlock.

Assemblaggio di documenti

Le APIs System.IO.Packaging costituiscono un mezzo efficace per organizzare i dati dell'applicazione, il contenuto dei documenti e le relative risorse in un unico contenitore portabile e facilmente accessibile e distribuibile. Un file ZIP è un esempio di un tipo di Package in grado di contenere più oggetti come unità singola. Le APIs di assemblaggio forniscono un'implementazione ZipPackage predefinita progettata tramite uno standard Open Packaging Conventions con architettura di file XML e ZIP. Le APIs di assemblaggio WPF semplificano la creazione di package, oltre all'archiviazione e all'accesso agli oggetti che contengono. Un oggetto archiviato in Package viene denominato PackagePart ("parte"). I package possono anche includere certificati digitali firmati utilizzabili per identificare il creatore di una parte e per confermare che il contenuto di un package non è stato modificato. I package includono inoltre una funzionalità PackageRelationship che consente l'aggiunta di ulteriori informazioni a un package o l'associazione di tali informazioni a parti specifiche senza modificare il contenuto delle parti esistenti. I servizi di package supportano anche Microsoft Windows Rights Management (RM).

L'architettura dei package WPF costituisce la base per numerose tecnologie chiave:

  • Documenti XPS conformi a XML Paper Specification (XPS).

  • Documenti in formato XML aperto di Microsoft Office "12" (docx)

  • Formati di archiviazione personalizzati per la progettazione delle applicazioni.

In base alle API di assemblaggio, un oggetto XpsDocument viene specificamente progettato per l'archiviazione di documenti statici di WPF. XpsDocument è un documento autonomo che può essere aperto in un visualizzatore, visualizzato in un controllo DocumentViewer, indirizzato a uno spool di stampa o stampato direttamente con una stampante compatibile con XPS.

Nelle sezioni riportate di seguito vengono fornite informazioni aggiuntive sugli oggetti Package e XpsDocument APIs forniti con WPF.

Componenti dei package

Le API di assemblaggio WPF consentono l'organizzazione dei dati delle applicazioni e dei documenti in un'unica unità portabile. Uno dei tipi di pacchetto più comuni è il file ZIP, il tipo predefinito fornito con WPF. Package è una classe astratta da cui viene implementato ZipPackage tramite l'architettura basata sugli standard aperti dei file XML e ZIP. Il metodo Open utilizza ZipPackage per creare e utilizzare file ZIP per impostazione predefinita. Un pacchetto può contenere tre tipi di elementi di base:

PackagePart

Contenuto di applicazioni, dati, documenti e file di risorse.

PackageDigitalSignature

Certificato X.509 per l'identificazione, l'autenticazione e la convalida.

PackageRelationship

Informazioni aggiunte relative al pacchetto o a una parte specifica.

PackagePart

PackagePart ("parte") è una classe astratta che fa riferimento a un oggetto archiviato in un oggetto Package. In un file ZIP, le parti del pacchetto corrispondono ai singoli file archiviati nel file ZIP. ZipPackagePart fornisce l'implementazione predefinita per gli oggetti serializzabili archiviati in un oggetto ZipPackage. Analogamente a un file system, le parti contenute nel pacchetto vengono archiviate secondo un'organizzazione di directory o cartelle di tipo gerarchico. Grazie alle API di assemblaggio WPF, è possibile scrivere, archiviare e leggere più oggetti PackagePart dalle applicazioni in un unico contenitore di file ZIP.

PackageDigitalSignature

Per motivi di sicurezza, un oggetto PackageDigitalSignature ("firma digitale") può essere associato alle parti di un pacchetto. PackageDigitalSignature incorpora un certificato 509 che fornisce due funzionalità:

  1. Identifica e autentica il creatore della parte.

  2. Conferma che la parte non è stata modificata.

La firma digitale non impedisce la modifica di una parte, ma il controllo di convalida della firma digitale avrà esito negativo se la parte è stata modificata. Nell'applicazione sarà quindi possibile intraprendere un'azione appropriata, ad esempio il blocco dell'apertura della parte o la notifica all'utente che la parte è stata modificata e non è sicura.

PackageRelationship

Un oggetto PackageRelationship ("relazione") offre un meccanismo per l'associazione di informazioni aggiuntive al pacchetto o a una relativa parte. Una relazione è una funzionalità a livello di pacchetto in grado di associare informazioni aggiuntive a una parte senza modificarne il contenuto. L'inserimento di nuovi dati direttamente nel contenuto della parte spesso non è un'operazione pratica:

  • Il tipo effettivo della parte e il relativo schema di contenuto non sono noti.

  • Anche se è noto, lo schema di contenuto potrebbe non offrire un metodo per l'aggiunta di nuove informazioni.

  • La parte potrebbe essere crittografata o firmata digitalmente, condizioni che impediscono qualsiasi modifica.

Le relazioni dei pacchetti offrono un metodo individuabile per aggiungere e associare ulteriori informazioni a singole parti o all'intero pacchetto. Le relazioni dei pacchetti vengono utilizzate per due funzioni principali:

  1. Definire le relazioni di dipendenza tra le parti.

  2. Definire le relazioni delle informazioni che aggiungono note o altri dati correlati alla parte.

PackageRelationship costituisce un modo rapido e individuabile per definire le dipendenze e aggiungere altre informazioni associate a una parte o all'intero pacchetto.

Relazioni di dipendenza

Le relazioni di dipendenza vengono utilizzate per descrivere le dipendenze tra le parti. Ad esempio, un pacchetto può contenere una parte HTML che include uno o più tag immagine <img>. I tag immagine fanno riferimento a immagini situate come altre parti interne o esterne al pacchetto (ad esempio accessibili tramite Internet). La creazione di un oggetto PackageRelationship associato con un file HTML consente di individuare e accedere alle risorse dipendenti in modo semplice e rapido. Un'applicazione browser o visualizzatore può accedere direttamente alle relazioni delle parti e avviare immediatamente l'assemblaggio delle risorse dipendenti senza conoscere lo schema, né analizzare il documento.

Relazioni delle informazioni

Simile a una nota o a un'annotazione, un oggetto PackageRelationship può anche essere utilizzato per archiviare altri tipi di informazioni da associare a una parte senza dover effettivamente modificare il contenuto della parte.

Documenti XPS

Un documento XML Paper Specification (XPS) è un pacchetto contenente uno o più documenti statici insieme a tutte le risorse e le informazioni necessarie per il rendering. XPS è anche il formato di file nativo dello spool di stampa di Windows Vista. XpsDocument viene archiviato in un dataset ZIP standard e può includere una combinazione di componenti XML e binari, ad esempio file di immagine e di tipi di carattere. Gli oggetti PackageRelationships vengono utilizzati per definire le dipendenze tra il contenuto e le risorse necessarie per eseguire il rendering completo del documento. La progettazione di XpsDocument offre una soluzione per documenti unica e ad alta fedeltà che supporta più utilizzi:

  • Lettura, scrittura e archiviazione di contenuto di documenti statici e risorse come un file singolo, portabile e facile da distribuire.

  • Visualizzazione di documenti con l'applicazione XPS Viewer.

  • Produzione di documenti nel formato di output nativo dello spool di stampa di Windows Vista.

  • Routing diretto dei documenti a una stampante compatibile con XPS.

Vedere anche

Riferimenti

FixedDocument

FlowDocument

XpsDocument

ZipPackage

ZipPackagePart

PackageRelationship

DocumentViewer

Concetti

Ottimizzazione delle prestazioni: testo

Cenni preliminari sui documenti dinamici

Cenni preliminari sulla stampa

Serializzazione e archiviazione di documenti