PDFSharp - kapseln von Funktionen für die Seitenerstellung

  • VB.NET

    PDFSharp - kapseln von Funktionen für die Seitenerstellung

    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:

    VB.NET-Quellcode

    1. Imports PdfSharp
    2. Imports PdfSharp.Drawing
    3. Imports PdfSharp.Pdf
    4. Public Class CreateGstDeck
    5. Private _PdfT As New EBL.PDF.PdfTools
    6. Public Sub Run()
    7. ' Create a new PDF document
    8. With _PdfT
    9. .Init() ' Dokument anlegen
    10. .CreateEmptyPage() 'Seite anlegen
    11. .CreateEblLogo() 'erstellen des Seitenlogos
    12. .SaveAndOpen("c:\temp\test.pdf")
    13. End With
    14. End Sub
    15. End Class


    Die aufgerufene Klasse sieht nun wie folgt aus:

    VB.NET-Quellcode

    1. Imports PdfSharp
    2. Imports PdfSharp.Drawing
    3. Imports PdfSharp.Pdf
    4. Public Class PdfTools
    5. Private _PdfPage As New PdfPage
    6. Private _PdfDocument As PdfDocument = New PdfDocument
    7. ''' <summary>
    8. ''' Mass in Millimeter
    9. ''' </summary>
    10. ''' <param name="Value"></param>
    11. ''' <returns>Mass in DPI</returns>
    12. <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
    13. Public Function Milli2Dpi(Value As Integer) As Integer
    14. If Value < 0 Then Return 0
    15. Return Value * k_DPI / k_milimetresPerInch
    16. End Function
    17. Public Sub Init(Optional Title As String = "EBL Deckblatt")
    18. _PdfDocument.Info.Title = Title
    19. End Sub
    20. Public Sub CreateEmptyPage(Optional Size As PageSize = PageSize.A4, Optional Orientation As PageOrientation = PageOrientation.Portrait)
    21. ' Create an empty page
    22. Dim _PdfPage As PdfPage = _PdfDocument.AddPage
    23. ' Formatierung des Dokumentes
    24. _PdfPage.Size = Size
    25. _PdfPage.Orientation = Orientation
    26. End Sub
    27. ''' <summary>
    28. ''' erstellen einer Datei und öffnen
    29. ''' </summary>
    30. ''' <param name="Filename">Pfad für die zu erstellenden Datei</param>
    31. ''' <param name="AutoStart">optional automatisches Öffnen der DLL im Anschluss (default: true)</param>
    32. Public Sub SaveAndOpen(Filename As String, Optional AutoStart As Boolean = True)
    33. ' Save the document...
    34. _PdfDocument.Save(Filename)
    35. ' ...and start a viewer.
    36. If AutoStart = True Then
    37. Process.Start(Filename)
    38. End If
    39. End Sub
    40. ''' <summary>
    41. ''' Ausgabe des Logos mit der Abteilungsbezeichnung
    42. ''' </summary>
    43. ''' <param name="Abteilung">optionaler Abteilungsname (default 70-3.11 Kataster)</param>
    44. ''' <remarks></remarks>
    45. Public Sub CreateEblLogo(Optional Abteilung As String = k_Kataster, Optional AbstandAsMMObenLogo As Integer = 40, Optional AbstandAsMMObenAbteilung As Integer = 58)
    46. ' Get an XGraphics object for drawing
    47. Dim gfx As XGraphics = XGraphics.FromPdfPage(_PdfPage)
    48. Dim Image As PdfSharp.Drawing.XImage = PdfSharp.Drawing.XImage.FromFile("\\local.ebhl.de\ebl-daten\Abteilung\EBL_SRL\ALLG\MapEdit\Logo_Luebeck_Entsorgungsbetriebe.jpg")
    49. Dim x As Double = (_PdfPage.Width.Point - Image.PixelWidth * k_DPI / Image.HorizontalResolution) / 2
    50. gfx.DrawImage(Image, x, Milli2Dpi(AbstandAsMMObenLogo))
    51. End Sub
    52. 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