This commit is contained in:
Developer01
2025-12-23 13:01:06 +01:00
42 changed files with 2448 additions and 594 deletions

View File

@@ -39,7 +39,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.5" newVersion="8.0.0.5" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.6" newVersion="8.0.0.6" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -24,7 +24,6 @@ Partial Class DocumentViewer
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(DocumentViewer))
Me.GdViewer = New GdPicture14.GdViewer()
Me.OpenFileDialog = New System.Windows.Forms.OpenFileDialog()
Me.BarManager1 = New DevExpress.XtraBars.BarManager(Me.components)
Me.ToolbarDocumentViewer = New DevExpress.XtraBars.Bar()
@@ -74,82 +73,6 @@ Partial Class DocumentViewer
CType(Me.RepositoryItemSearchControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'GdViewer
'
Me.GdViewer.AllowDropFile = False
Me.GdViewer.AnimateGIF = True
Me.GdViewer.AnnotationDropShadow = False
Me.GdViewer.AnnotationEnableMultiSelect = True
Me.GdViewer.AnnotationResizeRotateHandlesColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(128, Byte), Integer))
Me.GdViewer.AnnotationResizeRotateHandlesScale = 1.0!
Me.GdViewer.AnnotationSelectionLineColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer))
Me.GdViewer.AutoScrollMargin = New System.Drawing.Size(0, 0)
Me.GdViewer.AutoScrollMinSize = New System.Drawing.Size(0, 0)
Me.GdViewer.BackColor = System.Drawing.SystemColors.AppWorkspace
Me.GdViewer.BackgroundImage = Nothing
Me.GdViewer.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None
Me.GdViewer.ClipAnnotsToPageBounds = True
Me.GdViewer.ClipRegionsToPageBounds = True
Me.GdViewer.ContinuousViewMode = True
Me.GdViewer.DisplayQuality = GdPicture14.DisplayQuality.DisplayQualityAutomatic
Me.GdViewer.DisplayQualityAuto = True
Me.GdViewer.Dock = System.Windows.Forms.DockStyle.Fill
Me.GdViewer.DocumentAlignment = GdPicture14.ViewerDocumentAlignment.DocumentAlignmentMiddleCenter
Me.GdViewer.DocumentPosition = GdPicture14.ViewerDocumentPosition.DocumentPositionMiddleCenter
Me.GdViewer.DrawPageBorders = True
Me.GdViewer.EnableDeferredPainting = True
Me.GdViewer.EnabledProgressBar = True
Me.GdViewer.EnableFuzzySearch = False
Me.GdViewer.EnableICM = False
Me.GdViewer.EnableMenu = True
Me.GdViewer.EnableMouseWheel = True
Me.GdViewer.EnableTextSelection = True
Me.GdViewer.ForceScrollBars = False
Me.GdViewer.ForceTemporaryMode = False
Me.GdViewer.ForeColor = System.Drawing.Color.Black
Me.GdViewer.Gamma = 1.0!
Me.GdViewer.HQAnnotationRendering = True
Me.GdViewer.IgnoreDocumentResolution = False
Me.GdViewer.KeepDocumentPosition = False
Me.GdViewer.Location = New System.Drawing.Point(0, 33)
Me.GdViewer.LockViewer = False
Me.GdViewer.MagnifierHeight = 90
Me.GdViewer.MagnifierWidth = 160
Me.GdViewer.MagnifierZoomX = 2.0!
Me.GdViewer.MagnifierZoomY = 2.0!
Me.GdViewer.MouseButtonForMouseMode = GdPicture14.MouseButton.MouseButtonLeft
Me.GdViewer.MouseMode = GdPicture14.ViewerMouseMode.MouseModePan
Me.GdViewer.MouseWheelMode = GdPicture14.ViewerMouseWheelMode.MouseWheelModeVerticalScroll
Me.GdViewer.Name = "GdViewer"
Me.GdViewer.PageBordersColor = System.Drawing.Color.Black
Me.GdViewer.PageBordersPenSize = 1
Me.GdViewer.PageDisplayMode = GdPicture14.PageDisplayMode.MultiplePagesView
Me.GdViewer.PdfDisplayFormField = True
Me.GdViewer.PdfEnableFileLinks = True
Me.GdViewer.PdfEnableLinks = True
Me.GdViewer.PdfIncreaseTextContrast = False
Me.GdViewer.PdfShowDialogForPassword = True
Me.GdViewer.PdfShowOpenFileDialogForDecryption = True
Me.GdViewer.PdfVerifyDigitalCertificates = False
Me.GdViewer.PreserveViewRotation = True
Me.GdViewer.RectBorderColor = System.Drawing.Color.Black
Me.GdViewer.RectBorderSize = 1
Me.GdViewer.RectIsEditable = True
Me.GdViewer.RegionsAreEditable = True
Me.GdViewer.RenderGdPictureAnnots = True
Me.GdViewer.ScrollBars = True
Me.GdViewer.ScrollLargeChange = CType(50, Short)
Me.GdViewer.ScrollSmallChange = CType(1, Short)
Me.GdViewer.SilentMode = True
Me.GdViewer.Size = New System.Drawing.Size(1012, 557)
Me.GdViewer.TabIndex = 0
Me.GdViewer.TabStop = False
Me.GdViewer.ViewRotation = System.Drawing.RotateFlipType.RotateNoneFlipNone
Me.GdViewer.Zoom = 1.0R
Me.GdViewer.ZoomCenterAtMousePosition = False
Me.GdViewer.ZoomMode = GdPicture14.ViewerZoomMode.ZoomMode100
Me.GdViewer.ZoomStep = 25
'
'OpenFileDialog
'
Me.OpenFileDialog.FileName = "OpenFileDialog1"
@@ -355,15 +278,15 @@ Partial Class DocumentViewer
Me.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top
Me.barDockControlTop.Location = New System.Drawing.Point(0, 0)
Me.barDockControlTop.Manager = Me.BarManager1
Me.barDockControlTop.Size = New System.Drawing.Size(1012, 33)
Me.barDockControlTop.Size = New System.Drawing.Size(841, 33)
'
'barDockControlBottom
'
Me.barDockControlBottom.CausesValidation = False
Me.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom
Me.barDockControlBottom.Location = New System.Drawing.Point(0, 590)
Me.barDockControlBottom.Location = New System.Drawing.Point(0, 555)
Me.barDockControlBottom.Manager = Me.BarManager1
Me.barDockControlBottom.Size = New System.Drawing.Size(1012, 0)
Me.barDockControlBottom.Size = New System.Drawing.Size(841, 0)
'
'barDockControlLeft
'
@@ -371,15 +294,15 @@ Partial Class DocumentViewer
Me.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left
Me.barDockControlLeft.Location = New System.Drawing.Point(0, 33)
Me.barDockControlLeft.Manager = Me.BarManager1
Me.barDockControlLeft.Size = New System.Drawing.Size(0, 557)
Me.barDockControlLeft.Size = New System.Drawing.Size(0, 522)
'
'barDockControlRight
'
Me.barDockControlRight.CausesValidation = False
Me.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right
Me.barDockControlRight.Location = New System.Drawing.Point(1012, 33)
Me.barDockControlRight.Location = New System.Drawing.Point(841, 33)
Me.barDockControlRight.Manager = Me.BarManager1
Me.barDockControlRight.Size = New System.Drawing.Size(0, 557)
Me.barDockControlRight.Size = New System.Drawing.Size(0, 522)
'
'BarStaticItem1
'
@@ -446,7 +369,7 @@ Partial Class DocumentViewer
Me.lbFileNotLoaded.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None
Me.lbFileNotLoaded.Location = New System.Drawing.Point(3, 74)
Me.lbFileNotLoaded.Name = "lbFileNotLoaded"
Me.lbFileNotLoaded.Size = New System.Drawing.Size(1006, 72)
Me.lbFileNotLoaded.Size = New System.Drawing.Size(835, 72)
Me.lbFileNotLoaded.TabIndex = 0
Me.lbFileNotLoaded.Tag = ""
Me.lbFileNotLoaded.Text = "Die Datei konnte nicht geladen werden"
@@ -454,28 +377,17 @@ Partial Class DocumentViewer
'
'RichEditControl1
'
Me.RichEditControl1.Location = New System.Drawing.Point(447, 271)
Me.RichEditControl1.Location = New System.Drawing.Point(571, 238)
Me.RichEditControl1.MenuManager = Me.BarManager1
Me.RichEditControl1.Name = "RichEditControl1"
Me.RichEditControl1.Size = New System.Drawing.Size(400, 200)
Me.RichEditControl1.TabIndex = 5
Me.RichEditControl1.Visible = False
'
'lblInfo
'
Me.lblInfo.AutoSize = True
Me.lblInfo.ForeColor = System.Drawing.Color.Red
Me.lblInfo.Location = New System.Drawing.Point(18, 558)
Me.lblInfo.Name = "lblInfo"
Me.lblInfo.Size = New System.Drawing.Size(39, 13)
Me.lblInfo.TabIndex = 10
Me.lblInfo.Text = "Label1"
'
'DocumentViewer
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Controls.Add(Me.lblInfo)
Me.Controls.Add(Me.RichEditControl1)
Me.Controls.Add(Me.lbFileNotLoaded)
Me.Controls.Add(Me.SpreadsheetControl1)
@@ -485,7 +397,7 @@ Partial Class DocumentViewer
Me.Controls.Add(Me.barDockControlBottom)
Me.Controls.Add(Me.barDockControlTop)
Me.Name = "DocumentViewer"
Me.Size = New System.Drawing.Size(1012, 590)
Me.Size = New System.Drawing.Size(841, 555)
CType(Me.BarManager1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemTextEdit2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemTextEdit3, System.ComponentModel.ISupportInitialize).EndInit()

View File

@@ -123,6 +123,9 @@
<metadata name="BarManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>285, 22</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value>
</metadata>
<assembly alias="DevExpress.Data.v21.2" name="DevExpress.Data.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="buttonPrint.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>

View File

@@ -55,6 +55,7 @@ Public Class DocumentViewer
Private _hide_file_info_from_user As Boolean = False
Private _FileStream As Stream
Private _FilePath As String
Private _FileInfo As FileInfo
@@ -65,6 +66,8 @@ Public Class DocumentViewer
Private _TempFiles As New List(Of String)
Private Sub DocumentViewer_Load(sender As Object, e As EventArgs) Handles Me.Load
' Ensure search is initialized once the control (and GdViewer) exists
EnsureSearchInitialized()
UpdateMainUi()
End Sub
'hallo
@@ -109,7 +112,8 @@ Public Class DocumentViewer
_licenseKey = pLicenseKey
_licenseManager.RegisterKEY(_licenseKey)
_Annotations = New Annotations(pLogConfig)
_Search = New Search(pLogConfig, GdViewer)
' Defer creating Search until GdViewer is ready
EnsureSearchInitialized()
_ToolbarSettings = pToolbarSettings
Dim oConfigPath = ConfigPath()
@@ -121,6 +125,17 @@ Public Class DocumentViewer
End Try
End Function
' Create the Search helper only when both the log config and the GdViewer control exist
Private Sub EnsureSearchInitialized()
Try
If _Search Is Nothing AndAlso _logConfig IsNot Nothing AndAlso GdViewer IsNot Nothing Then
_Search = New Search(_logConfig, GdViewer)
End If
Catch ex As Exception
_logger?.Error(ex)
End Try
End Sub
''' <summary>
''' Load a file from a path and display it
''' </summary>
@@ -141,9 +156,8 @@ Public Class DocumentViewer
_FileInfo = New FileInfo(FilePath)
_logger.Info("Loading file [{0}] from Filesystem", FilePath)
FileLoaded = DoLoadFile(FilePath)
SetViewerMode(_FileInfo.Extension)
FileLoaded = DoLoadFile(FilePath)
UpdateMainUi()
End Sub
@@ -222,8 +236,18 @@ Public Class DocumentViewer
End Function
Public Sub CloseDocument()
Try
' Null-sicher schließen
If GdViewer IsNot Nothing Then
Try
GdViewer.CloseDocument()
Catch exInner As Exception
_logger?.Warn("Fehler beim Schließen von GdViewer")
_logger?.Error(exInner)
End Try
Else
_logger?.Debug("CloseDocument: GdViewer ist Nothing nichts zu schließen")
End If
_FileInfo = Nothing
_FilePath = Nothing
@@ -299,25 +323,23 @@ Public Class DocumentViewer
GdViewer.Focus()
UpdateMainUi()
End Sub
Private Sub btnFirstPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonFirstPage.ItemClick
Private Sub BtnFirstPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonFirstPage.ItemClick
GdViewer.DisplayFirstPage()
End Sub
Private Sub btnPreviousPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonPrevPage.ItemClick
_ViewerMode = ViewerMode.GDPicture
Private Sub BtnPreviousPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonPrevPage.ItemClick
GdViewer.DisplayPreviousPage()
End Sub
Private Sub btnNextPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonNextPage.ItemClick
_ViewerMode = ViewerMode.GDPicture
Private Sub BtnNextPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonNextPage.ItemClick
GdViewer.DisplayNextPage()
End Sub
Private Sub btnLastPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonLastPage.ItemClick
Private Sub BtnLastPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonLastPage.ItemClick
GdViewer.DisplayLastPage()
End Sub
Private Sub tbCurrentPage_Leave(ByVal sender As System.Object, ByVal e As EventArgs) Handles txtCurrentPage.EditValueChanged
Private Sub TbCurrentPage_Leave(ByVal sender As System.Object, ByVal e As EventArgs) Handles txtCurrentPage.EditValueChanged
Dim page As Integer = 0
If Integer.TryParse(txtCurrentPage.EditValue, page) Then
If page > 0 And page <= GdViewer.PageCount Then
@@ -339,12 +361,10 @@ Public Class DocumentViewer
End Sub
Private Sub btnZoomOut_Click(sender As Object, e As EventArgs) Handles buttonZoomOut.ItemClick
_ViewerMode = ViewerMode.GDPicture
GdViewer.ZoomOUT()
End Sub
Private Sub btnZoomIn_Click(sender As Object, e As EventArgs) Handles buttonZoomIn.ItemClick
_ViewerMode = ViewerMode.GDPicture
GdViewer.ZoomIN()
End Sub
@@ -356,11 +376,11 @@ Public Class DocumentViewer
GdViewer.PrintDialog()
End Sub
Private Sub btnRotateLeft_Click(sender As Object, e As EventArgs) Handles buttonRotateLeft.ItemClick
Private Sub BtnRotateLeft_Click(sender As Object, e As EventArgs) Handles buttonRotateLeft.ItemClick
GdViewer.Rotate(RotateFlipType.Rotate270FlipNone)
End Sub
Private Sub btnRotateRight_Click(sender As Object, e As EventArgs) Handles buttonRotateRight.ItemClick
Private Sub BtnRotateRight_Click(sender As Object, e As EventArgs) Handles buttonRotateRight.ItemClick
GdViewer.Rotate(RotateFlipType.Rotate90FlipNone)
End Sub
@@ -385,7 +405,7 @@ Public Class DocumentViewer
End If
End Sub
Private Sub btnSettings_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonSettings.ItemClick
Private Sub BtnSettings_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonSettings.ItemClick
Using frmSettings As New frmViewerSettings(GdViewer)
frmSettings.ShowDialog(Me)
End Using
@@ -439,14 +459,18 @@ Public Class DocumentViewer
End Sub
Private Sub SetViewerMode(Extension As String)
If _ViewOverride = "Richtext" Then
_ViewerMode = ViewerMode.Richtext
Else
Select Case Extension.ToUpper
Case "CSV"
_ViewerMode = ViewerMode.Excel
Case ".EML", ".DOC", ".DOCX", ".ODT", ".RTF", ".TXT"
_ViewerMode = ViewerMode.RichText
'Case ".EML", ".DOC", ".DOCX", ".ODT", ".RTF", ".TXT"
' _ViewerMode = ViewerMode.RichText
Case Else
_ViewerMode = ViewerMode.GDPicture
End Select
End If
End Sub
Private Sub FreeFile()
Try
@@ -574,6 +598,12 @@ Public Class DocumentViewer
End Function
Private Function DoLoadFile(FilePath As String) As Boolean
Try
' Ensure the embedded GdViewer control exists before using it
If Not EnsureViewerReady() Then
_logger?.Warn("GdViewer control is not initialized yet. Delaying load.")
Return False
End If
lblInfo.Visible = False
Dim oFileInfo = New FileInfo(FilePath)
Dim oExtension As String = oFileInfo.Extension.ToUpper
@@ -599,10 +629,17 @@ Public Class DocumentViewer
Dim oRange = SpreadsheetControl1.ActiveWorksheet.GetUsedRange()
oRange.AutoFitColumns()
SpreadsheetControl1.Visible = True
If ViewOverride = "Richtext" Then
RichEditControl1.LoadDocument(FilePath, GetDocumentFormat(oExtension))
RichEditControl1.Visible = True
GdViewer.Visible = False
SpreadsheetControl1.Dock = DockStyle.Fill
RichEditControl1.Dock = DockStyle.Fill
_ViewOverride = "Richtext"
_ViewerMode = ViewerMode.Richtext
lblInfo.Visible = True
lblInfo.Text = "This docx-file contains a generic error and will be displayed in a reduced viewer. Please try to open the file in WORD"
Else
_ViewOverride = ""
Select Case oExtension.ToUpper
Case ".CSV"
Dim oFormat = GetSpreadsheetFormat(oExtension)
@@ -621,8 +658,9 @@ Public Class DocumentViewer
GdViewer.Visible = False
RichEditControl1.Dock = DockStyle.Fill
Case Else
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeWidthViewer
GdViewer.DocumentAlignment = ViewerDocumentAlignment.DocumentAlignmentTopCenter
GdViewer.ForceTemporaryMode = True
GdViewer.DocumentAlignment = ViewerDocumentAlignment.DocumentAlignmentTopCenter
If Viewer_ForceTemporaryMode = True Then
GdViewer.ForceTemporaryMode = True
@@ -649,11 +687,8 @@ Public Class DocumentViewer
End If
End Select
End If
UpdateMainUi()
Return True
Catch ex As Exception
_logger.Error(ex)
@@ -661,17 +696,51 @@ Public Class DocumentViewer
End Try
End Function
' Ensures the embedded GdViewer control exists and is added to the visual tree
Private Function EnsureViewerReady() As Boolean
Try
' If the control field is Nothing (e.g., designer not yet created), try to lazy-create and add it
If GdViewer Is Nothing Then
Private Function EnsureViewerReady() As Boolean
Try
' If the control field is Nothing (e.g., designer not yet created), try to lazy-create and add it
If GdViewer Is Nothing Then
' Attempt to find an existing instance by name in Controls collection
Dim existing = Me.Controls.OfType(Of GdPicture14.GdViewer)().FirstOrDefault()
If existing IsNot Nothing Then
' Assign the designer field via reflection if needed, otherwise use it directly
GdViewer = existing
Else
' Last resort: create a new viewer and add it
Dim viewer = New GdPicture14.GdViewer()
viewer.Dock = DockStyle.Fill
Me.Controls.Add(viewer)
GdViewer = viewer
End If
End If
Return GdViewer IsNot Nothing
Catch ex As Exception
_logger?.Error(ex)
Return False
End Try
End Function
Private Sub FitToPage()
_ViewerMode = ViewerMode.GDPicture
If Not GdViewer Is Nothing Then
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeFitToViewer
End If
End Sub
Private Sub FitToWidth()
_ViewerMode = ViewerMode.GDPicture
If Not GdViewer Is Nothing Then
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeWidthViewer
End If
End Sub
Private Function DoLoadFile(Stream As Stream, Extension As String) As Boolean
Try
SpreadsheetControl1.Visible = False
@@ -691,7 +760,9 @@ Public Class DocumentViewer
Case Else
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeWidthViewer
GdViewer.DocumentAlignment = ViewerDocumentAlignment.DocumentAlignmentTopCenter
If Viewer_ForceTemporaryMode = True Then
GdViewer.ForceTemporaryMode = True
End If
GdViewer.AnnotationDropShadow = True
GdViewer.DisplayFromStream(Stream)
@@ -838,25 +909,27 @@ Public Class DocumentViewer
btnSearch2.Visibility = ToVisibility(False)
btnNextHighlight.Visibility = ToVisibility(False)
btnPrevHighlight.Visibility = ToVisibility(False)
Case Else
ToolbarDocumentViewer.Visible = False
End Select
End Sub
Private Sub btnSearch2_ItemClick(sender As Object, e As XtraBars.ItemClickEventArgs) Handles btnSearch2.ItemClick
If Not String.IsNullOrEmpty(txtSearch.EditValue) Then
EnsureSearchInitialized()
If _Search IsNot Nothing AndAlso Not String.IsNullOrEmpty(txtSearch.EditValue) Then
_Search.SearchAll(txtSearch.EditValue?.ToString)
End If
End Sub
Private Sub btnPrevHighlight_ItemClick(sender As Object, e As XtraBars.ItemClickEventArgs) Handles btnPrevHighlight.ItemClick
_Search.PrevHighlight()
EnsureSearchInitialized()
_Search?.PrevHighlight()
End Sub
Private Sub btnNextHighlight_ItemClick(sender As Object, e As XtraBars.ItemClickEventArgs) Handles btnNextHighlight.ItemClick
_Search.NextHighlight()
EnsureSearchInitialized()
_Search?.NextHighlight()
End Sub
Private Sub txtSearch_EditValueChanged(sender As Object, e As EventArgs) Handles txtSearch.EditValueChanged

View File

@@ -160,15 +160,9 @@
<HintPath>..\packages\GdPicture.14.3.3\lib\net462\GdPicture.NET.14.wia.gateway.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="IndexRange, Version=1.0.3.0, Culture=neutral, PublicKeyToken=35e6a3c4212514c6, processorArchitecture=MSIL">
<HintPath>..\packages\IndexRange.1.0.3\lib\net45\IndexRange.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.HashCode, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.HashCode.6.0.0\lib\net462\Microsoft.Bcl.HashCode.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
@@ -179,8 +173,8 @@
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
</Reference>
<Reference Include="OpenMcdf, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\OpenMcdf.3.0.0\lib\netstandard2.0\OpenMcdf.dll</HintPath>
<Reference Include="OpenMcdf, Version=2.4.1.0, Culture=neutral, PublicKeyToken=fdbb1629d7c00800, processorArchitecture=MSIL">
<HintPath>..\packages\OpenMcdf.2.4.1\lib\net40\OpenMcdf.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
@@ -234,8 +228,8 @@
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
</Reference>
<Reference Include="System.Text.Json, Version=8.0.0.5, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Json.8.0.5\lib\net462\System.Text.Json.dll</HintPath>
<Reference Include="System.Text.Json, Version=8.0.0.6, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Json.8.0.6\lib\net462\System.Text.Json.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>

View File

@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.2.0.0")>
<Assembly: AssemblyFileVersion("2.2.0.0")>
<Assembly: AssemblyVersion("2.6.0.0")>
<Assembly: AssemblyFileVersion("2.6.0.0")>

View File

@@ -5,16 +5,14 @@
<package id="DocumentFormat.OpenXml.Framework" version="3.2.0" targetFramework="net462" />
<package id="GdPicture" version="14.3.3" targetFramework="net462" />
<package id="GdPicture.runtimes.windows" version="14.3.3" targetFramework="net462" />
<package id="IndexRange" version="1.0.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Client" version="6.0.0" targetFramework="net462" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net462" />
<package id="Microsoft.Bcl.HashCode" version="6.0.0" targetFramework="net462" />
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net462" />
<package id="Microsoft.VisualBasic" version="10.3.0" targetFramework="net462" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
<package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net462" />
<package id="NLog" version="5.0.5" targetFramework="net461" />
<package id="OpenMcdf" version="3.0.0" targetFramework="net462" />
<package id="OpenMcdf" version="2.4.1" targetFramework="net462" />
<package id="protobuf-net" version="3.2.46" targetFramework="net462" />
<package id="protobuf-net.Core" version="3.2.46" targetFramework="net462" />
<package id="RtfPipe" version="2.0.7677.4303" targetFramework="net462" />
@@ -28,7 +26,7 @@
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Pkcs" version="8.0.1" targetFramework="net462" />
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net462" />
<package id="System.Text.Json" version="8.0.5" targetFramework="net462" />
<package id="System.Text.Json" version="8.0.6" targetFramework="net462" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
</packages>

BIN
GDPicture_NewPDF_net48.zip Normal file

Binary file not shown.

View File

@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="ZUGFeRDTest.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="ZUGFeRDTest.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<applicationSettings>
<ZUGFeRDTest.My.MySettings>
<setting name="FB_DATABASE" serializeAs="String">
<value>172.24.12.50:E:\DataFiles\Firebird\WISAG\EDMI_MASTER.FDB</value>
</setting>
<setting name="FB_DATASOURCE" serializeAs="String">
<value>172.24.12.50</value>
</setting>
</ZUGFeRDTest.My.MySettings>
</applicationSettings>
<userSettings>
<ZUGFeRDTest.My.MySettings>
<setting name="FB_USER" serializeAs="String">
<value>sysdba</value>
</setting>
<setting name="FB_PASS" serializeAs="String">
<value>dd</value>
</setting>
<setting name="MD5Cheksum" serializeAs="String">
<value />
</setting>
<setting name="MSSQL_CONNECTIONSTRING" serializeAs="String">
<value>Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd</value>
</setting>
</ZUGFeRDTest.My.MySettings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="IKVM.Runtime" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.Core" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.XML.API" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.Util" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.Text" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.SwingAWT" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.Security" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.Beans" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.Media" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.XML.Bind" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IKVM.OpenJDK.Jdbc" publicKeyToken="13235d27fcbfff58" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.1.5717.0" newVersion="8.1.5717.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="itext.kernel" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.1.4.0" newVersion="7.1.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="itext.pdfa" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.1.4.0" newVersion="7.1.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="itext.io" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.1.4.0" newVersion="7.1.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.5.0" newVersion="4.1.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Pkcs" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO.Packaging" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.5" newVersion="8.0.0.5" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="GdPicture.NET.14" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="GdPicture.NET.14.Common" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="GdPicture.NET.14.Imaging" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

65
GDPicture_NewPDF_net48/Form1.Designer.vb generated Normal file
View File

@@ -0,0 +1,65 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class Form1
Inherits System.Windows.Forms.Form
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog()
Me.OpenFileDialog2 = New System.Windows.Forms.OpenFileDialog()
Me.Button1 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'OpenFileDialog1
'
Me.OpenFileDialog1.FileName = "OpenFileDialog1"
'
'OpenFileDialog2
'
Me.OpenFileDialog2.FileName = "OpenFileDialog2"
Me.OpenFileDialog2.Filter = "XML files (*.xml)|*.xml"
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(30, 43)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 64)
Me.Button1.TabIndex = 13
Me.Button1.Text = "Create GDPicture"
Me.Button1.UseVisualStyleBackColor = True
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(344, 152)
Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "E-Invoice-TEST-Tool"
Me.ResumeLayout(False)
End Sub
Friend WithEvents OpenFileDialog1 As OpenFileDialog
Friend WithEvents FolderBrowserDialog1 As FolderBrowserDialog
Friend WithEvents OpenFileDialog2 As OpenFileDialog
Friend WithEvents Button1 As Button
End Class

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="FolderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>159, 17</value>
</metadata>
<metadata name="OpenFileDialog2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>328, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,31 @@
Imports System.IO
Imports System.Security.Cryptography
Imports GdPicture14
Public Class Form1
Private _GDPictureLizenz As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
_GDPictureLizenz = "kG1Qf9PwmqgR8aDmIW2zI_ebj48RzqAJegRxcystEmkbTGQqfkNBdFOXIb6C_A00Ra8zZkrHdfjqzOPXK7kgkF2YDhvrqKfqh4WDug2vOt0qO31IommzkANSuLjZ4zmraoubyEVd25rE3veQ2h_j7tGIoH_LyIHmy24GaXsxdG0yCzIBMdiLbMMMDwcPY-809KeZ83Grv76OVhFvcbBWyYc251vou1N-kGg5_ZlHDgfWoY85gTLRxafjD3KS_i9ARW4BMiy36y8n7UP2jN8kGRnW_04ubpFtfjJqvtsrP_J9D0x7bqV8xtVtT5JI6dpKsVTiMgDCrIcoFSo5gCC1fw9oUopX4TDCkBQttO4-WHBlOeq9dG5Yb0otonVmJKaQA2tP6sMR-lZDs3ql_WI9t91yPWgpssrJUxSHDd27_LMTH_owJIqkF3NOJd9mYQuAv22oNKFYbH8e41pVKb8cT33Y9CgcQ_sy6YDA5PTuIRi67mjKge_nD9rd0IN213Ir9M_EFWqg9e4haWzIdHXQUo0md70kVhPX4UIH_BKJnxEEnFfoFRNMh77bB0N4jkcBEHPl-ghOERv8dOztf4vCnNpzzWvcLD2cqWIm6THy8XGGq9h4hp8aEreRleSMwv9QQAC7mjLwhQ1rBYkpUHlpTjhTLnMwHknl6HH0Z6zzmsgkRKVyfquv94Pd7QbQfZrRka0ss_48pf9p8hAywEn81Q=="
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim LicenseManager = New LicenseManager()
LicenseManager.RegisterKEY(_GDPictureLizenz)
Using gdpicturePDF As New GdPicturePDF
' Create a new PDF/A-2a compliant document (blank, no pages yet)
Dim status As GdPictureStatus = gdpicturePDF.NewPDF(PdfConformance.PDF_A_2a)
If status = GdPictureStatus.OK Then
MsgBox("Status is OK")
Else
MsgBox($"The NewPDF(PdfConformance.PDF_A_2a) method has failed
with the status: {status.ToString()}", MsgBoxStyle.Critical)
End If
End Using
End Sub
End Class

View File

@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36310.24 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "GDPicture_NewPDF_net48", "GDPicture_NewPDF_net48.vbproj", "{16156434-E471-43F1-8030-76A0DA17CD5A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{16156434-E471-43F1-8030-76A0DA17CD5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16156434-E471-43F1-8030-76A0DA17CD5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16156434-E471-43F1-8030-76A0DA17CD5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16156434-E471-43F1-8030-76A0DA17CD5A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7FB9D072-A417-47E9-ACA3-99FC76D948C3}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,269 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{16156434-E471-43F1-8030-76A0DA17CD5A}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>ZUGFeRDTest.My.MyApplication</StartupObject>
<RootNamespace>ZUGFeRDTest</RootNamespace>
<AssemblyName>ZUGFeRDTest</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>ZUGFeRDTest.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>ZUGFeRDTest.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<ItemGroup>
<Reference Include="DocumentFormat.OpenXml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.3.2.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml.Framework, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.Framework.3.2.0\lib\net46\DocumentFormat.OpenXml.Framework.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.barcode.1d.writer, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.barcode.1d.writer.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.barcode.2d.writer, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.barcode.2d.writer.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.CAD, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.CAD.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.CAD.DWG, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.CAD.DWG.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.Common, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.Common.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.Document, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.Document.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.Email, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.Email.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.HTML, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.HTML.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.Imaging, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.Imaging.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.Imaging.Formats, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.Imaging.Formats.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.Imaging.Formats.Conversion, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.Imaging.Formats.Conversion.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.Imaging.Rendering, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.Imaging.Rendering.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.MSOfficeBinary, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.MSOfficeBinary.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.OpenDocument, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.OpenDocument.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.OpenXML, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.OpenXML.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.OpenXML.Templating, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.OpenXML.Templating.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.PDF, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.PDF.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.RTF, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.RTF.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.SVG, Version=14.3.14.0, Culture=neutral, PublicKeyToken=f52a2e60ad468dbb, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.SVG.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14.wia.gateway, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6973b5c22dcf45f7, processorArchitecture=MSIL">
<HintPath>..\packages\GdPicture.14.3.14\lib\net462\GdPicture.NET.14.wia.gateway.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json.Bson, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.Bson.1.0.2\lib\net45\Newtonsoft.Json.Bson.dll</HintPath>
</Reference>
<Reference Include="OpenMcdf, Version=2.4.1.0, Culture=neutral, PublicKeyToken=fdbb1629d7c00800, processorArchitecture=MSIL">
<HintPath>..\packages\OpenMcdf.2.4.1\lib\net40\OpenMcdf.dll</HintPath>
</Reference>
<Reference Include="protobuf-net, Version=3.0.0.0, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
<HintPath>..\packages\protobuf-net.3.2.46\lib\net462\protobuf-net.dll</HintPath>
</Reference>
<Reference Include="protobuf-net.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
<HintPath>..\packages\protobuf-net.Core.3.2.46\lib\net462\protobuf-net.Core.dll</HintPath>
</Reference>
<Reference Include="RtfPipe, Version=2.0.7677.4303, Culture=neutral, PublicKeyToken=5f6ab4ce530296d2, processorArchitecture=MSIL">
<HintPath>..\packages\RtfPipe.2.0.7677.4303\lib\net45\RtfPipe.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.6.0\lib\net462\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.CodeDom, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.CodeDom.8.0.0\lib\net462\System.CodeDom.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.8.0.0\lib\net462\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Packaging, Version=8.0.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Packaging.8.0.1\lib\net462\System.IO.Packaging.dll</HintPath>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Memory, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.6.0\lib\net462\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Formatting, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.6.0.0\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.6.0\lib\net462\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.0\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security" />
<Reference Include="System.Security.Cryptography.Pkcs, Version=8.0.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Pkcs.8.0.1\lib\net462\System.Security.Cryptography.Pkcs.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel" />
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
</Reference>
<Reference Include="System.Text.Json, Version=8.0.0.5, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Json.8.0.5\lib\net462\System.Text.Json.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.vb">
<DependentUpon>Form1.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets'))" />
<Error Condition="!Exists('..\packages\GdPicture.runtimes.windows.14.3.14\build\net462\GdPicture.runtimes.windows.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\GdPicture.runtimes.windows.14.3.14\build\net462\GdPicture.runtimes.windows.targets'))" />
</Target>
<Import Project="..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets" Condition="Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" />
<Import Project="..\packages\GdPicture.runtimes.windows.14.3.14\build\net462\GdPicture.runtimes.windows.targets" Condition="Exists('..\packages\GdPicture.runtimes.windows.14.3.14\build\net462\GdPicture.runtimes.windows.targets')" />
</Project>

View File

@@ -0,0 +1,44 @@
'------------------------------------------------------------------------------
' <auto-generated>
' Dieser Code wurde von einem Tool generiert.
' Laufzeitversion:4.0.30319.42000
'
' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
' der Code erneut generiert wird.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'HINWEIS: Diese Datei wird automatisch generiert und darf nicht direkt bearbeitet werden. Wenn Sie Änderungen vornehmen möchten
' oder in dieser Datei Buildfehler auftreten, wechseln Sie zum Projekt-Designer.
' (Wechseln Sie dazu zu den Projekteigenschaften, oder doppelklicken Sie auf den Knoten "Mein Projekt" im
' Projektmappen-Explorer). Nehmen Sie auf der Registerkarte "Anwendung" entsprechende Änderungen vor.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.ZUGFeRDTest.Form1
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean
Me.MinimumSplashScreenDisplayTime = 0
Return MyBase.OnInitialize(commandLineArgs)
End Function
End Class
End Namespace

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' Allgemeine Informationen über eine Assembly werden über die folgenden
' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
' die einer Assembly zugeordnet sind.
' Werte der Assemblyattribute überprüfen
<Assembly: AssemblyTitle("ZUGFeRDTest")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("ZUGFeRDTest")>
<Assembly: AssemblyCopyright("Copyright © 2018")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird.
<Assembly: Guid("f4f2b40b-902e-4edc-b5e0-c11a0d2ab998")>
' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
'
' Hauptversion
' Nebenversion
' Buildnummer
' Revision
'
' Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' Dieser Code wurde von einem Tool generiert.
' Laufzeitversion:4.0.30319.42000
'
' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
' der Code erneut generiert wird.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
'-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
'''<summary>
''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ZUGFeRDTest.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,139 @@
'------------------------------------------------------------------------------
' <auto-generated>
' Dieser Code wurde von einem Tool generiert.
' Laufzeitversion:4.0.30319.42000
'
' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
' der Code erneut generiert wird.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "Automatische My.Settings-Speicherfunktion"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("172.24.12.50:E:\DataFiles\Firebird\WISAG\EDMI_MASTER.FDB")> _
Public ReadOnly Property FB_DATABASE() As String
Get
Return CType(Me("FB_DATABASE"),String)
End Get
End Property
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("172.24.12.50")> _
Public ReadOnly Property FB_DATASOURCE() As String
Get
Return CType(Me("FB_DATASOURCE"),String)
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("sysdba")> _
Public Property FB_USER() As String
Get
Return CType(Me("FB_USER"),String)
End Get
Set
Me("FB_USER") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("dd")> _
Public Property FB_PASS() As String
Get
Return CType(Me("FB_PASS"),String)
End Get
Set
Me("FB_PASS") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property MD5Cheksum() As String
Get
Return CType(Me("MD5Cheksum"),String)
End Get
Set
Me("MD5Cheksum") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd")> _
Public Property MSSQL_CONNECTIONSTRING() As String
Get
Return CType(Me("MSSQL_CONNECTIONSTRING"),String)
End Get
Set
Me("MSSQL_CONNECTIONSTRING") = value
End Set
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.ZUGFeRDTest.My.MySettings
Get
Return Global.ZUGFeRDTest.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@@ -0,0 +1,24 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles />
<Settings>
<Setting Name="FB_DATABASE" Type="System.String" Scope="Application">
<Value Profile="(Default)">172.24.12.50:E:\DataFiles\Firebird\WISAG\EDMI_MASTER.FDB</Value>
</Setting>
<Setting Name="FB_DATASOURCE" Type="System.String" Scope="Application">
<Value Profile="(Default)">172.24.12.50</Value>
</Setting>
<Setting Name="FB_USER" Type="System.String" Scope="User">
<Value Profile="(Default)">sysdba</Value>
</Setting>
<Setting Name="FB_PASS" Type="System.String" Scope="User">
<Value Profile="(Default)">dd</Value>
</Setting>
<Setting Name="MD5Cheksum" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="MSSQL_CONNECTIONSTRING" Type="System.String" Scope="User">
<Value Profile="(Default)">Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle.Cryptography" version="2.5.0" targetFramework="net462" />
<package id="DocumentFormat.OpenXml" version="3.2.0" targetFramework="net462" />
<package id="DocumentFormat.OpenXml.Framework" version="3.2.0" targetFramework="net462" />
<package id="GdPicture" version="14.3.14" targetFramework="net48" />
<package id="GdPicture.runtimes.windows" version="14.3.14" targetFramework="net48" />
<package id="Microsoft.AspNet.WebApi.Client" version="6.0.0" targetFramework="net462" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net462" />
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net462" />
<package id="Microsoft.VisualBasic" version="10.3.0" targetFramework="net462" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
<package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net462" />
<package id="OpenMcdf" version="2.4.1" targetFramework="net462" />
<package id="protobuf-net" version="3.2.46" targetFramework="net462" />
<package id="protobuf-net.Core" version="3.2.46" targetFramework="net462" />
<package id="RtfPipe" version="2.0.7677.4303" targetFramework="net462" />
<package id="System.Buffers" version="4.6.0" targetFramework="net462" />
<package id="System.CodeDom" version="8.0.0" targetFramework="net462" />
<package id="System.Collections.Immutable" version="8.0.0" targetFramework="net462" />
<package id="System.IO.Packaging" version="8.0.1" targetFramework="net462" />
<package id="System.Management" version="8.0.0" targetFramework="net462" />
<package id="System.Memory" version="4.6.0" targetFramework="net462" />
<package id="System.Numerics.Vectors" version="4.6.0" targetFramework="net462" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Pkcs" version="8.0.1" targetFramework="net462" />
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net462" />
<package id="System.Text.Json" version="8.0.5" targetFramework="net462" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
<package id="System.ValueTuple" version="4.6.1" targetFramework="net48" />
</packages>

View File

@@ -0,0 +1,49 @@
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.Modules
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow
Namespace My
''' <summary>
''' Extends the My Namespace
''' Example: My.LogConfig
''' </summary>
<HideModuleName()>
Module Extension
Property LogConfig As LogConfig
#Region "Database"
Property Database As DatabaseWithFallback
Property DatabaseECM As MSSQLServer
Property DatabaseIDB As MSSQLServer
End Module
#End Region
Partial Friend Class MyApplication
Public Property Skin As String = ""
Public Property Palette As String = ""
Public Property GlobixDropAreaStyle As String = "PROGRESSIVE"
Public Property Settings As New State.SettingsState
Public Property User As New State.UserState
Public Property Service As New State.ServiceState
Public Property Modules As New Dictionary(Of String, State.ModuleState)
Public Property ModulesActive As New List(Of String)
Public CommandLineFunction As String
Public CommandLineArguments As New Dictionary(Of String, String)
Public Function GetEnvironment() As Environment
Return New Environment With {
.Database = My.DatabaseECM,
.DatabaseIDB = My.DatabaseIDB,
.Modules = My.Application.Modules,
.Service = My.Application.Service,
.Settings = My.Application.Settings,
.User = My.Application.User
}
End Function
End Class
End Namespace

View File

@@ -93,6 +93,10 @@
<Reference Include="DigitalData.Modules.Database">
<HintPath>..\..\DDModules\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.EDMI.API, Version=1.6.1.1, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>P:\Projekte DIGITAL DATA\DIGITAL DATA - Entwicklung\DLL_Bibliotheken\Digital Data\DD_Modules\DigitalData.Modules.EDMI.API.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Encryption">
<HintPath>..\..\DDModules\Encryption\bin\Debug\DigitalData.Modules.Encryption.dll</HintPath>
</Reference>
@@ -117,6 +121,10 @@
<Reference Include="DigitalData.Modules.Windream">
<HintPath>..\..\DDModules\Windream\bin\Debug\DigitalData.Modules.Windream.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.ZooFlow, Version=1.3.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DDModules\ZooFlow\bin\Debug\DigitalData.Modules.ZooFlow.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.3.2.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
@@ -406,6 +414,7 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="MyApplication.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="frmBulkInsert.resx">
@@ -487,10 +496,6 @@
<Project>{a8c3f298-76ab-4359-ab3c-986e313b4336}</Project>
<Name>EDMIService</Name>
</ProjectReference>
<ProjectReference Include="..\Services.ZUGFeRDService\DDZUGFeRDService.vbproj">
<Project>{7deec36e-ea5f-4711-ad1e-fd8894f4ad77}</Project>
<Name>DDZUGFeRDService</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="Resources\alignhorizontalbottom.svg" />

View File

@@ -23,28 +23,141 @@ Partial Class frmFilesystem
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button()
Me.Button2 = New System.Windows.Forms.Button()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.Button3 = New System.Windows.Forms.Button()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
Me.txtServiceAddress = New DevExpress.XtraEditors.TextEdit()
Me.Label1 = New System.Windows.Forms.Label()
Me.txtServicePort = New DevExpress.XtraEditors.TextEdit()
Me.Button4 = New System.Windows.Forms.Button()
Me.txtStatus = New System.Windows.Forms.TextBox()
Me.GroupBox1.SuspendLayout()
CType(Me.txtServiceAddress.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.txtServicePort.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(12, 12)
Me.Button1.Location = New System.Drawing.Point(59, 343)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 23)
Me.Button1.Size = New System.Drawing.Size(288, 23)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"
Me.Button1.Text = "CreateDateDirectory"
Me.Button1.UseVisualStyleBackColor = True
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(6, 71)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(288, 23)
Me.Button2.TabIndex = 1
Me.Button2.Text = "Stream simple file"
Me.Button2.UseVisualStyleBackColor = True
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.Button3)
Me.GroupBox1.Controls.Add(Me.TextBox1)
Me.GroupBox1.Controls.Add(Me.Button2)
Me.GroupBox1.Location = New System.Drawing.Point(36, 153)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(709, 157)
Me.GroupBox1.TabIndex = 2
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "Stream simple file"
'
'Button3
'
Me.Button3.Location = New System.Drawing.Point(6, 19)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(181, 23)
Me.Button3.TabIndex = 3
Me.Button3.Text = "1. Choose file"
Me.Button3.UseVisualStyleBackColor = True
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(6, 45)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(669, 20)
Me.TextBox1.TabIndex = 2
'
'txtServiceAddress
'
Me.txtServiceAddress.Location = New System.Drawing.Point(36, 37)
Me.txtServiceAddress.Name = "txtServiceAddress"
Me.txtServiceAddress.Size = New System.Drawing.Size(485, 20)
Me.txtServiceAddress.TabIndex = 5
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(33, 21)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(81, 13)
Me.Label1.TabIndex = 6
Me.Label1.Text = "ServiceAdresse"
'
'txtServicePort
'
Me.txtServicePort.EditValue = New Decimal(New Integer() {9000, 0, 0, 0})
Me.txtServicePort.Location = New System.Drawing.Point(36, 63)
Me.txtServicePort.Name = "txtServicePort"
Me.txtServicePort.Properties.EditValueChangedFiringMode = DevExpress.XtraEditors.Controls.EditValueChangedFiringMode.Buffered
Me.txtServicePort.Properties.MaskSettings.Set("MaskManagerType", GetType(DevExpress.Data.Mask.NumericMaskManager))
Me.txtServicePort.Size = New System.Drawing.Size(485, 20)
Me.txtServicePort.TabIndex = 7
'
'Button4
'
Me.Button4.Location = New System.Drawing.Point(36, 89)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(75, 23)
Me.Button4.TabIndex = 8
Me.Button4.Text = "Connect"
Me.Button4.UseVisualStyleBackColor = True
'
'txtStatus
'
Me.txtStatus.Location = New System.Drawing.Point(527, 37)
Me.txtStatus.Name = "txtStatus"
Me.txtStatus.Size = New System.Drawing.Size(100, 20)
Me.txtStatus.TabIndex = 9
'
'frmFilesystem
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(800, 450)
Me.Controls.Add(Me.txtStatus)
Me.Controls.Add(Me.Button4)
Me.Controls.Add(Me.txtServicePort)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.txtServiceAddress)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.Button1)
Me.Name = "frmFilesystem"
Me.Text = "frmFilesystem"
Me.GroupBox1.ResumeLayout(False)
Me.GroupBox1.PerformLayout()
CType(Me.txtServiceAddress.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.txtServicePort.Properties, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents Button1 As Button
Friend WithEvents Button2 As Button
Friend WithEvents GroupBox1 As GroupBox
Friend WithEvents Button3 As Button
Friend WithEvents TextBox1 As TextBox
Friend WithEvents SaveFileDialog1 As SaveFileDialog
Friend WithEvents txtServiceAddress As DevExpress.XtraEditors.TextEdit
Friend WithEvents Label1 As Label
Friend WithEvents txtServicePort As DevExpress.XtraEditors.TextEdit
Friend WithEvents Button4 As Button
Friend WithEvents txtStatus As TextBox
End Class

View File

@@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="SaveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -1,8 +1,29 @@
Imports DigitalData.Modules.Logging
Imports System.Collections.Generic
Imports System.IO
Imports System.Numerics ' Verweis auf System.Numerics assembly hinzufügen!
Imports System.Security.Cryptography
Imports DigitalData.GUIs.Common
Imports DigitalData.Modules.Base.IDB.Constants
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow.State
Public Class frmFilesystem
Private Client As Client
Private Logger As Logger
Private Const STATUS_CONNECTED = "Connection Established"
Private Const STATUS_CONNECTING = "Trying to create connection..."
Private Const STATUS_FAILED = "Connection Failed!"
Private ConnectionChanged As Boolean = False
Public Property ServiceAddress As String = ""
Public Property ServiceOnline As Boolean = False
Private LogConfig As LogConfig
Private Filesystem As DigitalData.Modules.Filesystem.File
Private MYDD_Filesystem As DigitalData.Modules.Filesystem.File
Private ShortName As String = "E:\some_test_file.txt"
Private LongName As String = "E:\some_test_file_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more.txt"
@@ -10,7 +31,8 @@ Public Class frmFilesystem
Private Sub frmFilesystem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
LogConfig = New LogConfig(LogConfig.PathType.Temp)
Filesystem = New DigitalData.Modules.Filesystem.File(LogConfig)
Logger = LogConfig.GetLogger()
MYDD_Filesystem = New DigitalData.Modules.Filesystem.File(LogConfig)
'Using oWriter = IO.File.CreateText("E:\some_test_file.txt")
@@ -34,6 +56,138 @@ Public Class frmFilesystem
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim oDateString = Filesystem.CreateDateDirectory("E:\")
Dim oDateString = MYDD_Filesystem.CreateDateDirectory("E:\")
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
If SaveFileDialog1.ShowDialog = DialogResult.OK Then
' Fallback: einfache Textdatei schreiben
System.IO.File.WriteAllText(SaveFileDialog1.FileName, "Some text data")
End If
End Sub
Private Async Function Button2_ClickAsync(sender As Object, e As EventArgs) As Task Handles Button2.Click
' Import a file via EDMI Globix ImportFile API to test Service.EDMIService ImportFileMethod
Try
If Client Is Nothing OrElse ServiceOnline = False Then
MsgBox("Bitte zuerst Verbindung zum EDMI Service herstellen.", MsgBoxStyle.Exclamation, Text)
Return
End If
Using ofd As New OpenFileDialog()
ofd.Title = "Datei für Import wählen"
ofd.Filter = "Alle Dateien (*.*)|*.*"
If ofd.ShowDialog() <> DialogResult.OK Then
Return
End If
Dim oFilePath = ofd.FileName
Dim fi As New FileInfo(oFilePath)
Dim fileBytes As Byte() = IO.File.ReadAllBytes(oFilePath)
' Basic user context for testing
Dim user As New DigitalData.Modules.ZooFlow.State.UserState() With {
.UserName = Environment.UserName,
.Language = "de-DE",
.LanguageId = 1031
}
Dim oObjectStore As String = "SelectedDocType.ObjectStore"
Dim oIDBDoctypeId As Long = 1
Dim oObjectKind As String = "DOC"
Dim oProfileId As Integer = 1
Dim oAttributes As List(Of UserAttributeValue) = Nothing
Dim oOptions As New Options.ImportFileOptions
Logger.Debug("FilePath: [{0}]", oFilePath)
Logger.Debug("ObjectStore: [{0}]", oObjectStore)
Logger.Debug("ObjectKind: [{0}]", oObjectKind)
Logger.Debug("ProfileId: [{0}]", oProfileId)
Logger.Debug("IDB DoctypeId: [{0}]", oIDBDoctypeId)
Logger.Info("Running Import")
Dim oResult = Await My.Application.Service.Client.Globix_ImportFileAsync(
oFilePath, oProfileId, oAttributes, oObjectStore, oObjectKind, oIDBDoctypeId, oOptions)
Logger.Info("Import result: [{0}]", oResult.OK)
Logger.Info("Imported file got ObjectId [{0}]", oResult.ObjectId)
If oResult.OK Then
MsgBox("Alles OK")
Else
Logger.Warn("Import failed with message: [{0}] and details [{1}]", oResult.ErrorMessage, oResult.ErrorDetails)
Dim oMsg As String, oTitle As String
If My.Application.User.Language = "de-DE" Then
oMsg = $"Die Datei wurde nicht verarbeitet.{vbNewLine}{vbNewLine}Fehler: {oResult.ErrorMessage}"
oTitle = "Achtung"
Else
oMsg = $"Unexpected Error in FileFlow{vbNewLine}{vbNewLine}Fehler: {oResult.ErrorMessage}"
oTitle = "Attention"
End If
MsgBox("Fehler")
End If
End Using
Catch ex As Exception
If Logger IsNot Nothing Then Logger.Error(ex)
MsgBox("Fehler beim Datei-Import.", MsgBoxStyle.Critical, Text)
End Try
End Function
Public Class SecureStorageHandler
End Class
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Try
Dim oIPAddress = txtServiceAddress.Text
Dim oPort = Integer.Parse(txtServicePort.Text)
Client = New Client(LogConfig, oIPAddress, oPort)
txtStatus.Text = STATUS_CONNECTING
Dim oResult = Client.Connect()
If oResult = True Then
ServiceAddress = $"{oIPAddress}:{oPort}"
ServiceOnline = True
txtStatus.Text = STATUS_CONNECTED
My.Application.Service.Client = Client
Logger.Debug("Loading client config..")
Dim oClientConfig = My.Application.Service.Client.ClientConfig
Logger.Debug("Establishing ECM connection..")
Dim oECMConnectionString = oClientConfig.ConnectionStringECM
My.DatabaseECM = New MSSQLServer(My.LogConfig, oECMConnectionString)
Logger.Debug("Establishing IDB connection..")
Dim oIDBConnectionString = oClientConfig.ConnectionStringIDB
My.DatabaseIDB = New MSSQLServer(My.LogConfig, oIDBConnectionString)
Logger.Debug("Establishing Database connection with fallback..")
My.Database = New DatabaseWithFallback(LogConfig, My.Application.Service.Client, My.DatabaseECM, My.DatabaseIDB)
Else
ServiceAddress = ""
ServiceOnline = True
txtStatus.Text = STATUS_FAILED
' TODO: Make a connection test that is as elaborate as this one :D
'Select Case oResult
' Case ClassService.ConnectionTestResult.NotFound
' lblStatus.Text = "Dienst konnte nicht gefunden werden. Bitte überprüfen sie Addresse und Port."
' Case ClassService.ConnectionTestResult.EmptyURI
' lblStatus.Text = "Bitte tragen Sie eine gültige Dienst Adresse ein."
' Case ClassService.ConnectionTestResult.Authentication
' lblStatus.Text = "Authentifizierungsfehler. Prüfen Sie, ob sich Ihr Gerät in der korrekten Domäne befindet."
' Case Else
' lblStatus.Text = "Unbekannter Fehler."
'End Select
End If
Catch ex As Exception
If Logger IsNot Nothing Then Logger.Error(ex)
MsgBox("Fehler beim Verbindungsaufbau", MsgBoxStyle.Critical, Text)
End Try
End Sub
End Class

View File

@@ -2,16 +2,26 @@
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="ZUGFeRDTest.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="ZUGFeRDTest.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="ZUGFeRDTest.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="ZUGFeRDTest.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<applicationSettings>
<ZUGFeRDTest.MySettings>
<setting name="FB_DATABASE" serializeAs="String">
<value>172.24.12.50:E:\DataFiles\Firebird\WISAG\EDMI_MASTER.FDB</value>
</setting>
<setting name="FB_DATASOURCE" serializeAs="String">
<value>172.24.12.50</value>
</setting>
</ZUGFeRDTest.MySettings>
<ZUGFeRDTest.My.MySettings>
<setting name="FB_DATABASE" serializeAs="String">
<value>172.24.12.50:E:\DataFiles\Firebird\WISAG\EDMI_MASTER.FDB</value>
@@ -22,6 +32,20 @@
</ZUGFeRDTest.My.MySettings>
</applicationSettings>
<userSettings>
<ZUGFeRDTest.MySettings>
<setting name="FB_USER" serializeAs="String">
<value>sysdba</value>
</setting>
<setting name="FB_PASS" serializeAs="String">
<value>dd</value>
</setting>
<setting name="MD5Cheksum" serializeAs="String">
<value />
</setting>
<setting name="MSSQL_CONNECTIONSTRING" serializeAs="String">
<value>Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;TrustServerCertificate=true;</value>
</setting>
</ZUGFeRDTest.MySettings>
<ZUGFeRDTest.My.MySettings>
<setting name="FB_USER" serializeAs="String">
<value>sysdba</value>
@@ -147,6 +171,18 @@
<assemblyIdentity name="GdPicture.NET.14.Common" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.3.19.0" newVersion="14.3.19.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="GdPicture.NET.14" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="GdPicture.NET.14.Common" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="GdPicture.NET.14.Imaging" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -1,4 +1,6 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Imports System.Windows.Forms
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class Form1
Inherits System.Windows.Forms.Form
@@ -22,227 +24,256 @@ Partial Class Form1
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
Me.btRunJob = New System.Windows.Forms.Button()
Me.ListBox1 = New System.Windows.Forms.ListBox()
Me.btValidateSerializePDF = New System.Windows.Forms.Button()
Me.btValidateSerializeParseProps = New System.Windows.Forms.Button()
Me.btCreateMD5Checksum = New System.Windows.Forms.Button()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.ButtonValidateXMLOnly = New System.Windows.Forms.Button()
Me.GroupBox2 = New System.Windows.Forms.GroupBox()
Me.btExtractPDFAttachments = New System.Windows.Forms.Button()
Me.GroupBox3 = New System.Windows.Forms.GroupBox()
Me.txtMD5Checksum = New System.Windows.Forms.TextBox()
Me.txtPropName = New System.Windows.Forms.TextBox()
Me.GroupBox4 = New System.Windows.Forms.GroupBox()
Me.btFindExtractXMLValue = New System.Windows.Forms.Button()
Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog()
Me.GroupBox5 = New System.Windows.Forms.GroupBox()
Me.btWriteBinary = New System.Windows.Forms.Button()
Me.OpenFileDialog2 = New System.Windows.Forms.OpenFileDialog()
Me.Button1 = New System.Windows.Forms.Button()
Me.GroupBox1.SuspendLayout()
Me.GroupBox2.SuspendLayout()
Me.GroupBox3.SuspendLayout()
Me.GroupBox4.SuspendLayout()
Me.GroupBox5.SuspendLayout()
Me.SuspendLayout()
OpenFileDialog1 = New OpenFileDialog()
btRunJob = New Button()
ListBox1 = New ListBox()
btValidateSerializePDF = New Button()
btValidateSerializeParseProps = New Button()
btCreateMD5Checksum = New Button()
GroupBox1 = New GroupBox()
ButtonValidateXMLOnly = New Button()
GroupBox2 = New GroupBox()
btExtractPDFAttachments = New Button()
GroupBox3 = New GroupBox()
txtMD5Checksum = New TextBox()
txtPropName = New TextBox()
GroupBox4 = New GroupBox()
btFindExtractXMLValue = New Button()
FolderBrowserDialog1 = New FolderBrowserDialog()
GroupBox5 = New GroupBox()
btWriteBinary = New Button()
OpenFileDialog2 = New OpenFileDialog()
Button1 = New Button()
Button2 = New Button()
GroupBox1.SuspendLayout()
GroupBox2.SuspendLayout()
GroupBox3.SuspendLayout()
GroupBox4.SuspendLayout()
GroupBox5.SuspendLayout()
SuspendLayout()
'
' OpenFileDialog1
'
Me.OpenFileDialog1.FileName = "OpenFileDialog1"
OpenFileDialog1.FileName = "OpenFileDialog1"
'
' btRunJob
'
Me.btRunJob.Location = New System.Drawing.Point(6, 19)
Me.btRunJob.Name = "btRunJob"
Me.btRunJob.Size = New System.Drawing.Size(221, 23)
Me.btRunJob.TabIndex = 0
Me.btRunJob.Text = "Run Job"
Me.btRunJob.UseVisualStyleBackColor = True
btRunJob.Location = New System.Drawing.Point(8, 29)
btRunJob.Margin = New Padding(4, 5, 4, 5)
btRunJob.Name = "btRunJob"
btRunJob.Size = New System.Drawing.Size(295, 35)
btRunJob.TabIndex = 0
btRunJob.Text = "Run Job"
btRunJob.UseVisualStyleBackColor = True
'
' ListBox1
'
Me.ListBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ListBox1.FormattingEnabled = True
Me.ListBox1.Location = New System.Drawing.Point(378, 8)
Me.ListBox1.Name = "ListBox1"
Me.ListBox1.Size = New System.Drawing.Size(532, 602)
Me.ListBox1.TabIndex = 1
ListBox1.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right
ListBox1.FormattingEnabled = True
ListBox1.Location = New System.Drawing.Point(504, 12)
ListBox1.Margin = New Padding(4, 5, 4, 5)
ListBox1.Name = "ListBox1"
ListBox1.Size = New System.Drawing.Size(362, 664)
ListBox1.TabIndex = 1
'
' btValidateSerializePDF
'
Me.btValidateSerializePDF.Location = New System.Drawing.Point(6, 19)
Me.btValidateSerializePDF.Name = "btValidateSerializePDF"
Me.btValidateSerializePDF.Size = New System.Drawing.Size(246, 23)
Me.btValidateSerializePDF.TabIndex = 2
Me.btValidateSerializePDF.Text = "Validate and Serialize PDF"
Me.btValidateSerializePDF.UseVisualStyleBackColor = True
btValidateSerializePDF.Location = New System.Drawing.Point(8, 29)
btValidateSerializePDF.Margin = New Padding(4, 5, 4, 5)
btValidateSerializePDF.Name = "btValidateSerializePDF"
btValidateSerializePDF.Size = New System.Drawing.Size(328, 35)
btValidateSerializePDF.TabIndex = 2
btValidateSerializePDF.Text = "Validate and Serialize PDF"
btValidateSerializePDF.UseVisualStyleBackColor = True
'
' btValidateSerializeParseProps
'
Me.btValidateSerializeParseProps.Location = New System.Drawing.Point(6, 48)
Me.btValidateSerializeParseProps.Name = "btValidateSerializeParseProps"
Me.btValidateSerializeParseProps.Size = New System.Drawing.Size(246, 23)
Me.btValidateSerializeParseProps.TabIndex = 3
Me.btValidateSerializeParseProps.Text = "Validate and Serialize PDF and Parse Props"
Me.btValidateSerializeParseProps.UseVisualStyleBackColor = True
btValidateSerializeParseProps.Location = New System.Drawing.Point(8, 74)
btValidateSerializeParseProps.Margin = New Padding(4, 5, 4, 5)
btValidateSerializeParseProps.Name = "btValidateSerializeParseProps"
btValidateSerializeParseProps.Size = New System.Drawing.Size(328, 35)
btValidateSerializeParseProps.TabIndex = 3
btValidateSerializeParseProps.Text = "Validate and Serialize PDF and Parse Props"
btValidateSerializeParseProps.UseVisualStyleBackColor = True
'
' btCreateMD5Checksum
'
Me.btCreateMD5Checksum.Location = New System.Drawing.Point(6, 19)
Me.btCreateMD5Checksum.Name = "btCreateMD5Checksum"
Me.btCreateMD5Checksum.Size = New System.Drawing.Size(221, 23)
Me.btCreateMD5Checksum.TabIndex = 4
Me.btCreateMD5Checksum.Text = "Create MD5 Checksum for PDF"
Me.btCreateMD5Checksum.UseVisualStyleBackColor = True
btCreateMD5Checksum.Location = New System.Drawing.Point(8, 29)
btCreateMD5Checksum.Margin = New Padding(4, 5, 4, 5)
btCreateMD5Checksum.Name = "btCreateMD5Checksum"
btCreateMD5Checksum.Size = New System.Drawing.Size(295, 35)
btCreateMD5Checksum.TabIndex = 4
btCreateMD5Checksum.Text = "Create MD5 Checksum for PDF"
btCreateMD5Checksum.UseVisualStyleBackColor = True
'
' GroupBox1
'
Me.GroupBox1.Controls.Add(Me.ButtonValidateXMLOnly)
Me.GroupBox1.Controls.Add(Me.btRunJob)
Me.GroupBox1.Location = New System.Drawing.Point(12, 12)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(252, 92)
Me.GroupBox1.TabIndex = 7
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "Run Job like in eInvoice Service"
GroupBox1.Controls.Add(ButtonValidateXMLOnly)
GroupBox1.Controls.Add(btRunJob)
GroupBox1.Location = New System.Drawing.Point(16, 18)
GroupBox1.Margin = New Padding(4, 5, 4, 5)
GroupBox1.Name = "GroupBox1"
GroupBox1.Padding = New Padding(4, 5, 4, 5)
GroupBox1.Size = New System.Drawing.Size(319, 116)
GroupBox1.TabIndex = 7
GroupBox1.TabStop = False
GroupBox1.Text = "Run Job like in eInvoice Service"
'
' ButtonValidateXMLOnly
'
Me.ButtonValidateXMLOnly.Location = New System.Drawing.Point(6, 48)
Me.ButtonValidateXMLOnly.Name = "ButtonValidateXMLOnly"
Me.ButtonValidateXMLOnly.Size = New System.Drawing.Size(221, 23)
Me.ButtonValidateXMLOnly.TabIndex = 4
Me.ButtonValidateXMLOnly.Text = "XML Job (Sichtbeleg)"
Me.ButtonValidateXMLOnly.UseVisualStyleBackColor = True
ButtonValidateXMLOnly.Location = New System.Drawing.Point(8, 74)
ButtonValidateXMLOnly.Margin = New Padding(4, 5, 4, 5)
ButtonValidateXMLOnly.Name = "ButtonValidateXMLOnly"
ButtonValidateXMLOnly.Size = New System.Drawing.Size(295, 35)
ButtonValidateXMLOnly.TabIndex = 4
ButtonValidateXMLOnly.Text = "Run XML Job (spez. Configuration)"
ButtonValidateXMLOnly.UseVisualStyleBackColor = True
'
' GroupBox2
'
Me.GroupBox2.Controls.Add(Me.btValidateSerializePDF)
Me.GroupBox2.Controls.Add(Me.btExtractPDFAttachments)
Me.GroupBox2.Controls.Add(Me.btValidateSerializeParseProps)
Me.GroupBox2.Location = New System.Drawing.Point(12, 110)
Me.GroupBox2.Name = "GroupBox2"
Me.GroupBox2.Size = New System.Drawing.Size(360, 155)
Me.GroupBox2.TabIndex = 8
Me.GroupBox2.TabStop = False
Me.GroupBox2.Text = "Run Functions on a single file (needs Breakpoint)"
GroupBox2.Controls.Add(btValidateSerializePDF)
GroupBox2.Controls.Add(btExtractPDFAttachments)
GroupBox2.Controls.Add(btValidateSerializeParseProps)
GroupBox2.Location = New System.Drawing.Point(16, 144)
GroupBox2.Margin = New Padding(4, 5, 4, 5)
GroupBox2.Name = "GroupBox2"
GroupBox2.Padding = New Padding(4, 5, 4, 5)
GroupBox2.Size = New System.Drawing.Size(480, 167)
GroupBox2.TabIndex = 8
GroupBox2.TabStop = False
GroupBox2.Text = "Run Functions on a single file (needs Breakpoint)"
'
' btExtractPDFAttachments
'
Me.btExtractPDFAttachments.Location = New System.Drawing.Point(6, 77)
Me.btExtractPDFAttachments.Name = "btExtractPDFAttachments"
Me.btExtractPDFAttachments.Size = New System.Drawing.Size(246, 23)
Me.btExtractPDFAttachments.TabIndex = 3
Me.btExtractPDFAttachments.Text = "Extract PDF Attachments"
Me.btExtractPDFAttachments.UseVisualStyleBackColor = True
btExtractPDFAttachments.Location = New System.Drawing.Point(8, 118)
btExtractPDFAttachments.Margin = New Padding(4, 5, 4, 5)
btExtractPDFAttachments.Name = "btExtractPDFAttachments"
btExtractPDFAttachments.Size = New System.Drawing.Size(328, 35)
btExtractPDFAttachments.TabIndex = 3
btExtractPDFAttachments.Text = "Extract PDF Attachments"
btExtractPDFAttachments.UseVisualStyleBackColor = True
'
' GroupBox3
'
Me.GroupBox3.Controls.Add(Me.btCreateMD5Checksum)
Me.GroupBox3.Controls.Add(Me.txtMD5Checksum)
Me.GroupBox3.Location = New System.Drawing.Point(12, 271)
Me.GroupBox3.Name = "GroupBox3"
Me.GroupBox3.Size = New System.Drawing.Size(360, 85)
Me.GroupBox3.TabIndex = 9
Me.GroupBox3.TabStop = False
Me.GroupBox3.Text = "Open PDF and calculate Checksum"
GroupBox3.Controls.Add(btCreateMD5Checksum)
GroupBox3.Controls.Add(txtMD5Checksum)
GroupBox3.Location = New System.Drawing.Point(16, 321)
GroupBox3.Margin = New Padding(4, 5, 4, 5)
GroupBox3.Name = "GroupBox3"
GroupBox3.Padding = New Padding(4, 5, 4, 5)
GroupBox3.Size = New System.Drawing.Size(480, 131)
GroupBox3.TabIndex = 9
GroupBox3.TabStop = False
GroupBox3.Text = "Open PDF and calculate Checksum"
'
' txtMD5Checksum
'
Me.txtMD5Checksum.DataBindings.Add(New System.Windows.Forms.Binding("Text", Global.ZUGFeRDTest.My.MySettings.Default, "MD5Cheksum", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
Me.txtMD5Checksum.Location = New System.Drawing.Point(6, 49)
Me.txtMD5Checksum.Name = "txtMD5Checksum"
Me.txtMD5Checksum.Size = New System.Drawing.Size(348, 20)
Me.txtMD5Checksum.TabIndex = 5
Me.txtMD5Checksum.Text = Global.ZUGFeRDTest.My.MySettings.Default.MD5Cheksum
txtMD5Checksum.Location = New System.Drawing.Point(8, 75)
txtMD5Checksum.Margin = New Padding(4, 5, 4, 5)
txtMD5Checksum.Name = "txtMD5Checksum"
txtMD5Checksum.Size = New System.Drawing.Size(463, 27)
txtMD5Checksum.TabIndex = 5
'
' txtPropName
'
Me.txtPropName.Location = New System.Drawing.Point(6, 48)
Me.txtPropName.Name = "txtPropName"
Me.txtPropName.Size = New System.Drawing.Size(348, 20)
Me.txtPropName.TabIndex = 10
txtPropName.Location = New System.Drawing.Point(8, 74)
txtPropName.Margin = New Padding(4, 5, 4, 5)
txtPropName.Name = "txtPropName"
txtPropName.Size = New System.Drawing.Size(463, 27)
txtPropName.TabIndex = 10
'
' GroupBox4
'
Me.GroupBox4.Controls.Add(Me.btFindExtractXMLValue)
Me.GroupBox4.Controls.Add(Me.txtPropName)
Me.GroupBox4.Location = New System.Drawing.Point(12, 362)
Me.GroupBox4.Name = "GroupBox4"
Me.GroupBox4.Size = New System.Drawing.Size(360, 122)
Me.GroupBox4.TabIndex = 11
Me.GroupBox4.TabStop = False
Me.GroupBox4.Text = "GroupBox4"
GroupBox4.Controls.Add(btFindExtractXMLValue)
GroupBox4.Controls.Add(txtPropName)
GroupBox4.Location = New System.Drawing.Point(16, 462)
GroupBox4.Margin = New Padding(4, 5, 4, 5)
GroupBox4.Name = "GroupBox4"
GroupBox4.Padding = New Padding(4, 5, 4, 5)
GroupBox4.Size = New System.Drawing.Size(480, 117)
GroupBox4.TabIndex = 11
GroupBox4.TabStop = False
GroupBox4.Text = "GroupBox4"
'
' btFindExtractXMLValue
'
Me.btFindExtractXMLValue.Location = New System.Drawing.Point(6, 19)
Me.btFindExtractXMLValue.Name = "btFindExtractXMLValue"
Me.btFindExtractXMLValue.Size = New System.Drawing.Size(221, 23)
Me.btFindExtractXMLValue.TabIndex = 11
Me.btFindExtractXMLValue.Text = "Find and Extract XML Path Value"
Me.btFindExtractXMLValue.UseVisualStyleBackColor = True
btFindExtractXMLValue.Location = New System.Drawing.Point(8, 29)
btFindExtractXMLValue.Margin = New Padding(4, 5, 4, 5)
btFindExtractXMLValue.Name = "btFindExtractXMLValue"
btFindExtractXMLValue.Size = New System.Drawing.Size(295, 35)
btFindExtractXMLValue.TabIndex = 11
btFindExtractXMLValue.Text = "Find and Extract XML Path Value"
btFindExtractXMLValue.UseVisualStyleBackColor = True
'
' GroupBox5
'
Me.GroupBox5.Controls.Add(Me.btWriteBinary)
Me.GroupBox5.Location = New System.Drawing.Point(12, 490)
Me.GroupBox5.Name = "GroupBox5"
Me.GroupBox5.Size = New System.Drawing.Size(360, 122)
Me.GroupBox5.TabIndex = 12
Me.GroupBox5.TabStop = False
Me.GroupBox5.Text = "GroupBox5"
GroupBox5.Controls.Add(btWriteBinary)
GroupBox5.Location = New System.Drawing.Point(13, 589)
GroupBox5.Margin = New Padding(4, 5, 4, 5)
GroupBox5.Name = "GroupBox5"
GroupBox5.Padding = New Padding(4, 5, 4, 5)
GroupBox5.Size = New System.Drawing.Size(480, 87)
GroupBox5.TabIndex = 12
GroupBox5.TabStop = False
GroupBox5.Text = "GroupBox5"
'
' btWriteBinary
'
Me.btWriteBinary.Location = New System.Drawing.Point(6, 19)
Me.btWriteBinary.Name = "btWriteBinary"
Me.btWriteBinary.Size = New System.Drawing.Size(221, 23)
Me.btWriteBinary.TabIndex = 11
Me.btWriteBinary.Text = "Write Binary to PDF"
Me.btWriteBinary.UseVisualStyleBackColor = True
btWriteBinary.Location = New System.Drawing.Point(8, 29)
btWriteBinary.Margin = New Padding(4, 5, 4, 5)
btWriteBinary.Name = "btWriteBinary"
btWriteBinary.Size = New System.Drawing.Size(295, 35)
btWriteBinary.TabIndex = 11
btWriteBinary.Text = "Write Binary to PDF"
btWriteBinary.UseVisualStyleBackColor = True
'
' OpenFileDialog2
'
Me.OpenFileDialog2.FileName = "OpenFileDialog2"
Me.OpenFileDialog2.Filter = "XML files (*.xml)|*.xml"
OpenFileDialog2.FileName = "OpenFileDialog2"
OpenFileDialog2.Filter = "XML files (*.xml)|*.xml"
'
' Button1
'
Me.Button1.Location = New System.Drawing.Point(270, 31)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 23)
Me.Button1.TabIndex = 4
Me.Button1.Text = "LogFolder"
Me.Button1.UseVisualStyleBackColor = True
Button1.Location = New System.Drawing.Point(361, 47)
Button1.Name = "Button1"
Button1.Size = New System.Drawing.Size(94, 29)
Button1.TabIndex = 5
Button1.Text = "Log Folder"
Button1.UseVisualStyleBackColor = True
'
' Button2
'
Button2.Location = New System.Drawing.Point(361, 82)
Button2.Name = "Button2"
Button2.Size = New System.Drawing.Size(94, 29)
Button2.TabIndex = 13
Button2.Text = "AppFolder"
Button2.UseVisualStyleBackColor = True
'
' Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(916, 633)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.GroupBox5)
Me.Controls.Add(Me.GroupBox4)
Me.Controls.Add(Me.GroupBox3)
Me.Controls.Add(Me.GroupBox2)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.ListBox1)
Me.Name = "Form1"
Me.Text = "E-Invoice-TEST-Tool"
Me.GroupBox1.ResumeLayout(False)
Me.GroupBox2.ResumeLayout(False)
Me.GroupBox3.ResumeLayout(False)
Me.GroupBox3.PerformLayout()
Me.GroupBox4.ResumeLayout(False)
Me.GroupBox4.PerformLayout()
Me.GroupBox5.ResumeLayout(False)
Me.ResumeLayout(False)
AutoScaleDimensions = New System.Drawing.SizeF(8.0F, 20.0F)
AutoScaleMode = AutoScaleMode.Font
ClientSize = New System.Drawing.Size(879, 690)
Controls.Add(Button2)
Controls.Add(Button1)
Controls.Add(GroupBox5)
Controls.Add(GroupBox4)
Controls.Add(GroupBox3)
Controls.Add(GroupBox2)
Controls.Add(GroupBox1)
Controls.Add(ListBox1)
Margin = New Padding(4, 5, 4, 5)
Name = "Form1"
Text = "E-Invoice-TEST-Tool"
GroupBox1.ResumeLayout(False)
GroupBox2.ResumeLayout(False)
GroupBox3.ResumeLayout(False)
GroupBox3.PerformLayout()
GroupBox4.ResumeLayout(False)
GroupBox4.PerformLayout()
GroupBox5.ResumeLayout(False)
ResumeLayout(False)
End Sub
@@ -265,5 +296,4 @@ Partial Class Form1
Friend WithEvents btWriteBinary As Button
Friend WithEvents ButtonValidateXMLOnly As Button
Friend WithEvents OpenFileDialog2 As OpenFileDialog
Friend WithEvents Button1 As Button
End Class

View File

@@ -126,4 +126,7 @@
<metadata name="OpenFileDialog2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>328, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value>
</metadata>
</root>

View File

@@ -1,6 +1,8 @@
Imports System.IO
Imports System.Data
Imports System.IO
Imports System.Reflection
Imports System.Security.Cryptography
Imports System.Windows.Forms
Imports DigitalData.Modules.Config
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Interfaces
@@ -21,11 +23,16 @@ Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
_logConfig = New LogConfig(LogConfig.PathType.CustomPath, Application.StartupPath & "\Log", Nothing, My.Application.Info.CompanyName, My.Application.Info.ProductName) With {
Dim oLogPath = Path.Combine(Application.StartupPath, "Log")
_logConfig = New LogConfig(LogConfig.PathType.CustomPath, oLogPath, Nothing, My.Application.Info.CompanyName, My.Application.Info.ProductName) With {
.Debug = True
}
_logger = _logConfig.GetLogger()
_mssql = New MSSQLServer(_logConfig, My.Settings.MSSQL_CONNECTIONSTRING)
Dim oCS = My.Settings.MSSQL_CONNECTIONSTRING
If Not oCS.Contains("TrustServerCertificate") Then
oCS += ";TrustServerCertificate=true"
End If
_mssql = New MSSQLServer(_logConfig, oCS)
_GDPictureVersion = "11.2024"
_GDPictureLizenz = ConfigDbFunct.GetProductLicense("GDPICTURE", _GDPictureVersion, _logConfig, My.Settings.MSSQL_CONNECTIONSTRING)
@@ -92,14 +99,14 @@ Public Class Form1
Dim oEN16931_ID = oRow.Item("EN16931_ID")
Args.PropertyMapList.Add(New XmlItemProperty() With {
.XMLPath = xmlPath,
.Description = description,
.TableName = tableName,
.TableColumn = tableColumn,
.IsRequired = isRequired,
.IsGrouped = isGrouped,
.GroupScope = groupScope,
.Specification = specification,
.xmlPath = xmlPath,
.description = description,
.tableName = tableName,
.tableColumn = tableColumn,
.isRequired = isRequired,
.isGrouped = isGrouped,
.groupScope = groupScope,
.specification = specification,
.ItemType = oItemType,
.EN16931_ID = oEN16931_ID
})
@@ -152,9 +159,41 @@ Public Class Form1
If oResult = DialogResult.OK Then
Try
Dim oDoc = _zugferd.ValidateZUGFeRDFileWithGDPicture(OpenFileDialog1.FileName)
Dim oDoc = _zugferd.ValidateZUGFeRDFileWithGDPicture(OpenFileDialog1.FileName, True)
Dim oZFResult = _zugferd.ValidateZUGFeRDDocument(oDoc)
Dim oZUGFERD = _zugferd.SerializeZUGFeRDDocument(oDoc)
Console.WriteLine()
WriteLog("Specification: " & oZFResult.Specification)
'WriteLog("XML-Schema: " & oResult.UsedXMLSchema)
WriteLog("Embedded File Name: " & oZFResult.DataFileName)
Dim oSpecification = oZFResult.Specification
If oSpecification = ZUGFeRDInterface.ZUGFERD_SPEC_10 Then
oSpecification = ZUGFeRDInterface.ZUGFERD_SPEC_DEFAULT
End If
Dim oPropertyMap = oArgs.PropertyMapList.
Where(Function(kv) kv.Specification = oSpecification).
ToDictionary(Function(kv) kv.XMLPath, Function(kv) kv)
Dim oResult2 = _zugferd.PropertyValues.CheckPropertyValues(oZFResult.SchemaObject, oPropertyMap, "test")
WriteLog("Valid Properties: [{0}]", oResult2.ValidProperties.Count)
For Each Prop In oResult2.ValidProperties
If Prop.Value.Length > 250 Then
WriteLog("Property: [{0}] = [{1}]", Prop.Description, Prop.Value.Substring(0, 250))
Else
WriteLog("Property: [{0}] = [{1}]", Prop.Description, Prop.Value)
End If
Next
WriteLog("--------------------------------")
WriteLog("Missing Properties: [{0}]", oResult2.MissingProperties.Count)
For Each Prop In oResult2.MissingProperties
WriteLog("Missing Property: [{0}]", Prop.ToString) ''Prop.Description
Next
WriteLog("--------------------------------")
Catch ex As DigitalData.Modules.Interfaces.Exceptions.ZUGFeRDExecption
Dim oErrorCode = GetRejectionCodeNumber(ex.ErrorCode)
Dim oMessage = oErrorCode + " - (" + ex.ErrorCode.ToString() + ") - " + ex.Message
@@ -162,6 +201,7 @@ Public Class Form1
Catch ex As Exception
MsgBox(ex.Message)
End Try
MsgBox("Finished - check log")
End If
End Sub
@@ -220,7 +260,7 @@ Public Class Form1
Try
If oDialogResult = DialogResult.OK Then
Dim oDoc = _zugferd.ValidateZUGFeRDFileWithGDPicture(OpenFileDialog1.FileName)
Dim oDoc = _zugferd.ValidateZUGFeRDFileWithGDPicture(OpenFileDialog1.FileName, True)
Dim oResult = _zugferd.ValidateZUGFeRDDocument(oDoc)
oResult = _zugferd.SerializeZUGFeRDDocument(oDoc)
@@ -375,6 +415,10 @@ Public Class Form1
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Process.Start(_logConfig.LogDirectory)
Process.Start("explorer.exe", _logConfig.LogDirectory)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Process.Start("explorer.exe", System.Windows.Forms.Application.UserAppDataPath())
End Sub
End Class

View File

@@ -34,5 +34,11 @@ Namespace My
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.ZUGFeRDTest.Form1
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean
Me.MinimumSplashScreenDisplayTime = 0
Return MyBase.OnInitialize(commandLineArgs)
End Function
End Class
End Namespace

View File

@@ -1,35 +1,9 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' Allgemeine Informationen über eine Assembly werden über die folgenden
' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
' die einer Assembly zugeordnet sind.
' Werte der Assemblyattribute überprüfen
<Assembly: AssemblyTitle("ZUGFeRDTest")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("ZUGFeRDTest")>
<Assembly: AssemblyCopyright("Copyright © 2018")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird.
<Assembly: Guid("f4f2b40b-902e-4edc-b5e0-c11a0d2ab998")>
' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
'
' Hauptversion
' Nebenversion
' Buildnummer
' Revision
'
' Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@@ -15,7 +15,7 @@ Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0"), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles />
<Settings>
<Setting Name="FB_DATABASE" Type="System.String" Scope="Application">
@@ -18,7 +18,7 @@
<Value Profile="(Default)" />
</Setting>
<Setting Name="MSSQL_CONNECTIONSTRING" Type="System.String" Scope="User">
<Value Profile="(Default)">Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd</Value>
<Value Profile="(Default)">Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;TrustServerCertificate=true;</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,21 @@
using CoreWCF.Configuration;
using CoreWCF.Description;
var builder = WebApplication.CreateBuilder(args);
// Add CoreWCF services
builder.Services.AddServiceModelServices();
builder.Services.AddServiceModelMetadata();
builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();
var app = builder.Build();
app.UseServiceModel(builder =>
{
// TODO add here service endpoints and behaviors
});
var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>();
serviceMetadataBehavior.HttpGetEnabled = true;
app.Run();

View File

@@ -1,54 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{16156434-E471-43F1-8030-76A0DA17CD5A}</ProjectGuid>
<RootNamespace>ZUGFeRDTest</RootNamespace>
<TargetFramework>net8.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<StartupObject>ZUGFeRDTest.My.MyApplication</StartupObject>
<RootNamespace>ZUGFeRDTest</RootNamespace>
<AssemblyName>ZUGFeRDTest</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>ZUGFeRDTest.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>ZUGFeRDTest.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
<UseWindowsForms>true</UseWindowsForms>
<AssemblyName>ZUGFeRDTest</AssemblyName>
<Company>Digital Data GmbH</Company>
<AssemblyTitle>Provides baseclasses, methods and constants for DD Products</AssemblyTitle>
<AssemblyVersion>2.0</AssemblyVersion>
<FileVersion>2.0</FileVersion>
<Title>$(AssemblyName)</Title>
<Product>$(AssemblyName)</Product>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GdPicture" Version="14.3.18" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.1" />
<PackageReference Include="NLog" Version="6.0.4" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
</ItemGroup>
<ItemGroup>
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
<HintPath>..\packages\BouncyCastle.Cryptography.2.5.0\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
@@ -224,67 +197,20 @@
<Reference Include="System.Net.Http" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.vb">
<DependentUpon>Form1.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<None Update="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
</None>
<None Update="MyProject\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
</None>
<None Update="MyProject\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
</None>
<None Update="MyProject\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<Import Project="..\packages\GdPicture.runtimes.windows.14.3.19\build\net462\GdPicture.runtimes.windows.targets" Condition="Exists('..\packages\GdPicture.runtimes.windows.14.3.19\build\net462\GdPicture.runtimes.windows.targets')" />

View File

@@ -27,5 +27,5 @@
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net462" />
<package id="System.Text.Json" version="8.0.6" targetFramework="net462" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
<package id="System.ValueTuple" version="4.6.1" targetFramework="net48" />
</packages>

View File

@@ -226,6 +226,7 @@
<Compile Include="Scheduler\DatatableJob.vb" />
<Compile Include="Scheduler\JobListener.vb" />
<Compile Include="Scheduler\JobResult.vb" />
<Compile Include="Security\SecureFileHandler.vb" />
<Compile Include="ServiceHost.vb" />
<Compile Include="WindowsService.vb">
<SubType>Component</SubType>

View File

@@ -2,6 +2,7 @@
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Language
Imports System.IO
Imports DigitalData.Services.EDMIService.Security
Namespace Methods.IDB.GetFileObject
Public Class GetFileObjectMethod
@@ -69,6 +70,29 @@ Namespace Methods.IDB.GetFileObject
End Function
Private Function LoadFileContents(pFilePath As String) As Byte()
Try
Dim password = Environment.GetEnvironmentVariable("DD_FILE_ENCRYPTION_PASSWORD")
If String.IsNullOrWhiteSpace(password) Then
Logger.Warn("No encryption password set (DD_FILE_ENCRYPTION_PASSWORD). Attempting legacy plain read for file [{0}]", pFilePath)
Return ReadPlain(pFilePath)
End If
Try
' Try decrypt first (preferred path)
Logger.Debug("Attempting AES decrypt for file [{0}]", pFilePath)
Return SecureFileHandler.DecryptFileToBytes(pFilePath, password)
Catch exDec As Exception
Logger.Warn("Decrypt failed for file [{0}]. Falling back to plain read. Reason: {1}", pFilePath, exDec.Message)
Logger.Error(exDec)
Return ReadPlain(pFilePath)
End Try
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
Private Function LoadFileContents_Old(pFilePath As String) As Byte()
Try
Using oFileStream As New FileStream(pFilePath, FileMode.Open, FileAccess.Read)
Using oMemoryStream As New MemoryStream()
@@ -85,6 +109,15 @@ Namespace Methods.IDB.GetFileObject
End Try
End Function
Private Function ReadPlain(pFilePath As String) As Byte()
Using oFileStream As New FileStream(pFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)
Using oMemoryStream As New MemoryStream()
oFileStream.CopyTo(oMemoryStream)
Return oMemoryStream.ToArray()
End Using
End Using
End Function
End Class
End Namespace

View File

@@ -3,6 +3,7 @@ Imports DigitalData.Modules.Base.IDB.Constants
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Database.MSSQLServer.TransactionMode
Imports DigitalData.Modules.Logging
Imports DigitalData.Services.EDMIService.Security
Namespace Methods.IDB.NewFile
Public Class NewFileMethod
@@ -22,6 +23,197 @@ Namespace Methods.IDB.NewFile
Logger.Debug("Running [NewFileMethod].")
Dim oFilePath As String = Nothing
Try
If pData.File Is Nothing Then
Throw New ArgumentNullException(NameOf(pData.File))
End If
If pData.KindType Is Nothing Then
Throw New ArgumentNullException(NameOf(pData.KindType))
End If
If pData.StoreName Is Nothing Then
Throw New ArgumentNullException(NameOf(pData.StoreName))
End If
If pData.User Is Nothing Then
Throw New ArgumentNullException(NameOf(pData.User))
End If
If IsNothing(pData.IDBDoctypeId) Then
Throw New ArgumentNullException(NameOf(pData.IDBDoctypeId))
End If
Logger.Debug("Checking if checksum already exists..")
Dim oExistingObjectId = Helpers.TestFileChecksumExists(pData.File.FileChecksum)
If oExistingObjectId > 0 Then
Return New NewFileResponse(oExistingObjectId)
End If
Logger.Debug("Creating New ObjectId..")
Dim oObjectId = Helpers.NewObjectIdWithTransaction(pData.KindType, pData.User.UserName, Connection, Transaction)
If oObjectId = 0 Then
LogAndThrow("Could not create new ObjectId!")
End If
Logger.Debug("New ObjectId [{0}] created!", oObjectId)
' Find ObjectStore by Title
Logger.Debug("Checking for DataStore [{0}].", pData.StoreName)
Dim oStore = GlobalState.ObjectStores.
Where(Function(store) store.Title = pData.StoreName).
SingleOrDefault()
If oStore Is Nothing Then
LogAndThrow($"DataStore [{pData.StoreName}] does not exist. Exiting.")
End If
Logger.Debug("Using DataStore [{0}].", pData.StoreName)
' Get Store base and final path
Logger.Debug("Store BasePath is [{0}]", oStore.Path)
Dim oFinalPath = Helpers.GetFileObjectPath(oStore, pData.File.FileImportedAt)
' Ensure target directory exists
Try
If Not IO.Directory.Exists(oFinalPath) Then
IO.Directory.CreateDirectory(oFinalPath)
End If
Catch exDir As Exception
LogAndThrow(exDir, $"Target directory [{oFinalPath}] could not be created.")
End Try
' Get filename
Dim oKeepFileName As Boolean = False
If oStore.IsArchive Then
Logger.Debug("Object Store is an archive: [{0}]", oStore.IsArchive)
oKeepFileName = True
End If
Dim oFileName As String = GetFileObjectFileName(oObjectId, pData.File.FileName, oKeepFileName)
Logger.Debug("Filename is [{0}]", oFileName)
oFilePath = IO.Path.Combine(oFinalPath, oFileName)
Dim oFileObjectInfo As IO.FileInfo = New IO.FileInfo(oFilePath)
Dim oFileObjectName As String = oFileObjectInfo.Name
Logger.Debug("File Information for [{0}]:", oFileObjectName)
Dim oFileObjectSize As Long = pData.File.FileContents.Length ' original (plaintext) size
Logger.Debug("Original Size: [{0}]", oFileObjectSize)
Dim oOriginalExtension As String = pData.File.FileInfoRaw.Extension.Substring(1)
Logger.Debug("Original Extension: [{0}]", oOriginalExtension)
Logger.Debug("Checksum: [{0}]", pData.File.FileChecksum)
' Retrieve encryption password (environment variable)
Dim encryptionPassword As String = Environment.GetEnvironmentVariable("DD_FILE_ENCRYPTION_PASSWORD")
If String.IsNullOrWhiteSpace(encryptionPassword) Then
LogAndThrow("Encryption password not configured (env DD_FILE_ENCRYPTION_PASSWORD).")
End If
' Perform encryption with strict failure handling
Try
Logger.Info("Encrypting and saving file to path [{0}]", oFilePath)
SecureFileHandler.EncryptFileFromBytes(pData.File.FileContents, oFilePath, encryptionPassword)
Catch exEnc As Exception
LogAndThrow(exEnc, $"Could not encrypt/write file [{oFilePath}] to disk!")
End Try
' Post-encryption validation: file must exist and contain at least header bytes
Try
Dim fi As New IO.FileInfo(oFilePath)
If Not fi.Exists Then
LogAndThrow($"Encrypted file was not created at [{oFilePath}].")
End If
' Minimum file size:1 (version) +4 (iterations) +32 (salt) =37 bytes
If fi.Length < 37 Then
LogAndThrow($"Encrypted file at [{oFilePath}] is invalid or truncated (size {fi.Length}).")
End If
Logger.Debug("Encrypted physical file size: [{0}]", fi.Length)
Catch exVal As Exception
' LogAndThrow above will throw; any other IO errors should also abort here
LogAndThrow(exVal, "Encrypted file validation failed.")
End Try
'---------------------------------------------------------------------------
Logger.Info("Creating IDB FileObject for ObjectId [{0}].", oObjectId)
' Insert into DB (store original plaintext size for consistency)
Dim oSQL As String = $"EXEC PRIDB_NEW_IDBFO
'{oFinalPath}',
'{oFileObjectName}',
'{oOriginalExtension}',
{oFileObjectSize},
'{pData.File.FileChecksum}' ,
'{pData.User.UserName}',
'{oObjectId}',
{oStore.Id},
{pData.IDBDoctypeId}"
Dim oResult As Boolean = DatabaseIDB.ExecuteNonQueryWithConnectionObject(oSQL, Connection, ExternalTransaction, Transaction)
If oResult = False Then
LogAndThrow("IDB FileObject could not be created!")
End If
'---------------------------------------------------------------------------
Dim oSystemAttributes As New Dictionary(Of String, Object) From {
{Attributes.ATTRIBUTE_ORIGIN_FILENAME, pData.File.FileName},
{Attributes.ATTRIBUTE_ORIGIN_CREATED, pData.File.FileCreatedAt},
{Attributes.ATTRIBUTE_ORIGIN_CHANGED, pData.File.FileChangedAt}
}
For Each oAttribute As KeyValuePair(Of String, Object) In oSystemAttributes
Try
' Dont write empty attributes
If oAttribute.Value Is Nothing Then
Continue For
End If
Dim oSuccess = Helpers.SetAttributeValueWithTransaction(Connection, Transaction, oObjectId, oAttribute.Key, oAttribute.Value, pData.User.Language, pData.User.UserName)
If oSuccess Then
Logger.Debug("System Attribute [{0}] written with value [{1}]", oAttribute.Key, oAttribute.Value)
Else
Logger.Warn("System attribute value could not be written")
End If
Catch ex As Exception
LogAndThrow(ex, $"System attribute [{oAttribute.Key}] could not be written!")
End Try
Next
'---------------------------------------------------------------------------
' Finally, commit the transaction
Transaction?.Commit()
Return New NewFileResponse(oObjectId)
Catch ex As Exception
Logger.Warn("Error occurred while creating file!")
Logger.Error(ex)
Logger.Info("Cleaning up files.")
If Not IsNothing(oFilePath) AndAlso IO.File.Exists(oFilePath) Then
Try
IO.File.Delete(oFilePath)
Catch exInner As Exception
Logger.Warn("Error while cleaning up files.")
Logger.Error(exInner)
End Try
End If
Logger.Info("Rolling back transaction.")
Transaction?.Rollback()
Return New NewFileResponse(ex)
End Try
End Function
Public Function Run_Old(pData As NewFileRequest) As NewFileResponse
Logger.Debug("Running [NewFileMethod Old].")
Dim oFilePath As String = Nothing
Try
If pData.File Is Nothing Then
Throw New ArgumentNullException(NameOf(pData.File))
@@ -181,7 +373,6 @@ Namespace Methods.IDB.NewFile
End Try
End Function
Private Function GetFileObjectFileName(IDB_OBJ_ID As Long, pFilename As String, pKeepFilename As Boolean) As String
' TODO: save actual extensions
If pKeepFilename Then

View File

@@ -0,0 +1,146 @@
Imports System.IO
Imports System.Security.Cryptography
Namespace Security
''' <summary>
''' Provides secure AES file encryption and decryption using PBKDF2 (Rfc2898DeriveBytes) for key derivation.
''' File format:
''' [1 byte Version][4 bytes IterationCount (Int32, big-endian)][32 bytes Salt][Encrypted Payload]
''' </summary>
Public NotInheritable Class SecureFileHandler
Private Sub New()
End Sub
Private Const CURRENT_VERSION As Byte = 1
Private Const SALT_LENGTH As Integer = 32
Private Const KEY_SIZE_BYTES As Integer = 32 ' AES-256
Private Const IV_SIZE_BYTES As Integer = 16 ' AES Block size (128 bit)
Private Const DEFAULT_ITERATIONS As Integer = 100000
Private Const BUFFER_SIZE As Integer = 81920 '80KB streaming buffer
''' <summary>
''' Encrypts the provided byte array and writes an encrypted file to the target path using streaming.
''' </summary>
Public Shared Sub EncryptFileFromBytes(sourceData() As Byte, targetFilePath As String, password As String, Optional iterations As Integer = DEFAULT_ITERATIONS)
If sourceData Is Nothing Then Throw New ArgumentNullException(NameOf(sourceData))
If String.IsNullOrWhiteSpace(password) Then Throw New ArgumentNullException(NameOf(password))
Using fsOut = New FileStream(targetFilePath, FileMode.Create, FileAccess.Write, FileShare.None)
Dim salt = GenerateRandomBytes(SALT_LENGTH)
' Write header: Version, Iterations, Salt
fsOut.WriteByte(CURRENT_VERSION)
WriteInt32BigEndian(fsOut, iterations)
fsOut.Write(salt, 0, salt.Length)
Using keyDerivation = New Rfc2898DeriveBytes(password, salt, iterations)
Dim key = keyDerivation.GetBytes(KEY_SIZE_BYTES)
Dim iv = keyDerivation.GetBytes(IV_SIZE_BYTES)
Dim aesAlg As System.Security.Cryptography.Aes = System.Security.Cryptography.Aes.Create()
Try
aesAlg.KeySize = KEY_SIZE_BYTES * 8
aesAlg.BlockSize = IV_SIZE_BYTES * 8
aesAlg.Mode = CipherMode.CBC
aesAlg.Padding = PaddingMode.PKCS7
aesAlg.Key = key
aesAlg.IV = iv
Using crypto = aesAlg.CreateEncryptor()
Using cs = New CryptoStream(fsOut, crypto, CryptoStreamMode.Write)
Using msIn = New MemoryStream(sourceData, writable:=False)
Dim buffer(BUFFER_SIZE - 1) As Byte
Dim read As Integer
Do
read = msIn.Read(buffer, 0, buffer.Length)
If read <= 0 Then Exit Do
cs.Write(buffer, 0, read)
Loop
End Using
cs.FlushFinalBlock()
End Using
End Using
Finally
aesAlg.Dispose()
End Try
End Using
End Using
End Sub
''' <summary>
''' Decrypts the encrypted file and returns the plaintext bytes.
''' </summary>
Public Shared Function DecryptFileToBytes(encryptedFilePath As String, password As String) As Byte()
If String.IsNullOrWhiteSpace(encryptedFilePath) Then Throw New ArgumentNullException(NameOf(encryptedFilePath))
If String.IsNullOrWhiteSpace(password) Then Throw New ArgumentNullException(NameOf(password))
Using fsIn = New FileStream(encryptedFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)
Dim version = CByte(fsIn.ReadByte())
If version <> CURRENT_VERSION Then Throw New InvalidDataException("Unsupported file version.")
Dim iterations = ReadInt32BigEndian(fsIn)
Dim salt = New Byte(SALT_LENGTH - 1) {}
ReadExact(fsIn, salt, 0, salt.Length)
Using keyDerivation = New Rfc2898DeriveBytes(password, salt, iterations)
Dim key = keyDerivation.GetBytes(KEY_SIZE_BYTES)
Dim iv = keyDerivation.GetBytes(IV_SIZE_BYTES)
Dim aesAlg As System.Security.Cryptography.Aes = System.Security.Cryptography.Aes.Create()
Try
aesAlg.KeySize = KEY_SIZE_BYTES * 8
aesAlg.BlockSize = IV_SIZE_BYTES * 8
aesAlg.Mode = CipherMode.CBC
aesAlg.Padding = PaddingMode.PKCS7
aesAlg.Key = key
aesAlg.IV = iv
Using crypto = aesAlg.CreateDecryptor()
Using cs = New CryptoStream(fsIn, crypto, CryptoStreamMode.Read)
Using msOut = New MemoryStream()
Dim buffer(BUFFER_SIZE - 1) As Byte
Dim read As Integer
Do
read = cs.Read(buffer, 0, buffer.Length)
If read <= 0 Then Exit Do
msOut.Write(buffer, 0, read)
Loop
Return msOut.ToArray()
End Using
End Using
End Using
Finally
aesAlg.Dispose()
End Try
End Using
End Using
End Function
Private Shared Function GenerateRandomBytes(length As Integer) As Byte()
Dim data = New Byte(length - 1) {}
Using rng = RandomNumberGenerator.Create()
rng.GetBytes(data)
End Using
Return data
End Function
Private Shared Sub WriteInt32BigEndian(stream As Stream, value As Integer)
Dim bytes = BitConverter.GetBytes(value)
If BitConverter.IsLittleEndian Then Array.Reverse(bytes)
stream.Write(bytes, 0, bytes.Length)
End Sub
Private Shared Function ReadInt32BigEndian(stream As Stream) As Integer
Dim bytes = New Byte(3) {}
ReadExact(stream, bytes, 0, 4)
If BitConverter.IsLittleEndian Then Array.Reverse(bytes)
Return BitConverter.ToInt32(bytes, 0)
End Function
Private Shared Sub ReadExact(stream As Stream, buffer As Byte(), offset As Integer, count As Integer)
Dim totalRead As Integer = 0
While totalRead < count
Dim read = stream.Read(buffer, offset + totalRead, count - totalRead)
If read <= 0 Then Throw New EndOfStreamException("Unexpected end of stream.")
totalRead += read
End While
End Sub
End Class
End Namespace