'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