Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET]Pdfsharp sample in C#
Forum - C# / VB.NET - [VB.NET]Pdfsharp sample in C#

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 13:22
Domenica, 22/04/2012
Ciao a tutti.
Sto lavorando a un progetto e per creare dei moduli stampabili ho utilizzato questa libreria, a dir poco splendida:
http://www.pdfsharp.net/wiki/MainPage.ashx
Per creare il pdf non ci sono problemi, riesco a fare tutto, disegnare, scrivere, salvare ecc
Ora però volevo aggiungere al mio form un oggetto pagepreview, come nel sample a questa pagine:
http://www.pdfsharp.net/wiki/Preview-sample.ashx
Nel file di download della libraria sono allegati anche i sorgenti dei sample del sito, ma sono scritti in C#, che conosco molto poco. In più sul mio sistema ho solo il compilatore per VB.NET. Ho provato a cercare di capire come funziona il codice, a convertirlo in vb, ma non potendo eseguirlo in debug, non capisco il meccanismo.
Vi chiedo, qualcuno può aprire il progetto in allegato e salvarmi/convertirmi il sorgente in VB.NET ?
Mi basta questo, poi vedo io di studiarmelo, e capirlo.. grazie mille! :k:

PS: sono necessarie le librerie dll di pdfsharp, reperibili free sul sito

Ultima modifica effettuata da Renny il 22/04/2012 alle 13:23
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 15:14
Domenica, 22/04/2012
ok, premetto di non essermi scaricato le librerie ne di aver testato il codice..

questa è una conversione fatta "ad occhio" ma che dovrebbe andare:

Codice sorgente - presumibilmente VB.NET

  1. Dim rect As XRect
  2.     Dim pen As XPen
  3.     Dim x As Double = 50
  4.     Dim y As Double = 100
  5.     Dim fontH1 As XFont = New XFont("Times", 18, XFontStyle.Bold)
  6.     Dim font As XFont = New XFont("Times", 12)
  7.     Dim fontItalic As XFont = New XFont("Times", 12, XFontStyle.BoldItalic)
  8.     Dim ls As Double = font.GetHeight(gfx)
  9.     'Draw some text
  10.     gfx.DrawString("Create PDF on the fly with PDFsharp", fontH1, XBrushes.Black, x, x)
  11.     gfx.DrawString("With PDFsharp you can use the same code to draw graphic, text and images on different targets.", font, XBrushes.Black, x, y)
  12.     y += ls
  13.     gfx.DrawString("The object used for drawing is the XGraphics object.", font, XBrushes.Black, x, y)
  14.     y += 2 * ls
  15.     'Draw an arc
  16.     pen = new XPen(XColors.Red, 4)
  17.     pen.DashStyle = XDashStyle.Dash
  18.     gfx.DrawArc(pen, x + 20, y, 100, 60, 150, 120)
  19.     'Draw a star
  20.     Dim gs As XGraphicsState = gfx.Save()
  21.     gfx.TranslateTransform(x + 140, y + 30)
  22.     Dim idx As Integer = 0
  23.     while (idx<360)
  24.         gfx.RotateTransform(10)
  25.         gfx.DrawLine(XPens.DarkGreen, 0, 0, 30, 0)
  26.         idx+=10
  27.     end while
  28.     gfx.Restore(gs)
  29.     'Draw a rounded rectangle
  30.     rect = new XRect(x + 230, y, 100, 60)
  31.     pen = new XPen(XColors.DarkBlue, 2.5)
  32.     Dim color1 As XColor = XColor.FromKnownColor(KnownColor.DarkBlue)
  33.     Dim color2 As XColor = XColors.Red
  34.     Dim lbrush As XLinearGradientBrush = New XLinearGradientBrush(rect, color1, color2, XLinearGradientMode.Vertical)
  35.     gfx.DrawRoundedRectangle(pen, lbrush, rect, new XSize(10, 10))
  36.     'Draw a pie
  37.     pen = new XPen(XColors.DarkOrange, 1.5)
  38.     pen.DashStyle = XDashStyle.Dot
  39.     gfx.DrawPie(pen, XBrushes.Blue, x + 360, y, 100, 60, -130, 135)
  40.     'Draw some more text
  41.     y += 60 + 2 * ls
  42.     gfx.DrawString("With XGraphics you can draw on a PDF page as well as on any System.Drawing.Graphics object.", font, XBrushes.Black, x, y)
  43.     y += ls * 1.1
  44.     gfx.DrawString("Use the same code to", font, XBrushes.Black, x, y)
  45.     x += 10
  46.     y += ls * 1.1
  47.     gfx.DrawString("• draw on a newly created PDF page", font, XBrushes.Black, x, y)
  48.     y += ls
  49.     gfx.DrawString("• draw above or beneath of the content of an existing PDF page", font, XBrushes.Black, x, y)
  50.     y += ls
  51.     gfx.DrawString("• draw in a window", font, XBrushes.Black, x, y)
  52.     y += ls
  53.     gfx.DrawString("• draw on a printer", font, XBrushes.Black, x, y)
  54.     y += ls
  55.     gfx.DrawString("• draw in a bitmap image", font, XBrushes.Black, x, y)
  56.     x -= 10
  57.     y += ls * 1.1
  58.     gfx.DrawString("You can also import an existing PDF page and use it like an image, e.g. draw it on another PDF page.", font, XBrushes.Black, x, y)
  59.     y += ls * 1.1 * 2
  60.     gfx.DrawString("Imported PDF pages are neither drawn nor printed; create a PDF file to see or print them!", fontItalic, XBrushes.Firebrick, x, y)
  61.     y += ls * 1.1
  62.     gfx.DrawString("Below this text is a PDF form that will be visible when viewed or printed with a PDF viewer.", fontItalic, XBrushes.Firebrick, x, y)
  63.     y += ls * 1.1
  64.     Dim state As XGraphicsState = gfx.Save()
  65.     Dim rcImage As XRect = New XRect(100, y, 100, 100 * Math.Sqrt(2))
  66.     gfx.DrawRectangle(XBrushes.Snow, rcImage)
  67.     gfx.DrawImage(XPdfForm.FromFile("../../../../../PDFs/SomeLayout.pdf"), rcImage)
  68.     gfx.Restore(state)



Questo codice va inserito in qualche sub

Se hai problemi fammi sapere che provvederò a mettere la pigrizia da parte e proverò a testare di persona :asd:

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 16:13
Domenica, 22/04/2012
Ok.. ho trovato un sito dove poter convertire il codice da C# a vb.net.
Quello che non riesco è creare un progetto funzionante in tutte le sue parti perché mi da problemi con gli eventi..
C'è tutta una parte che utilizza i delegate che non conosco..
Se mi dite dove posso caricare il progetto, lo uplodo, così ci date un'occhiata..
...

Ultima modifica effettuata da Renny il 22/04/2012 alle 17:22
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 18:27
Domenica, 22/04/2012
lo puoi uppare direttamente qui..
al prossimo post di risposta sotto alla finestra per scrivere il messaggio e ai vari smail c'è il pulsante "Scegli file".

Da lì scegli file e clicchi invia ;) (attento che il formato rar non è valido quindi comprimilo in zip)

p.s. mi sta venendo un dubbio, forse è un'opzione abilitata solo ai membri ma credo di no, comunque prova

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 18:38
Domenica, 22/04/2012
Io avevo caricato un rar, infatti.. Però non ha senso zip si e rar no..
Studiando il codice, il nocciolo della questione è questo:
Codice sorgente - presumibilmente VB.NET

  1. Public Shared Sub Main()
  2.             Dim renderer As New Foglio()
  3.             Dim form As New PreviewForm()
  4.             form.RenderEvent = New PagePreview.RenderEvent(AddressOf renderer.Disegna)
  5.             Application.Run(form)
  6.         End Sub


Ho impostato il project, in modo che parta su sub main e ok.
Il form di preview è form, render è la classe che contiene l'istruzione sub Disegna, che è quella che hai convertito tu e che contiene del semplice codice per creare il mio pdf. Quello che non mi è chiaro è il passaggio "form.RenderEvent = .." e il fatto che la sub Disegna della classe render ha come parametro di input un oggetto xgraphics, che non so chi glielo passa..
Se riesci a compilare il progetto e a farmi sapere qualcosa.. A me basta utilizzare l'oggetto pagepreview per fargli mostrare il pdf che creo io, di cui ho già tutto il codice fatto..
Grazie :k:


Renny ha allegato un file: Preview.zip (15318 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 19:51
Domenica, 22/04/2012
ok, sto provando il sorgente anche se è in C# e non in VB.NET come mi aspettavo (dato che avevi detto che stavi lavorando con vb no?)

comunque sia (a parte un errore di distrazione) vedo che non mi viene riconosciuto PagePreview, è questo l'errore che non ti è chiaro?

Edit: Non so perchè ma è come se mi mancasse una libreria.. mm non gli va bene il framework che ho, ma non capisco come mai con vb 2010 mi referenzia correttamente le librerie..

Edit: Comunque ho trovato questo codice in vb che dovrebbe fare la preview:
http://medatasolutions.net/CDS/code/Utilities/MELib/MELib. ...

Ultima modifica effettuata da GrG il 22/04/2012 alle 20:32
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 22:56
Domenica, 22/04/2012
Ciao
Eh, si, il codice che ho trovato fa parte dei sample delle librerie e sono in C#, linguaggio che conosco poco e del quale non ho il compilatore. A me serviva avere lo stesso progetto scritto in vb.net, in modo da potermelo studiare e capire.
Quello che ho fatto è stato convertire i 2 file del sample, program.cs e previewform.cs tramite questo sito http://www.developerfusion.com/tools/convert/csharp-to-vb/
Ho creato quindi un nuovo progetto in vb.net, nel codice del form ho aggiunto il codice di previewform e in una classe separata ho messo program, dove c'è la sub main che viene eseguita all'avvio del progetto.
Gli errori che rilevo sono qua:

''' <summary>
        ''' Create a new PDF document and start the viewer.
        ''' </summary>
        Private Sub MakePdf()
            Dim filename As String = Guid.NewGuid().ToString().ToUpper() & ".pdf"
            Dim document As New PdfDocument(filename)
            document.Info.Creator = "Preview Sample"
            Dim page As PdfPage = document.AddPage()
            page.Size = PageSize.A4
            Dim gfx As XGraphics = XGraphics.FromPdfPage(page)

            'RaiseEvent renderEvent(gfx) <- non esiste l'evento renderEvent(gfx)
            document.Close()
            Process.Start(filename)
        End Sub

'e in questa funzione
Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
            Dim graphics As Graphics = ev.Graphics
            graphics.PageUnit = GraphicsUnit.Point
            Dim gfx As XGraphics = XGraphics.FromGraphics(graphics, PageSizeConverter.ToSize(PageSize.A4))
            'RaiseEvent renderEvent(gfx)
            ev.HasMorePages = False
        End Sub

Quando faccio il debug, commentando le istruzioni, il codice funziona. Quello che non capisco è però perché e come adattarlo. Io ho nel mio progetto una funzione che crea il new document pdf e il gfx conseguente. Vorrei quindi passare il mio gfx per mostrare l'anteprima.
Ora studio io pezzo di codice che hai linkato, anche se ad occhio sembra la conversione in .net di previewform.
Ciao e grazie.

EDIT 1
Allora, ho fatto un po' di prove sono riuscito a far funzionare in parte il controllo pagepreview.
Il nocciolo è questo:
Codice sorgente - presumibilmente Plain Text

  1. SetRenderEvent(New PdfSharp.Forms.PagePreview.RenderEvent(AddressOf report.RenderPage))


Che imposta l'esecuzione dell'evento render tramite un delegate (giusto?) puntando alla sub renderpage dell'oggetto report.
Su un altro form ho la classe report e la sub renderpage. Come parametro di input la sub prevede un oggetto Xgraphics e al suo interno ho delle istruzioni per disegnare e scrivere sull'oggetto di tipo Xgraphics. Quello che non capisco è
-da dove salta fuori sto oggetto, cioè, dov'è che viene inizializzato? Io ho già il mio oggetto Xgraphics, che uso per creare i miei report, a partire dal documento pdf.
-Come faccio a far mostrare il MIO oggetto Xgraphics, già creato e scritto? :_doubt:

Ultima modifica effettuata da Renny il 23/04/2012 alle 12:06
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 19:54
Lunedì, 23/04/2012
mm... non ho le idee molto chiare, visto che ora l'hai convertito in vb.net (quindi dovrebbe andare anche a me) ti dispiacerebbe allegarlo così lo provo direttamente?

Testo quotato


Io ho già il mio oggetto Xgraphics, che uso per creare i miei report, a partire dal documento pdf.
-Come faccio a far mostrare il MIO oggetto Xgraphics, già creato e scritto?



mmm.. sottolinei "mio" cioè vuoi dire che mostri un oggetto Xgraphics differente?

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 21:06
Lunedì, 23/04/2012
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-|


Renny ha allegato un file: ProvaPreview.zip (524318 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Renny il 23/04/2012 alle 21:08
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo