Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF: Stampare documenti FlowDocument con Visual Basic 2008

In un precedente post abbiamo visto come sia semplice, in Windows Presentation Foundation, stampare controlli dell’interfaccia. Ma probabilmente lo scenario più comune è quello della stampa dei documenti che, in WPF, è altrettanto semplice.

 

Si fa ricorso anche in questo caso alla classe PrintDialog, ma questa volta il metodo da utilizzare si chiama PrintDocument. In particolare è possibile utilizzarlo per stampare i FlowDocument, quel particolare tipo di documenti WPF che hanno la caratteristica della dinamicità e della riadattabilità nel layout. Se avete letto il mio libro su .NET Framework 3.x (a proposito, siete in tantissimi, grazie J) ne avete visto un esempio.

 

Partiamo quindi dalla base, un FlowDocument che riporterà, in questo specifico esempio, parte del testo del mio ultimo articolo su ADO.NET Data Services per VB T&T. Creato un nuovo progetto WPF in Visual Basic 2008, digitate il seguente XAML (o, se preferite, potete limitare il testo del documento):

 

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition/>

            <RowDefinition Height="30"/>

        </Grid.RowDefinitions>

       

        <FlowDocumentReader Grid.Row="0">

            <FlowDocument Name="flowDoc" FontFamily="Verdana" FontSize="12"

                          TextAlignment="Justify"

                            IsOptimalParagraphEnabled="True"

                            IsHyphenationEnabled="True"

                            IsColumnWidthFlexible="True"

                            ColumnWidth="300"

                            ColumnGap="20"

                            Background="White">

                <Paragraph FontWeight="Bold">

                    Introduzione agli ADO.NET Data Services con Visual Basic 2008 - Seconda parte: il client WPF</Paragraph>

                <Paragraph Foreground="Red">

                    a cura di Alessandro Del Sole (requisiti: conoscenze di base su LINQ, WPF e WCF)</Paragraph>

                <Paragraph FontWeight="Bold">

                    Introduzione

                </Paragraph>

                <Paragraph>

                Nella

<Hyperlink NavigateUri="http://www.visual-basic.it/areaarticoli.asp?articolo=adsAdoNetDataServices1.htm">prima parte</Hyperlink> di questa mini serie di articoli introduttivi agli ADO.NET Data Services in Visual Basic 2008, abbiamo visto come creare con Visual Studio un servizio basato su WCF per esporre in rete dei dati attraverso un approccio REST (REpresentational State Transfer) sfruttando il modello a oggetti offerto da ADO.NET Entity Framework.

 

In questa seconda parte completeremo l'introduzione all'argomento passando alla creazione di un'applicazione client basata su Windows Presentation Foundation e faremo utilizzo di LINQ to Data Services per interrogare i dati.

 

Vedremo aspetti decisamente interessanti della creazione di applicazioni data-centric con WPF, ma il codice da scrivere stavolta non sarà poco e richiederà una certa dimestichezza con WPF e LINQ, poiché, essendo di media complessità, non potremo soffermarci a spiegare ogni aspetto delle menzionate tecnologie. Ci soffermeremo in particolare su tutto ciò che riguarda gli ADO.NET Data Services, limitandoci ad accenni su tutto il resto.

 

Anche in questo caso potete utilizzare le edizioni Express di Microsoft Visual Studio 2008.

Con riferimento a quanto visto la volta precedente, è possibile utilizzare Visual Web Developer Express per creare il servizio, mentre, con riferimento al presente articolo, è possibile utilizzare Visual Basic 2008 Express che permette di creare le applicazioni client alle quali è possibile aggiungere riferimenti ai servizi WCF.

                </Paragraph>

            </FlowDocument>

        </FlowDocumentReader>

        <Button Width="100" Height="25" Grid.Row="1" Content="Print" Name="Button1" />

    </Grid>

 

Come ricorderete, ogni FlowDocument dev’essere contenuto in un controllo in grado di visualizzarlo e il FlowDocumentReader è uno di questi. Inoltre, ciascun FlowDocument è costituito da tanti Paragraph, ciascuno dei quali è personalizzabile utilizzando le apposite proprietà. La formattazione del documento è abbastanza semplice, poiché ci interessa in particolare vedere come avviene la stampa più che la formattazione del testo. Mi limito a sottolineare l’utilizzo di un HyperLink direttamente nel testo per aggiungere un collegamento ipertestuale secondo il classico stile di XAML.

Il designer WPF di Visual Studio 2008 si presenta, quindi, come in figura:

 

 

 

Ora passiamo al file di code-behind, Window1.xaml.vb, per definire il gestore di evento Click del pulsante di stampa:

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

        Dim pDialog As New PrintDialog

 

        If pDialog.ShowDialog = True Then

 

            Dim paginator As DocumentPaginator = CType(flowDoc, IDocumentPaginatorSource).DocumentPaginator

 

            pDialog.PrintDocument(paginator, "Test printing")

        End If

    End Sub

 

Il DocumentPaginator è un oggetto che permette di creare elementi a più pagine a partire da un singolo documento ed è il tipo di oggetto supportato dal metodo PrintDocument, pertanto si rende necessaria la conversione appena vista nel codice.

 

Se provate ad avviare l’applicazione di esempio, potete fare clic sul pulsante Print per stamparlo. La figura seguente mostra il risultato della stampa del FlowDocument tramite la stampante virtuale di Windows per documenti XPS:

 

 

Semplice, no? J

 

Alessandro

Print | posted on mercoledì 24 dicembre 2008 14:49 | Filed Under [ Visual Basic Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET