MS Sichtbeleg

This commit is contained in:
Developer01 2025-02-12 14:09:53 +01:00
parent 99f954d406
commit 70765af22b
2 changed files with 89 additions and 56 deletions

View File

@ -30,5 +30,5 @@ Imports System.Runtime.InteropServices
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
' übernehmen, indem Sie "*" eingeben:
<Assembly: AssemblyVersion("2.7.0.0")>
<Assembly: AssemblyFileVersion("2.7.0.0")>
<Assembly: AssemblyVersion("2.8.0.0")>
<Assembly: AssemblyFileVersion("2.8.0.0")>

View File

@ -14,6 +14,10 @@ Public Class XRechnungViewDocument
Private ReadOnly _filesystem As FilesystemEx
Private ReadOnly _file As ZUGFeRD.FileFunctions
Private ReadOnly _gdpictureLicenseKey As String
Private fontResName As String
Private fontResNameBold As String
Private fontResNameItalic As String
Private MyGDPicturePDF As GdPicturePDF
Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer, GDPictureLicenseKey As String)
_logConfig = LogConfig
@ -45,36 +49,28 @@ Public Class XRechnungViewDocument
File.Delete(oOutputPath)
End If
Dim gdpicturePDF As GdPicturePDF = New GdPicturePDF()
gdpicturePDF.NewPDF(PdfConformance.PDF_A_2a)
Dim ostatus As GdPictureStatus = gdpicturePDF.NewPDF()
If ostatus <> GdPictureStatus.OK Then
_logger.Warn($"Error initializing PDF: {ostatus}")
MyGDPicturePDF = New GdPicturePDF()
MyGDPicturePDF.NewPDF(PdfConformance.PDF_A_2a)
Dim oPDFStatus As GdPictureStatus = MyGDPicturePDF.NewPDF()
If oPDFStatus <> GdPictureStatus.OK Then
_logger.Warn($"Error initializing PDF: {oPDFStatus}")
Return Nothing
End If
gdpicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft)
gdpicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter)
gdpicturePDF.SetLineWidth(1)
Dim fontResName = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica)
Dim fontResNameBold = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold)
Dim fontResNameItalic = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBoldOblique)
gdpicturePDF.SetTitle("xInvoice VisualReceipt")
gdpicturePDF.SetAuthor("Digital Data GmbH, Heuchelheim")
MyGDPicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft)
MyGDPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter)
MyGDPicturePDF.SetLineWidth(1)
fontResName = MyGDPicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica)
fontResNameBold = MyGDPicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold)
fontResNameItalic = MyGDPicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBoldOblique)
MyGDPicturePDF.SetTitle("xInvoice VisualReceipt")
MyGDPicturePDF.SetAuthor("Digital Data GmbH, Ludwig Rinn Str. 16, 35452 Heuchelheim")
'Create a New page
gdpicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4)
'Draw content on the PDF
Dim yPosition As Integer = 15
gdpicturePDF.SetTextSize(18)
gdpicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt")
yPosition += 10
gdpicturePDF.SetTextSize(10)
gdpicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row1)
yPosition += 5
gdpicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row2)
yPosition += 5
gdpicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row1)
yPosition += 5
gdpicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row2)
MyGDPicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4)
' Dim oCurrent As Integer = MyGDPicturePDF.GetCurrentPage()
Dim yPosition As Integer = Create_PageHeader(False)
Create_PageFooter()
Dim oArea As String = ""
Dim oIsPosition As Boolean = False
Dim oPosCount = 0
@ -89,12 +85,35 @@ Public Class XRechnungViewDocument
Dim oItemValue As String = oRow.Item("ITEM_VALUE")
Dim oDisplay As Boolean = oRow.Item("Display")
Dim oAreaSwitch As Boolean = False
If oRow.Item("Area") = "INTERNAL" Then
If oItemSPECNAME = "STATIC_Y_SWITCH" Then
yPosition = oItemValue
End If
End If
If yPosition >= 270 Then
oPDFStatus = MyGDPicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4)
If oPDFStatus <> GdPictureStatus.OK Then
_logger.Warn($"Could not create a second page. The error was: {oPDFStatus}")
Exit For
Else
yPosition = Create_PageHeader(True)
Create_PageFooter()
End If
'oCurrent = MyGDPicturePDF.GetCurrentPage()
End If
If oRow.Item("Area") = "INTERNAL" Then
_logger.Debug($"Next Item as Area is internal")
Continue For
End If
_logger.Debug($"Working on SPEC_NAME: {oItemSPECNAME}")
If oArea <> oRow.Item("Area") Then
'########## AREA WECHSEL ###########
oAreaSwitch = True
oArea = oRow.Item("Area")
_logger.Debug($"Area-Switch to: {oArea}")
Dim oAREACaption As String
If oArea = "TYPE" Then
oAREACaption = $"{Return_InvType(oItemValue)} [{oItemValue}]"
@ -119,15 +138,15 @@ Public Class XRechnungViewDocument
If Not oAREACaption = String.Empty Then
'erste Area-Linie
yPosition += 5
gdpicturePDF.DrawLine(10, yPosition, 125, yPosition)
MyGDPicturePDF.DrawLine(10, yPosition, 125, yPosition)
'gdpicturePDF.DrawText(fontResName, 10, yPosition, XRechnungStrings.Seperator_Line)
yPosition += 5
'Area caption
gdpicturePDF.DrawText(fontResNameBold, 10, yPosition, oAREACaption)
MyGDPicturePDF.DrawText(fontResNameBold, 10, yPosition, oAREACaption)
yPosition += 5
If oArea = "TYPE" Then
gdpicturePDF.DrawLine(10, yPosition, 125, yPosition)
MyGDPicturePDF.DrawLine(10, yPosition, 125, yPosition)
' gdpicturePDF.DrawText(fontResName, 10, yPosition, XRechnungStrings.Seperator_Line)
yPosition += 5
End If
@ -159,6 +178,7 @@ Public Class XRechnungViewDocument
End If
Else
'INDIVIDUELLES VERHALTEN BEI Folge-ITEMS
_logger.Debug($"FollowItem: {oItemSPECNAME} - ItemValue: {oItemValue}")
If oArea = "POSITION" Then
If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then
oPosCount += 1
@ -168,12 +188,12 @@ Public Class XRechnungViewDocument
oPosTerm += $" {oItemValue}"
oDisplay = False
ElseIf oItemSPECNAME = "INVOICE_TAXPOS_TAX_RATE" Or oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then
oPosTerm += $" - ({oItemValue} %)"
oPosTerm += $" - {oItemValue} %"
oDisplay = False
ElseIf oItemSPECNAME = "INVOICE_POSITION_TAX_AMOUNT" Then
oPosTerm += $" - {oItemValue} {oCurrencySymbol}"
End If
oItemValue = oPosTerm
If oPosCount >= 9 Then
oDisplay = False
End If
ElseIf oArea = "HEAD" Then
If oItemSPECNAME = "INVOICE_DATE" Or oItemSPECNAME = "INVOICE_SERVICE_DATE" Then
Dim oDateString As String = oItemValue
@ -194,6 +214,7 @@ Public Class XRechnungViewDocument
oItemValue = oPosTerm
End If
End If
If oDisplay = True Then
If Y_eq_lastrow = False And oAreaSwitch = False Then
yPosition += 5
@ -206,16 +227,11 @@ Public Class XRechnungViewDocument
If oRowCaption <> String.Empty Then
gdpicturePDF.DrawText(fontResName, 10, yPosition, oRowCaption)
gdpicturePDF.DrawText(fontResName, 70, yPosition, oItemValue)
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oRowCaption)
MyGDPicturePDF.DrawText(fontResName, 70, yPosition, oItemValue)
Else
If Y_eq_lastrow = True Then
If oIsPosition = True And oPosCount = 9 Then
gdpicturePDF.DrawText(fontResName, 10, yPosition, "...es gibt noch mehr Positionen, diese werden aber aus Layoutgründen nicht dargestellt.")
gdpicturePDF.DrawText(fontResName, 10, yPosition, "...There are more positions, but these are not shown for layout reasons.")
Else
gdpicturePDF.DrawText(fontResName, oRow.Item("xPosition"), yPosition, oItemValue)
End If
MyGDPicturePDF.DrawText(fontResName, oRow.Item("xPosition"), yPosition, oItemValue)
Else
If oItemValue.Length > 112 Then
' Liste zur Speicherung der Teilstrings
@ -230,11 +246,11 @@ Public Class XRechnungViewDocument
' Ausgabe der Teilstrings
For Each teilString As String In teilStrings
gdpicturePDF.DrawText(fontResName, 10, yPosition, teilString)
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, teilString)
yPosition += 5
Next
Else
gdpicturePDF.DrawText(fontResName, 10, yPosition, oItemValue)
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oItemValue)
End If
End If
@ -242,24 +258,20 @@ Public Class XRechnungViewDocument
End If
oIndex += 1
Next
Dim oCreated = Now.ToString
gdpicturePDF.DrawLine(10, 280, 200, 280)
Dim oCreatedString = $"Maschinell erstellt durch / Automatically created by Digital Data E-Rechnung Parser: {oCreated}"
gdpicturePDF.DrawText(fontResName, 10, 285, oCreatedString)
Dim oeinv_Format As PdfInvoiceDataFormat = PdfInvoiceDataFormat.ZUGFeRD_2_0
gdpicturePDF.EmbedFile(oTempFilePath, "Rechnungsdaten im ZUGFeRD-XML-Format")
MyGDPicturePDF.EmbedFile(oTempFilePath, "Rechnungsdaten im ZUGFeRD-XML-Format")
'Finalize And save the PDF
ostatus = gdpicturePDF.SaveToFile(oOutputPath)
If ostatus = GdPictureStatus.OK Then
oPDFStatus = MyGDPicturePDF.SaveToFile(oOutputPath)
If oPDFStatus = GdPictureStatus.OK Then
_logger.Info("PDF VisualReceipt generated successfully!")
Else
_logger.Warn($"Error generating PDF VisualReceipt: {ostatus}")
_logger.Warn($"Error generating PDF VisualReceipt: {oPDFStatus}")
End If
'Release resources
gdpicturePDF.CloseDocument()
If ostatus = GdPictureStatus.OK Then
MyGDPicturePDF.CloseDocument()
If oPDFStatus = GdPictureStatus.OK Then
File.Delete(oXRechnungFile)
oNewFileinfo = New FileInfo(oOutputPath)
Return oNewFileinfo
@ -272,6 +284,27 @@ Public Class XRechnungViewDocument
Return Nothing
End Try
End Function
Public Function Create_PageHeader(pFollowPage As Boolean) As Integer
'Draw content on the PDF
Dim yPosition As Integer = 15
MyGDPicturePDF.SetTextSize(18)
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt")
yPosition += 10
MyGDPicturePDF.SetTextSize(10)
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row1)
yPosition += 5
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row2)
yPosition += 5
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row1)
yPosition += 5
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row2)
Return yPosition
End Function
Public Function Create_PageFooter()
MyGDPicturePDF.DrawLine(10, 280, 200, 280)
Dim oCreatedString = $"Maschinell erstellt durch / Automatically created by Digital Data E-Rechnung Parser: {Now.ToString}"
MyGDPicturePDF.DrawText(fontResName, 10, 285, oCreatedString)
End Function
Private Function Return_InvType(pType As String) As String
Dim oReturn As String = "Rechnung/invoice"
If pType = "380" Then