Fin dalla PDC ero rimasto affascinato da Metro, nome in codice ormai in disuso di XPS o XML Paper Specification. XPS descrive un documento in modo univoco e indipendente dal device che viene usato per rappresentarlo, sia esso un monitor una stampante o un PDA.
La prima domanda che tutti si fanno a questo punto è: "ma non c'era già il PDF"? Personalmente porto una certa anitpatia per il PDF per diversi motivi:
- è un formato privo di SDK ufficiale pubblico (e questo è il punto più grave)
- Acrobat reader è pesante, lento, crasha spesso, il suo processo rimane spesso in memoria anche a documento chiuso, e non più utilizzabile via automation (il sogno di ogni sviluppatore si infrange sull'activex).
- applicare (dal punto di vista del dev) la firma digitale richiede costose librerie di terze parti
- l'SDK è considerato inutile da quasi tutti i dev tanto che la maggior parte di librerie di terze parti non lo usano
- la licenza commericale di Ghostscript costa uno sparo
- di mille librerie per creare PDF alla fine quelle che valgono sono poche
Ma questi motivi non credo c'entrino in alcun modo con i motivi di uscita di XPS che ha dalla sua parte molti vantaggi:
- il formato del file è .ZIP standard
- le font embedded, le immagini e quant'altre risorse sono contenuto dentro questo contenitore in file separati, facili da identificare tramite la classe System.IO.Package
- le pagine sono rappresentate in XML, secondo le specifiche pubbliche sul sito MS, con un ricco object model che fa parte di WPF. Alla base della pagina c'è <FixedDocument ... />
- la firma digitale si applica in modo banale, sempre tramite WPF
- esiste un viewer anche per macchine prive di Framework.net
- molte stampanti multifunzione stanno implementando XPS nel firmware e quindi "digeriranno" direttamente questo formato. Il motivo è semplice, ci sono effetti grafici che il postscript non consente di ottenere e qui si dice quali.
- XPS è il formato nativo di spool in Vista
Ma (c'è sempre un ma) MS è stata costretta a non mettere PDF e XPS dentro Office 2007 ma rendere il plugin disponibile al download free (chissà perché, visto che OpenOffice invece può salvare PDF).
In questi giorni mi sono buttato sulla miriade di classi di XPS/WPF e devo dire che è tanto fantastico quanto immenso di possibilità.
Senza dilungarmi butto qui un hint: si descrive un documento con <FlowDocument />, lascia paginare a WPF il documento tramite un DynamicPaginator e si costruisce un <FixedDocument />. A questo punto ho un documento pronto all'uso che verrà sempre renderizzato in quel modo, qualsiasi sia il device. Cosa ci posso mettere dentro <FlowDocument />? Tutto quello che WPF offre
Io questa la chiamo innovazione.