diff --git a/Jobs/My Project/AssemblyInfo.vb b/Jobs/My Project/AssemblyInfo.vb index ca52d2ce..4b06ea4e 100644 --- a/Jobs/My Project/AssemblyInfo.vb +++ b/Jobs/My Project/AssemblyInfo.vb @@ -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: - - + + diff --git a/Jobs/ZUGFeRD/XRechnungViewDocument.vb b/Jobs/ZUGFeRD/XRechnungViewDocument.vb index f82919d5..dbebb28e 100644 --- a/Jobs/ZUGFeRD/XRechnungViewDocument.vb +++ b/Jobs/ZUGFeRD/XRechnungViewDocument.vb @@ -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