Moin!
ich habe noch eine Frage zum Thema PdfSharp.
Es geht darum, dass ich mehrere einzelne Seiten erstellen möchte, die im Grunde immer fast immer gleich aufgebaut sind. Deshalb möchte ich Teile in Funktionen ablegen und das Ganze in eine Klasse legen.
So sieht es derzeit aus:
Die aufgerufene Klasse sieht nun wie folgt aus:
Wenn ich den Code ausführe bekomme ich folgende Meldung:
Kann mir einer weiterhelfen?
Gruß Jan
ich habe noch eine Frage zum Thema PdfSharp.
Es geht darum, dass ich mehrere einzelne Seiten erstellen möchte, die im Grunde immer fast immer gleich aufgebaut sind. Deshalb möchte ich Teile in Funktionen ablegen und das Ganze in eine Klasse legen.
So sieht es derzeit aus:
VB.NET-Quellcode
- Imports PdfSharp
- Imports PdfSharp.Drawing
- Imports PdfSharp.Pdf
- Public Class CreateGstDeck
- Private _PdfT As New EBL.PDF.PdfTools
- Public Sub Run()
- ' Create a new PDF document
- With _PdfT
- .Init() ' Dokument anlegen
- .CreateEmptyPage() 'Seite anlegen
- .CreateEblLogo() 'erstellen des Seitenlogos
- .SaveAndOpen("c:\temp\test.pdf")
- End With
- End Sub
- End Class
Die aufgerufene Klasse sieht nun wie folgt aus:
VB.NET-Quellcode
- Imports PdfSharp
- Imports PdfSharp.Drawing
- Imports PdfSharp.Pdf
- Public Class PdfTools
- Private _PdfPage As New PdfPage
- Private _PdfDocument As PdfDocument = New PdfDocument
- ''' <summary>
- ''' Mass in Millimeter
- ''' </summary>
- ''' <param name="Value"></param>
- ''' <returns>Mass in DPI</returns>
- <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
- Public Function Milli2Dpi(Value As Integer) As Integer
- If Value < 0 Then Return 0
- Return Value * k_DPI / k_milimetresPerInch
- End Function
- Public Sub Init(Optional Title As String = "EBL Deckblatt")
- _PdfDocument.Info.Title = Title
- End Sub
- Public Sub CreateEmptyPage(Optional Size As PageSize = PageSize.A4, Optional Orientation As PageOrientation = PageOrientation.Portrait)
- ' Create an empty page
- Dim _PdfPage As PdfPage = _PdfDocument.AddPage
- ' Formatierung des Dokumentes
- _PdfPage.Size = Size
- _PdfPage.Orientation = Orientation
- End Sub
- ''' <summary>
- ''' erstellen einer Datei und öffnen
- ''' </summary>
- ''' <param name="Filename">Pfad für die zu erstellenden Datei</param>
- ''' <param name="AutoStart">optional automatisches Öffnen der DLL im Anschluss (default: true)</param>
- Public Sub SaveAndOpen(Filename As String, Optional AutoStart As Boolean = True)
- ' Save the document...
- _PdfDocument.Save(Filename)
- ' ...and start a viewer.
- If AutoStart = True Then
- Process.Start(Filename)
- End If
- End Sub
- ''' <summary>
- ''' Ausgabe des Logos mit der Abteilungsbezeichnung
- ''' </summary>
- ''' <param name="Abteilung">optionaler Abteilungsname (default 70-3.11 Kataster)</param>
- ''' <remarks></remarks>
- Public Sub CreateEblLogo(Optional Abteilung As String = k_Kataster, Optional AbstandAsMMObenLogo As Integer = 40, Optional AbstandAsMMObenAbteilung As Integer = 58)
- ' Get an XGraphics object for drawing
- Dim gfx As XGraphics = XGraphics.FromPdfPage(_PdfPage)
- Dim Image As PdfSharp.Drawing.XImage = PdfSharp.Drawing.XImage.FromFile("\\local.ebhl.de\ebl-daten\Abteilung\EBL_SRL\ALLG\MapEdit\Logo_Luebeck_Entsorgungsbetriebe.jpg")
- Dim x As Double = (_PdfPage.Width.Point - Image.PixelWidth * k_DPI / Image.HorizontalResolution) / 2
- gfx.DrawImage(Image, x, Milli2Dpi(AbstandAsMMObenLogo))
- End Sub
- End Class
Wenn ich den Code ausführe bekomme ich folgende Meldung:
You cannot draw on a page that is not owned by a PdfDocument object System.ArgumentException
pageParametername
bei PdfSharp.Drawing.XGraphics..ctor(PdfPage page, XGraphicsPdfPageOptions options, XGraphicsUnit pageUnit, XPageDirection pageDirection)
bei PdfSharp.Drawing.XGraphics.FromPdfPage(PdfPage page)
Zeile 53 bei EBL.PDF.PdfTools.CreateEblLogo(String Abteilung, Int32 AbstandAsMMObenLogo, Int32 AbstandAsMMObenAbteilung) in C:\VSProjects\2019\EBL.PDF\EBL.PDF\EBL.PDF.Tools.vb
Kann mir einer weiterhelfen?
Gruß Jan