Visualizzazione dei risultati da 1 a 2 su 2

Visualizzazione discussione

  1. #1

    [Vb.Net] iTextSharp - problemi nell applicare una password sui pdf

    Ciao a tutti,
    ho un piccolo problema con iTextSharp, in pratica inserisco una password in un pdf, riesco a modificarla e a cancellare la password, solo che nel momento un cui cancello la password e vorrei reinserirla al file sprotetto mi da un errore o per meglio dire mi corrompe il file. Non riesco a capire dove sbaglio.
    codice:
    If flag = "inserisci" Then
                    If IsPasswordProtected(login.percorsodoc.Text & "\" & url) Then
                        MsgBox("Documento già protetto con password", MsgBoxStyle.Information)
                        Me.Close()
                    Else
                        Dim FileName As String = login.percorsodoc.Text & "\" & url
                        Dim PasswordUser As String = InputBox("Inserisci la password da applicare", "Proteggi documento")
                        Dim PasswordOwner As String = ""
                        If Not PasswordUser = "" Then
                            'Crea un nuovo file dove viene cambiata la password 
                            ChangePasswordPDF(FileName, login.percorsodoc.Text & "\" & url & "_temp.pdf", PasswordOwner, PasswordUser)
                            'elimina file vecchio per sostituirlo col nuovo
                            If IO.File.Exists(login.percorsodoc.Text & "\" & url & "_temp.pdf") Then IO.File.Delete(login.percorsodoc.Text & "\" & url)
                            ' rinomina
                            System.IO.File.Move(login.percorsodoc.Text & "\" & url & "_temp.pdf", login.percorsodoc.Text & "\" & url)
     
    
                            Dim mConnect As New ADODB.Connection()
                            mConnect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & login.percorsodb.Text & ";Jet OLEDB:Database Password=tonyluca"
                            mConnect.Open()
     
                            Dim mRecord As New ADODB.Recordset()
                            mRecord.Open("Select * From doc where documento = '" + url + "'", mConnect, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
                            mRecord.Fields("crypt").Value = True
                            mRecord.Update()
                            mRecord.Close()
                            mConnect.Close()
                            If page = "form1" Then Form1.ListView1.SelectedItems.Item(0).ImageKey = 5 Else piupagine.ListView1.SelectedItems.Item(0).ImageKey = 1
                            MsgBox("Password inserita correttamente", MsgBoxStyle.Information)
                            Me.Close()
                        Else
                            MsgBox("Documento non protetto", MsgBoxStyle.Information)
                            Me.Close()
                        End If
                        Me.Close()
                    End If
                ElseIf flag = "modifica" Then
    
                    If IsPasswordProtected(login.percorsodoc.Text & "\" & url) Then
                        Dim FileName As String = login.percorsodoc.Text & "\" & url
    
                        Dim TempFileName As String = login.percorsodoc.Text & "\" & url & "_temp.pdf"
                        Dim PasswordVecchia As String = InputBox("Inserisci la vecchia password", "Cambia password")
                        Dim PasswordNuova As String = InputBox("Inserisci la password da applicare", "Proteggi documento")
                        If PasswordVecchia = PasswordNuova Then
                            MsgBox("La passord nuova non può coincidere con quella vecchia", MsgBoxStyle.Exclamation)
                            Exit Sub
                        End If
     
                        visualizza.Dispose()
                        piupagine.Dispose()
                        'Verifica se il file esiste
                        If System.IO.File.Exists(FileName) Then
                            'Verifica prima se la password è corretta
                            If IsPasswordProtectedCorrect(FileName, PasswordVecchia) Then
                                'Modifica la password al file
                                ChangePasswordPDF(FileName, TempFileName, PasswordVecchia, PasswordNuova)
                                'elimina file vecchio per sostituirlo col nuovo
                                If IO.File.Exists(login.percorsodoc.Text & "\" & url & "_temp.pdf") Then IO.File.Delete(login.percorsodoc.Text & "\" & url)
                                ' rinomina
                                System.IO.File.Move(login.percorsodoc.Text & "\" & url & "_temp.pdf", login.percorsodoc.Text & "\" & url)
    
                                If page = "form1" Then Form1.ListView1.SelectedItems.Item(0).ImageKey = 5 Else piupagine.ListView1.SelectedItems.Item(0).ImageKey = 1
                                MsgBox("Password modificata correttamente", MsgBoxStyle.Information)
                                Me.Close()
                            Else
                                'restituisce il messaggio d'errore che la password è sbagliata
                                MsgBox("Errore la Password inserita non è corretta", vbCritical, "ATTENZIONE!!")
                                Me.Close()
                            End If
                        Else
                            MsgBox("File non esistente", vbCritical, "ATTENZIONE!!")
                            Me.Close()
                        End If
                        Me.Close()
                    Else
                        MsgBox("Documento non protetto da password", MsgBoxStyle.Information)
                        Me.Close()
                    End If
                ElseIf flag = "eliminapsw" Then
    
                    If IsPasswordProtected(login.percorsodoc.Text & "\" & url) Then
                        Dim FileName As String = login.percorsodoc.Text & "\" & url
                        Dim TempFileName As String = login.percorsodoc.Text & "\" & url & "_temp.pdf"
                        Dim PasswordVecchia As String = InputBox("Inserisci la password", "Cambia password")
     
                        'Verifica se il file esiste
                        If System.IO.File.Exists(FileName) Then
                            'Verifica prima se la password è corretta
                            If IsPasswordProtectedCorrect(FileName, PasswordVecchia) Then
                                'Elimina la password al file
                                ChangePasswordPDF(FileName, TempFileName, PasswordVecchia, "")
     
     
                                'elimina file vecchio per sostituirlo col nuovo
                                If IO.File.Exists(login.percorsodoc.Text & "\" & url & "_temp.pdf") Then IO.File.Delete(login.percorsodoc.Text & "\" & url)
                                ' rinomina
                                System.IO.File.Move(login.percorsodoc.Text & "\" & url & "_temp.pdf", login.percorsodoc.Text & "\" & url)
                                Dim mConnect As New ADODB.Connection()
                                mConnect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & login.percorsodb.Text & ";Jet OLEDB:Database Password=tonyluca"
                                mConnect.Open()
                                Dim lista As ListViewItem
    
                                Dim mRecord As New ADODB.Recordset()
                                mRecord.Open("Select * From doc where documento = '" + url + "'", mConnect, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
                                mRecord.Fields("crypt").Value = False
                                mRecord.Update()
                                mRecord.Close()
                                mConnect.Close()
    
                                If page = "form1" Then Form1.ListView1.SelectedItems.Item(0).ImageKey = 4 Else piupagine.ListView1.SelectedItems.Item(0).ImageKey = 0
                                MsgBox("Password eliminata correttamente", MsgBoxStyle.Information)
                                Me.Close()
                            Else
                                'restituisce il messaggio d'errore che la password è sbagliata
                                MsgBox("Errore la Password inserita non è corretta", vbCritical, "ATTENZIONE!!")
                                Me.Close()
                            End If
                        Else
                            MsgBox("File non esistente", vbCritical, "ATTENZIONE!!")
                            Me.Close()
                        End If
                        Me.Close()
    
                    Else
                        MsgBox("Documento non protetto da password", MsgBoxStyle.Information)
                        Me.Close()
                    End If
                    Me.Close()
                End If
     'Verifica se la password è corretta per aprire il file
        Private Function IsPasswordProtectedCorrect(ByVal pdfFullname As String, ByVal Passwords As String) As Boolean
            Try
                Dim pdfReader As New PdfReader(pdfFullname, New System.Text.ASCIIEncoding().GetBytes(Passwords))
                Return True
            Catch generatedExceptionName As BadPasswordException
                Return False
            End Try
        End Function
        'Verifica se il file è protetto da password
        Private Function IsPasswordProtected(ByVal pdfFullname As String) As Boolean
            Try
                Dim pdfReader As New PdfReader(pdfFullname)
                Return False
            Catch generatedExceptionName As BadPasswordException
                Return True
            End Try
        End Function
        ''' <summary>
        ''' Cambia password al file PDF 
        ''' </summary>
        ''' <param name="sourcePdfPath">Percorso del file sorgente PDF (ex. c:\demo.pdf)</param>
        ''' <param name="outputPdfPath">Percorso dove salvare il nuovo file PDF (ex. c:\test.pdf)</param>
        ''' <param name="password">Password Attuale</param>
        ''' <param name="PasswordNew">Password Nuova</param>
        ''' <remarks></remarks>
        Private Sub ChangePasswordPDF(ByVal sourcePdfPath As String, ByVal outputPdfPath As String, ByVal password As String, ByVal PasswordNew As String)
            Try
                Dim pageCount As Integer = 0
                Dim currentPage As Integer = 0
                Dim pdfDoc As iTextSharp.text.Document = Nothing
                Dim writer As iTextSharp.text.pdf.PdfCopy = Nothing
                Dim page As iTextSharp.text.pdf.PdfImportedPage = Nothing
                Dim currentPDF As Integer = 0
                Dim pdfReader As New PdfReader(sourcePdfPath, New System.Text.ASCIIEncoding().GetBytes(password))
                pdfDoc = New iTextSharp.text.Document(pdfReader.GetPageSizeWithRotation(1))
                writer = New iTextSharp.text.pdf.PdfCopy(pdfDoc, New IO.FileStream(outputPdfPath, IO.FileMode.OpenOrCreate, IO.FileAccess.Write))
                writer.SetEncryption(PdfWriter.STRENGTH128BITS, PasswordNew, PasswordNew, PdfWriter.AllowCopy)
                pageCount = pdfReader.NumberOfPages
                pdfDoc.Open()
                While currentPage < pageCount
                    currentPage += 1
                    pdfDoc.SetPageSize(pdfReader.GetPageSizeWithRotation(currentPage))
                    pdfDoc.NewPage()
                    page = writer.GetImportedPage(pdfReader, currentPage)
                    writer.AddPage(page)
                End While
                pdfDoc.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    Grazie anticipatamente
    Ultima modifica di Asa1458; 15-12-2013 a 13:58
    "AZIONE E MEDITAZIONE" se non pensi a quello che fai, come puoi fare quello che pensi?
    Arkiv - Software documentale http://www.lucagiardina.com/arkiv

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.