Oppure

Loading
23/04/12 19:06
Renny
Ciao..
Ok, ti allego la prova che sto facendo..
Si, quello che vorrei è utilizzare la preview per mostrare il MIO documento già bello che creato con tutta una serie di altre sub...
Della serie, come si imposta una proprietà: pagepreview.page = myGfx
NB: queste istruzioni non esistono :-|8-|
Ultima modifica effettuata da Renny 23/04/12 19:08
aaa
23/04/12 20:21
GrG
ok, allora vedi se così va bene (ti allego il progetto).

Dentro al progetto ho creato un nuovo modulo con dentro la funzione Disegna che prende come parametro un oggetto Xgraphics..

Non ho capito ancora bene perchè ma se crei prima l'oggetto Xgraphics e glielo passi non va, lo devi creare "sul momento"..

Sub Disegna:


    Public Sub Disegna(ByVal gfx As XGraphics)
        Dim font As XFont = New XFont("Verdana", 20, XFontStyle.Bold)

        ' Draw the text
        gfx.DrawString("Hello, World!", font, XBrushes.Black, 100, 100)
        gfx.Save()
    End Sub



Mentre nella sub renderPage:

    Public Sub renderPage(ByVal RenderGfx As PdfSharp.Drawing.XGraphics)
        Disegna(RenderGfx)
        RenderGfx.Save()
    End Sub


Quindi, quando viene richiamata renderPage viene richiamata la funzione Disegna che disegna sull'oggetto Xgraphics tutte le varie cose che vuoi te e poi ne mostra l'anteprima...

Se ad esempio vuoi fare in modo di mostrare cose variabili, come un testo dato in input su una textbox basta che modifichi il tutto tipo:

    Public Sub Disegna(ByVal gfx As XGraphics, ByVal text as String)
        Dim font As XFont = New XFont("Verdana", 20, XFontStyle.Bold)

        ' Draw the text
        gfx.DrawString(text, font, XBrushes.Black, 100, 100)
        gfx.Save()
    End Sub

    Public Sub renderPage(ByVal RenderGfx As PdfSharp.Drawing.XGraphics)
        Disegna(RenderGfx, Textbox1.text)
        RenderGfx.Save()
    End Sub


Dovrebbe andare.. in questo modo ti stampa un testo "dinamico"

Fammi sapere come va, certo non è la soluzione più elegante ma forse potrebbe andar bene :asd:
aaa
23/04/12 21:49
Renny
Ciao.
Intanto grazie per aver fatto questi esperimenti..
Si, funziona, però non è del tutto quello che mi serve. Perché l'oggetto gfx da visualizzare lo devo creare a partire dall'oggetto pdfdocument, che è il mio report... Perché è solo il mio oggetto pdfdocument che espone il metodo per salvare fisicamente il pdf.. E' proprio il procedimento che è al contrario: io vorrei prima creare il pdf nelle sue parti e poi eventualmente mostrarlo nella preview..
Credi che sia fattibile?

EDIT: guarda il codice collegato a quello che mi hai linkato ieri:
http://medatasolutions.net/CDS/code/Utilities/MELib/MELib.Printing/Printing/Report.vb

Ultima modifica effettuata da Renny 23/04/12 21:57
aaa
24/04/12 20:57
GrG
mm ho visto il codice.. ma vedo che utilizza una classe che va ereditata, per cui new non funziona..

purtroppo proveniendo da vb6 questi concetti ancora li devo imparare e ancora non li so usare, comunque per maggiori info guarda qua:
support.microsoft.com/kb/307222/…

aaa
24/04/12 21:25
Renny
Ciao..
Beh, ereditabile, significa che l'oggetto non può essere creato così com'è ma deve essere ereditata la classe da un'altra classe, derivata. La classe derivata può utilizzare i metodi e le proprietà della classe base e ampliarli e eventualmente definirlo.
L'esempio classico è la classe dei mammiferi e dei felini. Un gatto è un oggetto felini, che eredita una serie di caratteristiche "di base" dalla classe dei mammiferi. Creare un oggetto mammiferi non è possibile, senza passare per la classe felini, piuttosto che "canidi"..
Nella classe base viene definito
''' <summary>
    ''' Prints the page on the specified graphics object.
    ''' </summary>
    ''' <param name="gfx">The graphics on which to draw the page.</param>
    ''' <remarks>NOTE: gfx is specified as an Object because specifying it as an XGraphics object resulted in an error.</remarks>
    Protected MustOverride Sub PrintPage(ByVal gfx As Object)

Che poi diventa sub con codice nella classe che eredita da report.. Devo trovare la sub...
aaa
24/04/12 22:08
GrG
ok il concetto di ereditarietà ora è chiaro.. ma non ho capito se quel codice ti funziona o meno, e che intendi per "Devo trovare la sub..." ?
aaa
24/04/12 22:30
Renny
No.. in realtà il codice funziona nel senso che non da errori. Ma non fa quello che vorrei io, perché non mostra il gfx del mio pdf. E non so come fare. Forse c'è qualche metodo per far si che il gfx passato dalla sub render "coincida" con il gfx del mio documento..
Bisognerebbe scrivere all'autore delle librerie, sul suo forum...

EDIT: ho scritto 3 righe sul forum degli autori della libreria.. Vediamo che dicono. Quello che non capisco è se sono l'unico che ha avuto questo problema fin'ora.. Ma mi pare impossibile...
Ultima modifica effettuata da Renny 25/04/12 11:16
aaa
25/04/12 12:21
GrG
Postato originariamente da Renny:

No.. in realtà il codice funziona nel senso che non da errori. Ma non fa quello che vorrei io, perché non mostra il gfx del mio pdf. E non so come fare. Forse c'è qualche metodo per far si che il gfx passato dalla sub render "coincida" con il gfx del mio documento..


Purtroppo non riesco neanche io a comprendere appieno il codice.. pensavo che dire RenderGfx = Form1.gfx avrebbe funzionato, invece non è così e non so bene perchè... mi spiace di non esserti stato d'aiuto

EDIT: ho scritto 3 righe sul forum degli autori della libreria.. Vediamo che dicono.


Si, credo sia la scelta più saggia, fammi sapere, sono curioso anch'io :D
aaa