locked
[Silverlght 4] PrintDocument, HasMorePages, Spooling RRS feed

  • Domanda

  • Salve a tutti volevo sottoporvi il problema che mi è sorto nel tentare di stampare delle informazioni con silverlight.

    Vi illustro la situazione:
    ho il mio printdocument che deve stampare il contenuto di una Grid.

    nell'evento PrintPage inserisco il seguente codice

    e.HasMorePages = True
    e.PageVisual = MiaGridDaStampare

    Il problema che sorge è che si blocca sullo spooling infatti aprendo le proprietà della stampante (in questo caso il XPS document Writer)
    nello stato mi dice Spooling in corso e in più le pagine da stampare aumentano sempre, quando poi il tutto dovrebbe essere al massimo 2,3 pagine.

    Il fatto strano e che se imposto
    e.HasMorePages = False

    funziona correttamente anche se non mi stampa tutte le pagine necessarie.

    Vi è già capitato questo problema?
    Dove sto sbagliando?
    Come potrei risolvere?

    Vi ringrazio per il vostro aiuto

    Francesco Valentino

    martedì 5 luglio 2011 10:06

Tutte le risposte

  • Ciao, il tuo problema potrebbe dipendere dal fatto che lo spooler rimane in attesa perchè si aspetta più pagine.

    guarda se questo ti può essere utile http://www.silverlightshow.net/items/Advanced-printing-in-Silverlight-4.aspx

    la tua esigenza qual'è? devi stampare una sola griglia o più griglie?


    MCTS: Silverlight 4, Development
    mercoledì 6 luglio 2011 05:57
  • La mia esigenza è  stampare una grid che al suo interno contine degli oggetti.

    La grid e supportata da un srollViewer.

    La stampa comunqe e della sola grid e il tutto dovrebbero essere 3 pagine.

     

    Ho verificato anche l'articolo che avevo già precedentemente visionato durante il googlemento ma penso che si riferisca a qualche altra cosa in quanto in silverlight 4 io non trovo questo codice

       PrintPage page = new PrintPage();
       page.SetHeaderAndFooterText(headerTextBox.Text, footerTextBox.Text);

    in silvelight 4 c'è il printdocument ma non trovo nessun oggetto come printpage o che esponga le stesse proprietà, o forse non sono riuscito a capire le informazioni esposte.

    Avevo pensato anche io che il problemma fosse dovuto al fatto che una volta inviato lo spool delle pagine necessarie la proprietà hasmorpages non si autosetta a false.

    Come mai?

     

    Francesco Valentino

     

     

    mercoledì 6 luglio 2011 06:06
  • Ho trovato la soluzione in questo modo

            pagina = FileStampare.PrintedPageCount
            pagine = printablepage.ActualHeight / e.PrintableArea.Height
            e.PageVisual = printablepage
            e.HasMorePages = Fix(pagine) <> pagina

    ma il problema è che mi stampa cinque fogli uguali, corrispondenti alla stessa pagina

    Questo è il codice xmal del mio progetto

    <Grid x:Name="LayoutRoot" Background="White">
            <Button Content="Button" Height="23" Name="Button1" Width="75" Margin="12,3,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" />         
            <ScrollViewer Margin="0,25,0,0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Name="scr">
                    <Grid Margin="0,25,0,0" Name="printablepage">
                        <TextBlock Height="21" HorizontalAlignment="Left" Margin="10,6,0,0" Name="numberpage" Text="TextBlock" VerticalAlignment="Top" Width="67" />
                        <StackPanel Height="Auto" HorizontalAlignment="Stretch" Margin="20,25,20,20" Name="Contenitore" VerticalAlignment="Stretch" Width="Auto" Orientation="Vertical" Background="{x:Null}"></StackPanel>
                    </Grid>
            </ScrollViewer>
            <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="157,3,0,0" Name="Button2" VerticalAlignment="Top" Width="75" />
        </Grid>

    Tengo a precisare che il contenuto dello stackpanel viene popolato a runtime con delle textblock, button, liste, maps, ecc.

    Dove sbaglio?

    Potreste aiutarmi in merito?

    Vi ringrazio per il vostro aiuto.

    Francesco Valentino

     

     

     

     

    mercoledì 6 luglio 2011 07:54