Files
AVISO/Aviso/Anhänge/frmSendungAnhangImport.vb
2019-10-31 09:22:40 +01:00

1145 lines
45 KiB
VB.net

'Imports iTextSharp.text.pdf
'Imports iTextSharp.text
Imports System.IO
'Imports GrapeCity.Documents.Pdf
Imports Spire.Pdf
Public Class frmSendungAnhangImport
Public AvisoId As Integer
Public SendungsId As Integer
Dim SENDUNG_LIST As New List(Of VERAG_PROG_ALLGEMEIN.cSendungen)
Dim CURRENT_INDEX As Integer
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Dim BrowserLoaded = True
Sub New(AvisoId)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
Me.AvisoId = AvisoId
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
'Dim f As New GroupDocs.Viewer
End Sub
Sub New(AvisoId, SendungsId)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
Me.AvisoId = AvisoId
Me.SendungsId = SendungsId
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
'Dim f As New GroupDocs.Viewer
End Sub
Sub initElement(USRCNTL As usrCntlSendungAnhangElement)
AddHandler USRCNTL.ME_CLICK, Sub()
' If BrowserLoaded Then
If USRCNTL.ACTIVE Then Exit Sub 'Bereits aktiv
For Each u As usrCntlSendungAnhangElement In flpnlAviso.Controls
u.ACTIVE = False
Next
For Each u As usrCntlSendungAnhangElement In flpnlSendungen.Controls
u.ACTIVE = False
Next
USRCNTL.ACTIVE = True
'WebBrowser1.Navigate(USRCNTL.FILE_PATH)
If File.Exists(USRCNTL.FILE_PATH) Then
initLocationViewer(USRCNTL.FILE_PATH, USRCNTL.FILE_TYPE)
Else
initLocationViewer("", "PDF")
End If
' PdfViewer.DocumentLoaded += New EventHandler(AddressOf radPdfViewer1_DocumentLoaded)
txtDateiname.Text = USRCNTL.FILE_NAME
txtSeiten.Focus()
' End If
End Sub
AddHandler USRCNTL.ME_DELETE, Sub(docId, anhId)
deleteElement(docId, anhId)
initFlpANH_LIST()
End Sub
AddHandler USRCNTL.KeyDown, Sub(ob As Object, ev As KeyEventArgs)
If ev.KeyCode = Keys.Delete Then
deleteActiveElement(getAcitvePnl())
End If
End Sub
End Sub
Sub initLocationViewer(loc, typ)
PdfViewer.CloseDocument()
WebBrowser.Navigate("")
If typ = "PDF" Then
WebBrowser.Visible = False
PdfViewer.Visible = (loc <> "")
PdfViewer.LoadFromFile(loc)
ElseIf typ = "BILD" Then
PdfViewer.Visible = False
WebBrowser.Visible = (loc <> "")
WebBrowser.Navigate(loc)
End If
End Sub
Function getAcitvePnl() As FlowLayoutPanel
For Each u As usrCntlSendungAnhangElement In flpnlAviso.Controls
If u.ACTIVE Then Return flpnlAviso
Next
For Each u As usrCntlSendungAnhangElement In flpnlSendungen.Controls
If u.ACTIVE Then Return flpnlSendungen
Next
Return Nothing
End Function
Function getAcitveCntl() As usrCntlSendungAnhangElement
For Each u As usrCntlSendungAnhangElement In flpnlAviso.Controls
If u.ACTIVE Then Return u
Next
For Each u As usrCntlSendungAnhangElement In flpnlSendungen.Controls
If u.ACTIVE Then Return u
Next
Return Nothing
End Function
'Public Function ExtractPdfPages(ByVal SourceFile As String, ByVal TargetFile As String, ByVal IntStr As Integer, ByVal IntEnd As Integer)
' Try
' Dim impPage As pdf.PdfImportedPage = Nothing
' Dim Reader As New PdfReader(SourceFile)
' Dim srcDoc As New Document(Reader.GetPageSizeWithRotation(IntStr))
' Dim PdfCopyProvider As New PdfCopy(srcDoc, New System.IO.FileStream(TargetFile, System.IO.FileMode.Create))
' PdfCopyProvider.SetFullCompression()
' srcDoc.Open()
' For X = IntStr To IntEnd
' impPage = PdfCopyProvider.GetImportedPage(Reader, X)
' ' ----- Ermitteln der Seitenauflösung und setzen für die neue Seite
' PdfCopyProvider.SetPageSize(New Rectangle(0.0F, 0.0F, impPage.Width, impPage.Height))
' ' ----- PDF Seite in das neue Dokument einfügen
' PdfCopyProvider.AddPage(impPage)
' Next
' ' ----- neues PDF Dokument und den Reader schließen
' srcDoc.Close()
' Reader.Close()
' Catch ex As Exception
' Throw ex
' End Try
'End Function
Function getPDFSplitName(FILE_NAME)
If txtBezeichnung.Text <> "" Then
Return txtBezeichnung.Text
End If
Return FILE_NAME
End Function
Dim tmpPageMove = 0
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnAnfuegen.Click
If txtSeiten.Text = "" Then Exit Sub
' If cboArt._value = "" Then Exit Sub
If cboSendungen._value = "" Then Exit Sub
If Not checkSeiten() Then Exit Sub
Dim CurrentPageNumber = PdfViewer.CurrentPageNumber
Dim pages = getPagesFromText()
Dim cntl = getAcitveCntl()
Dim cntlID = If(cntl IsNot Nothing, getAcitveCntl().FILE_ANHID, -1)
For Each u As usrCntlSendungAnhangElement In flpnlAviso.Controls
If u.ACTIVE Then
If u.FILE_TYPE <> "PDF" Then Exit Sub
Dim fi As New FileInfo(u.FILE_PATH)
'-------------
'------------- PDFs extrahieren und auf den Datenserver laden + Eintrag in tblAvisoAnhaenger
'-------------
Dim SendngsId As Integer = cboSendungen._value
Dim TMP_Path_Old = u.FILE_PATH
Dim TMP_Path_New = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(u.FILE_NAME, fi.Extension,, True, "SendungsAnhaenge")
If Not extractPagesFromPdf_Spire(u.FILE_PATH, TMP_Path_New, getPagesFromText()) Then Exit Sub
'Hochladen in den Datenserver und anfügen in die Tbl Anhänge mit der SendungsId
saveToDS(AvisoId, getPDFSplitName(u.FILE_NAME), TMP_Path_New, cboArt._value, u.FILE_TYPE,,,, SendngsId)
'-------------
'------------- PDFs aus der original Datei löschen
'-------------
'tryDelete(TMP_Path_New)
If cbxDelPDF.Checked Then
If cbxDelPDF.Checked Then
TMP_Path_New = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(u.FILE_NAME, fi.Extension,, True, "SendungsAnhaenge")
Dim PagesLeft = 0
If removePagesFromPdf_Spire(u.FILE_PATH, TMP_Path_New, getPagesFromText(), PagesLeft, False) Then
If PagesLeft = 0 Then
'delFromDS(u.FILE_DOCID)
deleteElement(u.FILE_DOCID, u.FILE_ANHID, False)
flpnlAviso.Controls.Remove(u)
Else
Dim destPath = ""
If saveChangeToDS_daId(u.FILE_DOCID, TMP_Path_New, destPath) Then
tryDelete(TMP_Path_Old)
u.FILE_PATH = destPath
End If
End If
End If
End If
initLocationViewer("", "PDF")
End If
'-------------
End If
Next
clearPnlAnfuegen()
' initSendungen()
initFlpANH_LIST(, False)
If flpnlAviso.Controls.Count > 0 Then
If Not setAvtiveById(flpnlAviso, CurrentPageNumber, pages, cntlID) Then
DirectCast(flpnlAviso.Controls(0), usrCntlSendungAnhangElement).CLICK_Me()
End If
End If
End Sub
Function setAvtiveById(pnl As FlowLayoutPanel, CurrentPageNumber As Integer, listDelPages As List(Of Integer), anhId As Integer) As Boolean
Try
For Each p As usrCntlSendungAnhangElement In flpnlAviso.Controls
If p.FILE_ANHID = anhId Then
'p.ACTIVE = True
p.CLICK_Me()
Dim newCurrentPageNumber = CurrentPageNumber
For Each s In getPagesFromText() ' vorheirge Seiten, die gelöscht wurden werden abgezogen
If s < CurrentPageNumber Then CurrentPageNumber -= 1
Next
If PdfViewer.IsDocumentLoaded Then
If newCurrentPageNumber > 0 Then PdfViewer.GoToPage(newCurrentPageNumber)
End If
Return True
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return False
End Function
Function setAvtive(pnl As FlowLayoutPanel, CurrentPageNumber As Integer, listDelPages As List(Of Integer), u As usrCntlSendungAnhangElement) As Boolean
Try
For Each p As usrCntlSendungAnhangElement In flpnlAviso.Controls
If p Is u Then
p.ACTIVE = True
Dim newCurrentPageNumber = CurrentPageNumber
For Each s In getPagesFromText() ' vorheirge Seiten, die gelöscht wurden werden abgezogen
If s < CurrentPageNumber Then CurrentPageNumber -= 1
Next
If newCurrentPageNumber > 0 Then PdfViewer.GoToPage(newCurrentPageNumber)
Return True
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return False
End Function
Private Sub Button1_ClickALL(sender As Object, e As EventArgs) Handles btnAnfuegenAll.Click
If cboSendungen._value = "" Then Exit Sub
For Each u As usrCntlSendungAnhangElement In flpnlAviso.Controls
If u.ACTIVE Then
Dim fi As New FileInfo(u.FILE_PATH)
'-------------
'------------- PDFs extrahieren und auf den Datenserver laden + Eintrag in tblAvisoAnhaenger
'-------------
Dim TMP_Path_New = u.FILE_PATH
Dim SendngsId As Integer = cboSendungen._value
'Hochladen in den Datenserver und anfügen in die Tbl Anhänge mit der SendungsId
' saveToDS(u.FILE_NAME, TMP_Path_New, cboArt._value, u.FILE_TYPE,,, SendngsId)
Dim ANH = New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(u.FILE_ANHID)
If cbxDelPDF.Checked Then
ANH.anh_SendungsId = SendngsId
ANH.anh_Name = getPDFSplitName(ANH.anh_Name)
ANH.SAVE() 'Eintrag wird überschreiben
flpnlAviso.Controls.Remove(u)
' If cbxDelPDF.Checked Then tryDelete(u.FILE_PATH)
initLocationViewer("", "PDF")
If flpnlAviso.Controls.Count > 0 Then
DirectCast(flpnlAviso.Controls(0), usrCntlSendungAnhangElement).CLICK_Me()
End If
Else
ANH.anh_SendungsId = SendngsId
If cboArt._value <> "" Then ANH.anh_Art = cboArt._value
ANH.anh_id = -1 'neuer Eintrag
ANH.SAVE()
End If
End If
Next
clearPnlAnfuegen()
' initSendungen()
initFlpANH_LIST()
End Sub
Sub clearPnlAnfuegen()
txtDateiname.Text = ""
txtSeiten.Text = ""
cboArt.Text = ""
txtBezeichnung.Text = ""
txtSeiten.Focus()
Dim u As usrCntlSendungAnhangElement = getAcitveCntl()
If u IsNot Nothing Then
txtDateiname.Text = u.FILE_NAME
Else
txtDateiname.Text = ""
End If
MyTextBox2.Text = cboSendungen.Text
End Sub
Sub tryDelete(TMP_Path_New)
Try
File.Delete(TMP_Path_New)
Catch ex As Exception
End Try
End Sub
'Public Sub DeletePages(ByVal pageRange As String, ByVal SourcePdfPath As String, ByVal OutputPdfPath As String, ByVal Optional Password As String = "")
' Dim pagesToDelete As New List(Of Integer)
' If pageRange.IndexOf(",") <> -1 Then
' Dim tmpHold As String() = pageRange.Split(","c)
' For Each nonconseq As String In tmpHold
' If nonconseq.IndexOf("-") <> -1 Then
' Dim rangeHold As String() = nonconseq.Split("-"c)
' For i As Integer = Convert.ToInt32(rangeHold(0)) To Convert.ToInt32(rangeHold(1))
' pagesToDelete.Add(i)
' Next
' Else
' pagesToDelete.Add(Convert.ToInt32(nonconseq))
' End If
' Next
' Else
' If pageRange.IndexOf("-") <> -1 Then
' Dim rangeHold As String() = pageRange.Split("-"c)
' For i As Integer = Convert.ToInt32(rangeHold(0)) To Convert.ToInt32(rangeHold(1))
' pagesToDelete.Add(i)
' Next
' Else
' pagesToDelete.Add(Convert.ToInt32(pageRange))
' End If
' End If
' Dim doc As Document = New Document()
' Dim reader As PdfReader = New PdfReader(SourcePdfPath, New System.Text.ASCIIEncoding().GetBytes(Password))
' Using memoryStream As MemoryStream = New MemoryStream()
' Dim writer As PdfWriter = PdfWriter.GetInstance(doc, memoryStream)
' doc.Open()
' doc.AddDocListener(writer)
' For p As Integer = 1 To reader.NumberOfPages
' If pagesToDelete.FindIndex(Function(s) s = p) <> -1 Then
' Continue For
' End If
' doc.SetPageSize(reader.GetPageSize(p))
' doc.NewPage()
' Dim cb As PdfContentByte = writer.DirectContent
' Dim pageImport As pdf.PdfImportedPage = writer.GetImportedPage(reader, p)
' Dim rot As Integer = reader.GetPageRotation(p)
' If rot = 90 OrElse rot = 270 Then
' cb.AddTemplate(pageImport, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(p).Height)
' Else
' cb.AddTemplate(pageImport, 1.0F, 0, 0, 1.0F, 0, 0)
' End If
' Next
' reader.Close()
' File.WriteAllBytes(OutputPdfPath, memoryStream.ToArray())
' doc.Close()
' End Using
'End Sub
Function getPagesFromText() As List(Of Integer)
Dim List As New List(Of Integer)
Dim split = txtSeiten.Text.Split(",")
For Each s In split
If s.Contains("-") Then
Dim s_vb = s.Split("-")
Dim von = CInt(s_vb(0))
Dim bis = CInt(s_vb(1))
For page = von To bis
Dim anfuegen = True
For Each l In List
If l = page Then
anfuegen = False
End If
Next
If anfuegen Then List.Add(page)
Next
Else
If IsNumeric(s) Then List.Add(s)
End If
Next
Return List
End Function
Public Function removePagesFromPdf_Spire(ByVal sourceFile As String, ByVal destinationFile As String, pagesToDelete As List(Of Integer), ByRef PagesLeft As Integer, Optional delSource As Boolean = False) As Boolean
Try
PagesLeft = 0
Dim pdf As New PdfDocument()
pdf.LoadFromFile(sourceFile)
' Dim r As PdfReader = New PdfReader(sourceFile)
Dim pagesToKeep As New List(Of Integer)
For p = 0 To pdf.Pages.Count - 1 ' r.NumberOfPages
Dim del = False
For Each i In pagesToDelete
If p = (i - 1) Then
del = True : Exit For
End If
Next
If Not del Then
pagesToKeep.Add(p)
End If
Next
Dim pdf1 As New PdfDocument()
Dim page As PdfPageBase
For Each p In pagesToKeep
' Dim pageInt = p - 1 ' Nciht SeitenNr. sonder Aufzählung
Dim pageInt = p
If pageInt >= 0 And pageInt < pdf.Pages.Count Then
Dim pageOLD As PdfPageBase = pdf.Pages(pageInt)
If pageOLD.Rotation = PdfPageRotateAngle.RotateAngle90 Then
page = pdf1.Pages.Add(New SizeF(pageOLD.Size.Height, pageOLD.Size.Width), New Graphics.PdfMargins(0))
ElseIf pageOLD.Rotation = PdfPageRotateAngle.RotateAngle270 Then
page = pdf1.Pages.Add(New SizeF(pageOLD.Size.Height, pageOLD.Size.Width), New Graphics.PdfMargins(0))
Else
page = pdf1.Pages.Add(pageOLD.Size, New Graphics.PdfMargins(0))
End If
pdf.Pages(pageInt).CreateTemplate().Draw(page, New System.Drawing.PointF(0, 0))
'alter Kot:
'page = pdf1.Pages.Add(pdf.Pages(p).Size, New Graphics.PdfMargins(0))
'pdf.Pages(p).CreateTemplate().Draw(page, New System.Drawing.PointF(0, 0))
PagesLeft += 1
End If
Next
pdf1.SaveToFile(destinationFile)
pdf.Dispose()
pdf1.Dispose()
If delSource Then tryDelete(sourceFile)
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
Return False
End Try
Return True
End Function
Public Function extractPagesFromPdf_Spire(ByVal sourceFile As String, ByVal destinationFile As String, pagesToExtract As List(Of Integer)) As Boolean
Try
''Load the original PDF
'Dim pdf As New PdfDocument()
'pdf.LoadFromFile("20191017092932604.pdf")
''Get the first page
'Dim page As PdfPageBase = pdf.Pages(0)
''Create a new PDF file
'Dim pdf1 As New PdfDocument()
'Dim newPage As PdfPageBase
''Judge if the page is rotated and rotate it back
'If page.Rotation = PdfPageRotateAngle.RotateAngle90 Then
' newPage = pdf1.Pages.Add(New SizeF(page.Size.Height, page.Size.Width), New PdfMargins(0))
'End If
'If page.Rotation = PdfPageRotateAngle.RotateAngle270 Then
' newPage = pdf1.Pages.Add(New SizeF(page.Size.Height, page.Size.Width), New PdfMargins(0))
'Else
' newPage = pdf1.Pages.Add(page.Size, New PdfMargins(0))
'End If
''Draw template on new page
'page.CreateTemplate().Draw(newPage, New PointF(0, 0))
''Save the file
'pdf1.SaveToFile("result.pdf", Spire.Pdf.FileFormat.PDF)
Dim pdf As New PdfDocument()
pdf.LoadFromFile(sourceFile)
Dim pdf1 As New PdfDocument()
Dim page As PdfPageBase
For Each p In pagesToExtract
Dim pageInt = p - 1 ' Nciht SeitenNr. sonder Aufzählung
If pageInt >= 0 And pageInt < pdf.Pages.Count Then
Dim pageOLD As PdfPageBase = pdf.Pages(pageInt)
If pageOLD.Rotation = PdfPageRotateAngle.RotateAngle90 Then
page = pdf1.Pages.Add(New SizeF(pageOLD.Size.Height, pageOLD.Size.Width), New Graphics.PdfMargins(0))
ElseIf pageOLD.Rotation = PdfPageRotateAngle.RotateAngle270 Then
page = pdf1.Pages.Add(New SizeF(pageOLD.Size.Height, pageOLD.Size.Width), New Graphics.PdfMargins(0))
Else
page = pdf1.Pages.Add(pageOLD.Size, New Graphics.PdfMargins(0))
End If
pdf.Pages(pageInt).CreateTemplate().Draw(page, New System.Drawing.PointF(0, 0))
'alter Kot:
' page = pdf1.Pages.Add(pdf.Pages(pageInt).Size, New Graphics.PdfMargins(0))
'pdf.Pages(pageInt).CreateTemplate().Draw(page, New System.Drawing.PointF(0, 0))
End If
Next
pdf1.SaveToFile(destinationFile)
'MsgBox("P: " &pdf.Pages.Count)
'Dim pdf1 As New PdfDocument()
''Dim page As New PdfPageBase
''For i As Integer = 0 To 4
'For Each p In pagesToKeep
' pdf1.Pages.Add(pdf.Pages(p).Size, New Graphics.PdfMargins(0))
' 'Dim page =
' 'pdf.Pages(p).CreateTemplate().Draw(page, New System.Drawing.PointF(0, 0))
' MsgBox(p)
'Next
'pdf1.SaveToFile(destinationFile)
'Using fs As FileStream = New FileStream(destinationFile, FileMode.Create, FileAccess.Write, FileShare.None)
' Using doc As Document = New Document()
' Using w As PdfWriter = PdfWriter.GetInstance(doc, fs)
' doc.Open()
' For Each page As Integer In pagesToKeep
' doc.NewPage()
' w.DirectContent.AddTemplate(w.GetImportedPage(r, page), 0, 0)
' PagesLeft += 1
' Next
' doc.Close()
' End Using
' End Using
'End Using
pdf.Dispose()
pdf1.Dispose()
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
Return False
End Try
Return True
End Function
'Public Sub removePagesFromPdf(ByVal sourceFile As String, ByVal destinationFile As String, pagesToDelete As List(Of Integer), ByRef PagesLeft As Integer)
' Try
' PagesLeft = 0
' Dim r As PdfReader = New PdfReader(sourceFile)
' Dim pagesToKeep As New List(Of Integer)
' For p = 1 To r.NumberOfPages
' Dim del = False
' For Each i In pagesToDelete
' If p = i Then
' del = True : Exit For
' End If
' Next
' If Not del Then
' pagesToKeep.Add(p)
' End If
' Next
' Using fs As FileStream = New FileStream(destinationFile, FileMode.Create, FileAccess.Write, FileShare.None)
' Using doc As Document = New Document()
' Using w As PdfWriter = PdfWriter.GetInstance(doc, fs)
' doc.Open()
' For Each page As Integer In pagesToKeep
' doc.NewPage()
' w.DirectContent.AddTemplate(w.GetImportedPage(r, page), 0, 0)
' PagesLeft += 1
' Next
' doc.Close()
' End Using
' End Using
' End Using
' Catch ex As Exception
' End Try
'End Sub
Private Sub txtSeiten_TextChanged(sender As Object, e As EventArgs) Handles txtSeiten.TextChanged
txtSeiten.BackColor = Color.White
If txtSeiten.Text = "" Then Exit Sub
If checkSeiten() Then
txtSeiten.BackColor = Color.White
Else
txtSeiten.BackColor = Color.MistyRose
End If
End Sub
Function checkSeiten()
txtSeiten.Text.Replace(";", ",")
' If txtSeiten.Text.Contains(",") Then
Dim split = txtSeiten.Text.Split(",")
For Each s In split
If s.Contains("-") Then
Dim s_vb = s.Split("-")
Dim von = s_vb(0)
Dim bis = s_vb(1)
' Dim bis = ""
'If s_vb.Count > 0 Then bis = s_vb(1)
If Not IsNumeric(von) Then Return False
If Not IsNumeric(bis) Then Return False
Else
If Not IsNumeric(s) Then Return False
End If
Next
' Else
' If Not IsNumeric(txtSeiten.Text) Then Return False
' End If
Return True
End Function
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
deleteActiveElement(flpnlAviso)
End Sub
Sub deleteActiveElement(flpnl As FlowLayoutPanel)
If flpnl Is Nothing Then Exit Sub
For Each u As usrCntlSendungAnhangElement In flpnl.Controls
If u.ACTIVE Then
If deleteElement(u.FILE_DOCID, u.FILE_ANHID) Then
flpnl.Controls.Remove(u)
initLocationViewer("", "PDF")
If flpnl.Controls.Count > 0 Then
DirectCast(flpnl.Controls(0), usrCntlSendungAnhangElement).CLICK_Me()
End If
End If
End If
Next
End Sub
Function deleteElement(FILE_DOCID, FILE_ANHID, Optional showMessage = True) As Boolean
If Not showMessage OrElse vbYes = MsgBox("Möchten Sie das Element löschen?", vbYesNoCancel) Then
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(FILE_DOCID)
If DS.DELETE_COMPLETE AndAlso VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge.DELETE(FILE_ANHID) Then
Return True
End If
End If
Return False
End Function
Private Sub frmSendungAnhangImport_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.Height = Screen.PrimaryScreen.WorkingArea.Height
Me.Top = 0
Try
DirectCast(PdfViewer.Controls(0).Controls(0).Controls(0), ToolStrip).Items(0).Visible = False
DirectCast(PdfViewer.Controls(0).Controls(0).Controls(0), ToolStrip).Items(1).Visible = False
Catch ex As Exception
End Try
PdfViewer.CanSave = False
'WebBrowser1.Navigate("")
flpnlAviso.Controls.Clear()
flpnlSendungen.Controls.Clear()
cboArt.Items.Clear()
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", ""))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("ATR", "ATR"))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Rechnung", "Rechnung"))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("CMR", "CMR"))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Ausfuhr", "Ausfuhr"))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Packliste", "Packliste"))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Auftrag", "Auftrag"))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Vorpapier", "Vorpapier"))
cboArt.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Sonstiges", "Sonstiges"))
initSendungen()
' cboSendungen.changeItem(-1)
initFlpANH_LIST(flpnlAviso)
End Sub
Private Sub frmSendungAnhangImport_Shown(sender As Object, e As EventArgs) Handles Me.Shown
txtSeiten.Focus()
End Sub
Private Sub txtSeiten_KeyDown(sender As Object, e As KeyEventArgs) Handles txtSeiten.KeyDown, cboArt.KeyDown, txtBezeichnung.KeyDown
If e.KeyCode = Keys.Return Then
btnAnfuegen.PerformClick()
End If
End Sub
Sub initSendungen()
cboSendungen.Items.Clear()
' cboSendungen.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Allgemein", -1))
VERAG_PROG_ALLGEMEIN.cSendungen.LOAD_LIST(SENDUNG_LIST, CURRENT_INDEX, AvisoId) 'LÄDT alle SENDUNGSDATEN
Dim cnt = 1
For Each s In SENDUNG_LIST
Dim abfertigungsArt = SQL.getValueTxtBySql("SELECT isnull([Abfertigungsbezeichnung],'') FROM [Abfertigungsarten] WHERE Abfertigungsart='" & s.tblSnd_Abfertigungsart_ID & "'", "FMZOLL")
Dim empfTmp = If(s.tblSnd_Empfaenger.Length > 15, s.tblSnd_Empfaenger.Substring(0, 15), s.tblSnd_Empfaenger)
cboSendungen.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem(cnt & ". " & empfTmp & " (" & abfertigungsArt & ")", s.tblSnd_SendungID))
cnt += 1
Next
If SendungsId > 0 Then cboSendungen.changeItem(SendungsId)
End Sub
Private Sub cboSendungen_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSendungen.SelectedIndexChanged
MyTextBox2.Text = cboSendungen.Text
flpnlSendungen.Controls.Clear()
initFlpANH_LIST(flpnlSendungen)
End Sub
Sub initFlpANH_LIST(Optional pnl As FlowLayoutPanel = Nothing, Optional keepActive As Boolean = True)
Dim aktiveId = -1
For Each i As usrCntlSendungAnhangElement In flpnlAviso.Controls
If i.ACTIVE Then
aktiveId = i.FILE_ANHID
End If
Next
Dim ANH_LIST As New List(Of VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge)
'If cboSendungen._value > 0 Then
' VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge.LOAD_LIST_BySendung(ANH_LIST, cboSendungen._value) 'LÄDT alle Aviso-Anhänge
'Else
' VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge.LOAD_LIST_ByAviso(ANH_LIST, AvisoId) 'LÄDT alle Sendungs-Anhänge
'End If
VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge.LOAD_LIST_ByAviso(ANH_LIST, AvisoId) 'LÄDT alle Aviso-Anhänge
If pnl Is Nothing OrElse pnl Is flpnlSendungen Then flpnlSendungen.Controls.Clear()
If pnl Is Nothing OrElse pnl Is flpnlAviso Then flpnlAviso.Controls.Clear()
For Each a In ANH_LIST
Dim USRCNTL As New usrCntlSendungAnhangElement
USRCNTL.FILE_PATH = VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(a.anh_docId)
USRCNTL.FILE_NAME = a.anh_Name
USRCNTL.FILE_TYPE = a.anh_Typ
USRCNTL.FILE_ANHID = a.anh_id
USRCNTL.FILE_DOCID = a.anh_docId
If keepActive Then
If a.anh_id = aktiveId Then
USRCNTL.ACTIVE = True
End If
End If
initElement(USRCNTL)
If If(a.anh_SendungsId, 0) > 0 Then
If cboSendungen._value <> "" AndAlso cboSendungen._value = a.anh_SendungsId Then
If pnl Is Nothing OrElse pnl Is flpnlSendungen Then flpnlSendungen.Controls.Add(USRCNTL)
End If
Else
If pnl Is Nothing OrElse pnl Is flpnlAviso Then flpnlAviso.Controls.Add(USRCNTL)
End If
Next
'If act Is Nothing Then initLocationViewer("", "PDF")
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles btnAnfuegenAll.Click
clearPnlAnfuegen()
End Sub
Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click
If cboSendungen._value = "" Then Exit Sub
For Each u As usrCntlSendungAnhangElement In flpnlSendungen.Controls
If u.ACTIVE Then
Dim ANH = New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(u.FILE_ANHID)
ANH.anh_SendungsId = Nothing
ANH.SAVE()
End If
Next
clearPnlAnfuegen()
' initSendungen()
initFlpANH_LIST()
End Sub
Public Sub DateiHochladenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiHochladenToolStripMenuItem.Click
addData_SendungAnhangFD()
End Sub
Sub delFromDS(daId)
Dim ds As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(daId)
ds.DELETE_COMPLETE()
End Sub
Function saveChangeToDS_daId(daId, sourcePath, ByRef destPath) As Boolean
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(daId)
If Not DS.uploadDataToDATENSERVER(sourcePath,,, False) Then MsgBox("Fehler beim Speichern: Datenserver!") : Return False
If DS.da_id <= 0 Then MsgBox("Keine DocId!") : Return False
destPath = DS.GET_TOP1_PATH
'Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(AvisoId, DS.da_name, DS.da_id, cboArt._value, DS.da_name, Nothing)
'If Not ANH.SAVE Then MsgBox("Fehler beim Anhang speichern!") : Return False
Return True
End Function
Private Sub DateiScannenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiScannenToolStripMenuItem.Click
Try
'If KdNr < 0 Then Exit Sub
Dim frmScan As New VERAG_PROG_ALLGEMEIN.frmScan("DirectScan")
frmScan.DefaultFileName = "Scan" ' Me._TEXT_PDF
If frmScan.ShowDialog(Me) = DialogResult.OK Then
If frmScan.ReturnValue IsNot Nothing Then
Dim Filename = frmScan.fileName
Dim TMP_Path = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(Filename, ".pdf",, False, "SendungsAnhaenge")
File.WriteAllBytes(TMP_Path, frmScan.ReturnValue)
Dim da_id = -1
Dim anhId = -1
Dim destPath = ""
If saveToDS(AvisoId, Filename, TMP_Path, "", "PDF", da_id, anhId, destPath) Then
addUsrcnlToPnl(destPath, da_id, anhId, Filename, "PDF")
End If
'addUsrcnlToPnl(TMP_Path)
End If
End If
Catch ex As Exception
MsgBox("FEHLER Scan: " & ex.Message & ex.StackTrace)
End Try
End Sub
Sub addUsrcnlToPnl(TMP_Path, dicId, anhId, Optional filename = "", Optional Typ = "")
Dim USRCNTL As New usrCntlSendungAnhangElement
Dim fi As New FileInfo(TMP_Path)
If filename = "" Then filename = fi.Name
USRCNTL.FILE_PATH = TMP_Path
USRCNTL.FILE_NAME = filename
USRCNTL.FILE_DOCID = dicId
USRCNTL.FILE_NAME = filename
USRCNTL.FILE_ANHID = anhId
USRCNTL.FILE_TYPE = Typ
initElement(USRCNTL)
flpnlAviso.Controls.Add(USRCNTL)
End Sub
Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
cntxt.Show(Cursor.Position)
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
deleteActiveElement(flpnlSendungen)
End Sub
Public Sub addData_SendungAnhangFD()
Dim fd As New OpenFileDialog
fd.Multiselect = True
If fd.ShowDialog = vbOK Then
For Each F_listItem In fd.FileNames
Dim fi As New FileInfo(F_listItem)
Dim filename = fi.Name
If filename = "" Then
MsgBox("Dateiname konnte nicht ermittelt werden." & vbNewLine & F_listItem)
Else
' Dim TMP_Path = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(filename, fi.Extension,, False, "SendungsAnhaenge")
' MsgBox(TMP_Path)
' File.Copy(F_listItem, TMP_Path)
Dim da_id = -1
Dim anhId = -1
Dim destPath = ""
Dim Typ = ""
If getFileTypeValid(fi.Extension.Replace(".", ""), Typ) Then
If saveToDS(AvisoId, filename, F_listItem, "", Typ, da_id, anhId, destPath) Then
addUsrcnlToPnl(destPath, da_id, anhId, filename, Typ)
End If
End If
End If
Next
If flpnlAviso.Controls.Count > 0 Then DirectCast(flpnlAviso.Controls(0), usrCntlSendungAnhangElement).CLICK_Me()
End If
End Sub
Public Sub addData_SendungAnhang(Path)
Dim fi As New FileInfo(Path)
Dim filename = fi.Name
Dim da_id = -1
Dim anhId = -1
Dim destPath = ""
Dim Typ = ""
If getFileTypeValid(fi.Extension.Replace(".", ""), Typ) Then
If saveToDS(AvisoId, fi.Name, Path, "", Typ, da_id, anhId, destPath) Then
addUsrcnlToPnl(destPath, da_id, anhId, filename, Typ)
End If
End If
End Sub
Public Shared Function getFileTypeValid(extension, ByRef Typ) As Boolean
Select Case extension.ToString.Replace(".", "").ToUpper
Case "PDF" : Typ = "PDF"
Case "XLS", "XLM", "XLSM", "XLSX", "CSV" : Typ = "EXCEL"
Case "DOC", "DOCX" : Typ = "WORD"
Case "TXT" : Typ = "TEXT"
Case "JPEG", "JPG", "GIF", "TFF" : Typ = "BILD"
Case "EXE" : MsgBox("Aviso-Anhänge: Ungültiges Datei-Format!") : Return False
Case Else : Typ = "SONSTIGES"
End Select
Return True
End Function
Public Shared Function saveToDS(AvisoId, fileName, sourcePath, Art, Typ, Optional ByRef da_id = -1, Optional ByRef anhId = -1, Optional ByRef destPath = "", Optional SendungsId = Nothing) As Boolean
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "AVISO_ANHAENGE", AvisoId, Now.ToString("ddMMyy_HHmmss.ffff"), "", fileName, -1, False)
If Not DS.uploadDataToDATENSERVER(sourcePath) Then MsgBox("Fehler beim Speichern: Datenserver!") : Return False
If DS.da_id <= 0 Then MsgBox("Keine DocId!") : Return False
da_id = DS.da_id
destPath = DS.GET_TOP1_PATH
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(AvisoId, fileName, DS.da_id, Art, Typ, SendungsId)
If Not ANH.SAVE Then MsgBox("Fehler beim Anhang speichern!") : Return False
anhId = ANH.anh_id
Return True
End Function
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
BrowserLoaded = True
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles btnAddSnd.Click
Dim f As New frmAddSendnung(AvisoId)
If f.ShowDialog(Me) = DialogResult.OK Then
initSendungen()
cboSendungen.changeItem(f.SendungsId)
initFlpANH_LIST(flpnlSendungen)
End If
txtSeiten.Focus()
End Sub
Private Sub AusZwischenablageeinfügenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AusZwischenablageeinfügenToolStripMenuItem.Click
Dim data As IDataObject = Clipboard.GetDataObject
If True Then 'data.GetDataPresent(DataFormats.FileDrop) Then
For Each s As String In My.Computer.Clipboard.GetFileDropList() 'GetData(DataFormats.) 'data.GetData(DataFormats.FileDrop) 'DataFormats.FileDrop)
' Dim F_listItem As String = Path.Combine("c:\mynewpath", Path.GetFileName(s))
' File.Copy(s, newFile)
' MsgBox(s)
If IO.File.Exists(s) Then
Dim fi As New FileInfo(s)
Dim filename = fi.Name
If filename = "" Then
MsgBox("Dateiname konnte nicht ermittelt werden." & vbNewLine & s)
Else
Dim da_id = -1
Dim anhId = -1
Dim destPath = ""
Dim Typ = ""
If getFileTypeValid(fi.Extension.Replace(".", ""), Typ) Then
If saveToDS(AvisoId, filename, s, "", Typ, da_id, anhId, destPath) Then
addUsrcnlToPnl(destPath, da_id, anhId, filename, Typ)
End If
End If
End If
End If
Next
If flpnlAviso.Controls.Count > 0 Then DirectCast(flpnlAviso.Controls(0), usrCntlSendungAnhangElement).CLICK_Me()
End If
End Sub
Private Sub txtSeiten_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles txtSeiten.PreviewKeyDown, cboArt.PreviewKeyDown
Try
If e.Modifiers = Keys.Alt Then ' Sendungen durchlaufen
If e.KeyCode = Keys.PageDown Then
cboSendungen.SelectedIndex = cboSendungen.SelectedIndex + 1
End If
If e.KeyCode = Keys.PageUp Then
cboSendungen.SelectedIndex = cboSendungen.SelectedIndex - 1
End If
ElseIf e.Modifiers = Keys.Control Then ' PDFs durchlaufen
If e.KeyCode = Keys.PageDown Then
nextPDF()
End If
If e.KeyCode = Keys.PageUp Then
prevPDF()
End If
If e.KeyCode = Keys.Add Then
btnAddSnd.PerformClick()
e.IsInputKey = True ' Damit Event abgefangen ist, sonst steht "+" im Feld
End If
Else
If e.KeyCode = Keys.PageDown Then
PdfViewer.GoToPage(PdfViewer.CurrentPageNumber + 1)
End If
If e.KeyCode = Keys.PageUp Then
PdfViewer.GoToPage(PdfViewer.CurrentPageNumber - 1)
End If
End If
Catch ex As ArgumentOutOfRangeException
'out of range
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Sub nextPDF()
Dim bool_next = False
For Each c As usrCntlSendungAnhangElement In flpnlAviso.Controls
If bool_next Then c.CLICK_Me() : Exit Sub
If c.ACTIVE Then
bool_next = True
End If
Next
End Sub
Sub prevPDF()
Dim ctmp As usrCntlSendungAnhangElement = Nothing
For Each c As usrCntlSendungAnhangElement In flpnlAviso.Controls
If c.ACTIVE Then
If ctmp IsNot Nothing Then ctmp.CLICK_Me()
Exit Sub
End If
ctmp = c
Next
End Sub
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
If txtSeiten.Text = "" Then Exit Sub
' If cboArt._value = "" Then Exit Sub
' If cboSendungen._value = "" Then Exit Sub
If Not checkSeiten() Then Exit Sub
Dim CurrentPageNumber = PdfViewer.CurrentPageNumber
Dim pages = getPagesFromText()
Dim cntl = getAcitveCntl()
Dim cntlID = If(cntl IsNot Nothing, getAcitveCntl().FILE_ANHID, -1)
For Each u As usrCntlSendungAnhangElement In flpnlAviso.Controls
If u.ACTIVE Then
If u.FILE_TYPE <> "PDF" Then Exit Sub
Dim fi As New FileInfo(u.FILE_PATH)
' Dim SendngsId As Integer = cboSendungen._value
Dim TMP_Path_Old = u.FILE_PATH
Dim TMP_Path_New = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(u.FILE_NAME, fi.Extension,, True, "SendungsAnhaenge")
Dim PagesLeft = 0
If vbYes = MsgBox("Möchten Sie die Seiten wirklich auf dem Dokument löschen?", vbYesNoCancel) Then
If removePagesFromPdf_Spire(u.FILE_PATH, TMP_Path_New, getPagesFromText(), PagesLeft, False) Then
If PagesLeft = 0 Then
'delFromDS(u.FILE_DOCID)
deleteElement(u.FILE_DOCID, u.FILE_ANHID, False)
flpnlAviso.Controls.Remove(u)
Else
Dim destPath = ""
If saveChangeToDS_daId(u.FILE_DOCID, TMP_Path_New, destPath) Then
tryDelete(TMP_Path_Old)
u.FILE_PATH = destPath
End If
End If
End If
End If
'-------------
End If
Next
clearPnlAnfuegen()
' initSendungen()
initFlpANH_LIST(, False)
If flpnlAviso.Controls.Count > 0 Then
If Not setAvtiveById(flpnlAviso, CurrentPageNumber, pages, cntlID) Then
DirectCast(flpnlAviso.Controls(0), usrCntlSendungAnhangElement).CLICK_Me()
End If
End If
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
PdfViewer.Rotate(Spire.PdfViewer.Forms.RotateAngle.RotateAngle90)
End Sub
Private Sub cboArt_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboArt.SelectedIndexChanged
If cboArt.Text.Replace("Sonstige", "") <> "" Then
txtBezeichnung.Text = cboArt.Text.Replace("Rechnung", "Handelsrechnung") & ".pdf"
End If
End Sub
Private Sub txtBezeichnung_TextChanged(sender As Object, e As EventArgs)
End Sub
'Private Sub txtBezeichnung_GotFocus(sender As Object, e As EventArgs) Handles txtBezeichnung.GotFocus
' txtBezeichnung.SelectAll()
'End Sub
'Dim angle = 0
'Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
' angle += 90
' If angle > 270 Then
' angle = 0
' End If
' PdfViewer.Rotate(angle)
'End Sub
End Class