fix für PDF-Attachment bei MergePDFs
This commit is contained in:
@@ -449,6 +449,12 @@ Public Class cUStVPositionen
|
||||
Public Function SAVE() As Boolean
|
||||
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
|
||||
|
||||
|
||||
If VERAG_PROG_ALLGEMEIN.cProgramFunctions.ValidateSQLFieldLengths(list, "tblUStVPositionen", "", "FMZOLL") Then
|
||||
Return False
|
||||
End If
|
||||
|
||||
|
||||
Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblUStVPositionen WHERE UStVAn_ID=@UStVAn_ID AND UStVPo_ID=@UStVPo_ID) " &
|
||||
" BEGIN " & getUpdateCmd() & " END " &
|
||||
" Else " &
|
||||
|
||||
@@ -2458,9 +2458,15 @@ Public Class DATENVERVER_OPTIONS
|
||||
|
||||
Using pdf As New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfReader(pdfPath), New iText.Kernel.Pdf.PdfWriter(tempFile))
|
||||
|
||||
|
||||
|
||||
Dim xmlBytes = File.ReadAllBytes(xmlPath)
|
||||
Dim fileName As String = "factur-x.xml"
|
||||
|
||||
If HasAttachment(pdf, fileName) Then
|
||||
Return pdfPath
|
||||
End If
|
||||
|
||||
Dim fs = PdfFileSpec.CreateEmbeddedFileSpec(
|
||||
pdf,
|
||||
xmlBytes,
|
||||
@@ -2490,6 +2496,32 @@ Public Class DATENVERVER_OPTIONS
|
||||
|
||||
End Function
|
||||
|
||||
Private Shared Function HasAttachment(pdf As iText.Kernel.Pdf.PdfDocument, fileName As String) As Boolean
|
||||
|
||||
Dim catalog = pdf.GetCatalog().GetPdfObject()
|
||||
Dim afObj = catalog.Get(iText.Kernel.Pdf.PdfName.AF)
|
||||
|
||||
If afObj Is Nothing Then Return False
|
||||
|
||||
Dim afArray = TryCast(afObj, iText.Kernel.Pdf.PdfArray)
|
||||
If afArray Is Nothing Then Return False
|
||||
|
||||
For i As Integer = 0 To afArray.Size() - 1
|
||||
Dim fsObj = afArray.Get(i)
|
||||
Dim fsDict = TryCast(fsObj, iText.Kernel.Pdf.PdfDictionary)
|
||||
|
||||
If fsDict Is Nothing Then Continue For
|
||||
|
||||
Dim fName = fsDict.GetAsString(iText.Kernel.Pdf.PdfName.F)
|
||||
|
||||
If fName IsNot Nothing AndAlso fName.ToString().Equals(fileName, StringComparison.OrdinalIgnoreCase) Then
|
||||
Return True
|
||||
End If
|
||||
Next
|
||||
|
||||
Return False
|
||||
End Function
|
||||
|
||||
|
||||
Public Shared Function ConvertToPdfA3(inputPdf As String) As String
|
||||
|
||||
|
||||
@@ -366,6 +366,76 @@ Public Class cProgramFunctions
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Shared Function ValidateSQLFieldLengths(parameters As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable), tableName As String, Info As String, Optional conn_art As String = "FMZOLL", Optional showError As Boolean = True) As Boolean
|
||||
|
||||
Try
|
||||
|
||||
Dim sql As String =
|
||||
"SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" & tableName & "' AND DATA_TYPE IN ('varchar','nvarchar','char','nchar')"
|
||||
|
||||
Dim dt As DataTable =
|
||||
(New SQL).loadDgvBySql(sql, conn_art)
|
||||
|
||||
If dt Is Nothing Then Return False
|
||||
|
||||
Dim fieldLengths As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase)
|
||||
|
||||
For Each r As DataRow In dt.Rows
|
||||
|
||||
fieldLengths(r!COLUMN_NAME.ToString) =
|
||||
CInt(r!CHARACTER_MAXIMUM_LENGTH)
|
||||
|
||||
Next
|
||||
|
||||
Dim errors As New List(Of String)
|
||||
|
||||
For Each p As SQLVariable In parameters
|
||||
|
||||
If p Is Nothing Then Continue For
|
||||
If p.Value() Is Nothing Then Continue For
|
||||
If p.Text() Is Nothing Then Continue For
|
||||
|
||||
Dim fieldName As String = p.Text().TrimStart("@"c)
|
||||
|
||||
If Not fieldLengths.ContainsKey(fieldName) Then Continue For
|
||||
|
||||
Dim maxLen As Integer = fieldLengths(fieldName)
|
||||
|
||||
' varchar(max) / nvarchar(max)
|
||||
If maxLen = -1 Then Continue For
|
||||
|
||||
Dim value As String = p.Value().ToString
|
||||
|
||||
If value.Length > maxLen Then
|
||||
|
||||
errors.Add(fieldName & " -> " & value.Length & "/" & maxLen)
|
||||
|
||||
End If
|
||||
|
||||
Next
|
||||
|
||||
If errors.Count > 0 Then
|
||||
Info = "Folgende SQL-Felder sind zu lang:" & vbCrLf & vbCrLf & String.Join(vbCrLf, errors)
|
||||
If showError Then
|
||||
MsgBox(Info, MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
|
||||
Return False
|
||||
|
||||
End If
|
||||
|
||||
Return True
|
||||
|
||||
Catch ex As Exception
|
||||
|
||||
MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message)
|
||||
|
||||
Return False
|
||||
|
||||
End Try
|
||||
|
||||
End Function
|
||||
|
||||
Public Shared Function fktEuro(varBetrag As Object, varVonWährung As Object, varNachWährung As Object) As Object
|
||||
'(FixeTaxe, "ATS", RECHNUNG.Währungscode)
|
||||
'Dim varVonWährung As Object
|
||||
@@ -948,11 +1018,19 @@ BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, [Control], New Object(
|
||||
Return SQL.getValueTxtBySql(sqlstr, "FMZOLL")
|
||||
End Function
|
||||
|
||||
Shared Function getISO1Land(LandKz As String)
|
||||
Dim sqlstr = "SELECT TOP 1 isnull(Währungstabelle.LandKz,'') AS LandKzISO1 FROM [Länderverzeichnis für die Außenhandelsstatistik] LEFT JOIN Währungstabelle ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel WHERE [Länderverzeichnis für die Außenhandelsstatistik].LandKz='" & LandKz & "' "
|
||||
Shared Function getLandEnglFromISO2Land(Iso2Land As String)
|
||||
Dim sqlstr = "SELECT TOP 1 isnull(Land_EN,'') AS LandBez FROM [Währungstabelle] LEFT JOIN [Länderverzeichnis für die Außenhandelsstatistik] ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel WHERE [Länderverzeichnis für die Außenhandelsstatistik].LandKz='" & Iso2Land & "' "
|
||||
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
||||
Return SQL.getValueTxtBySql(sqlstr, "FMZOLL")
|
||||
End Function
|
||||
|
||||
Shared Function getISO1Land(LandKz As String)
|
||||
Dim sqlstr = "SELECT TOP 1 isnull(Währungstabelle.Land_EN,'') AS LandBez FROM [Länderverzeichnis für die Außenhandelsstatistik] LEFT JOIN Währungstabelle ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel WHERE [Länderverzeichnis für die Außenhandelsstatistik].LandKz='" & LandKz & "' "
|
||||
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
||||
Return SQL.getValueTxtBySql(sqlstr, "FMZOLL")
|
||||
End Function
|
||||
|
||||
|
||||
Shared Function convertToIso(s) As String
|
||||
Return s
|
||||
|
||||
|
||||
Reference in New Issue
Block a user