[vb 2010 express]: aprire e salvare un pdf con password

sabato 22 dicembre 2012 - 14.53
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio Express  |  SQL Server Express

kar64 Profilo | Newbie

Salve a tutti.
Sono appena iscritto a questo forum. Un saluto a tutti.

Sono un "vecchio" programmatore amatoriale vb5 che ora, per forza di cose, vorrebbe passare a Visual Basic 2010 express.
Per cominciare ho da fare un progettino che mi permetta di modificare la password di un file pdf.
Attenzione: non ho bisogno di aprirlo e vederlo o modificarlo !!
Quello che vorrei fare è questo:

seleziono il file
lo decripto con la passord che conosco
lo cripto con la nuova password
lo salvo sempre con lo stesso nome

il tutto senza che l'utente debba digitare o vedere nulla (ad eccezione della vecchia password e della nuova).

Mi pare di aver capito che di nativo su vb non ci sia nulla di nativo e che dovrei appoggiarmi a qualche libreria esterna ....

Potreste indicarmi qualcosa e (magari) fornirmi una piccola guida su come utilizzarla

Grazie

Davide1986 Profilo | Junior Member

Ciao ti posso dare un suggerimento e vediamo se ti può aiutare.

Per prima cosa scaricati la libreria iTextSharp gratuitamente al seguente indirizzo : http://sourceforge.net/projects/itextsharp/

Poi devi scompattare i file .dll e devi importare questi file e salvarli, ti consiglio nello stesso progetto che tu vai a creare. (Per importare le .dll devi aprire il progetto in Visual Basic 2010 e poi devi cliccare su Progetto->Aggiungi Riferimento e poi sfoglia e trovare il file .dll precisamente itextsharp.dll )

Ti ho aggiunto una piccola funzione dove puoi capire come si crea un file PDF e come si inserisce una password. (Quando ho tempo ti allego anche il link dove scaricare il file di esempio che ti può interessare)

CODICE VISUAL STUDIO 2010 - VISUAL BASIC .NET - VB.NET

Imports iTextSharp.text Imports iTextSharp.text.pdf Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click CreaDemoPDF("c:\demo.pdf", "mypass") End Sub Private Sub CreaDemoPDF(ByVal PercorsoFile As String, ByVal Password As String) Dim pdfWrite As PdfWriter Dim pdfDoc As New Document() Dim pdfMemoryStream As New IO.FileStream(PercorsoFile, IO.FileMode.Create) pdfWrite = PdfWriter.GetInstance(pdfDoc, pdfMemoryStream) 'Crea il file con la password pdfWrite.SetEncryption(PdfWriter.STRENGTH128BITS, Password, Nothing, PdfWriter.AllowCopy) 'Apri Sezione pdfDoc.Open() 'Inserisce nella prima pagina Hello Word pdfDoc.Add(New Paragraph("Hello World")) 'Aggiunge una nuova pagina pdfDoc.NewPage() 'Aggiunge una nuova stringa Hello World Again pdfDoc.Add(New Paragraph("Hello World Again")) 'Chiude Sezione pdfDoc.Close() End Sub End Class

Ecco quello che sono riuscito a fare in poco tempo è da migliorare di sicuro ma funzionante, aprire un file PDF con la password vecchia e crea un nuovo file con la Password Nuova :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

A breve scriverò nel mio blog un articolo che spiega come utilizzare iTextSharp e creare PDF, aggiungere le pagine, cancellare le pagine, ecc.. tra cui ci aggiungo anche quello che ti serve a te .

Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.alpacasrl.it

kar64 Profilo | Newbie

Innanzitutto grazie.
Sei stato gentilissimo e disponibile.

Ho copiato il codice postato ma ho i seguenti errori in corrispondenza delle righe:

Dim pdfWrite As PdfWriter Dim pdfDoc As New Document()

Tipo 'Pdfwriter' non definito
Tipo 'Document' non definito.
e poi a seguire errori su ogni ricorrenza dei suddetti tipi.

La libreria è caricata regolarmente.

Inoltre, volevo meglio specificare quello che dovrebbe fare il programma:

if exist file xxx.pdf then
if xxx.pdf is protected then
xxx.pdf open with password "111"( o meglio decripta ...)
'assegno password
xxx.pdf password ("222")
xxx.pdf save
else
msgbox( Il file xxx.pdf non e' protetto)
'assegno password 222
xxx.pdf password ("222")
xxx.pdf save
endif
endif

Nello specifico il mio programma non dovrà far vedere il contenuto del file pdf ( e quindi non dovra' aprire acrobat), ma si dovra' limitare a "sostituire" la password ....

Nella libreria suggerita, pero' non riesco a trovare qualche riferimento a "Is protect" o qualcosa del genere ......

Per il momento ti ringrazio nuovamente, e ti auguro Buone feste (oltre che a tutto il forum).

Davide1986 Profilo | Junior Member

L'errore può essere dovuto al fatto di non aver importato la .dll correttamente. Hai fatto click sul menu Progetto -> Aggiungi riferimento e selezionato il file itextsharp.dll ?.

Comunque per aiutarti ti allego un piccolo progetto con dentro le librerie, dove puoi trovare le funzioni :

1) funzione che crea un file PDF e lo protegge da password
2) funzione che verifica se il file ha la password
3) funzione che verifica se la password passata è corretta.
4) funzione che cambia i permessi del file PDF protetto
5) funzione che crea da un file PDF senza password con la password scelta
6) funzione che crea un nuovo file PDF con nuova password da uno file PDF con password

Password : ImaginSystem
Link Donload : http://www.mediafire.com/?irf76fdd76vffvw

Esempio codice utilizzato :
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra



Fammi sapere se ti va bene. Se ti serve qualche altre info non esitare a contattarmi.

Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.
Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.alpacasrl.it

kar64 Profilo | Newbie

Beh ... che dire. Velocissimo, preciso ed esaustivo !!! Complimenti.
Ho scaricato il progetto. Unica domanda:
è scritto con vb 2012 ? Perche' se provo ad aprirlo con vb 2010 express mi dice che il progetto non puo' essere aperto perche' il tipo di progetto non e' supportato. Con vb2012 invece parte regolarmente.
Per il resto è proprio quello che cercavo disperatamente di fare.
Grazie !!!!

P.S. Ho scoperto il tuo blog (che non conoscevo) e che è stato immediatamente inserito tra i segnalibri preferiti.

P.S.2: ..... chissa quante altre domande .....

Davide1986 Profilo | Junior Member

Ciao comunque il file l'ho creato con Visual Studio 2010 - VB.NET , se hai problemi posso cercare di crearlo per una versione precedente.

Se pensi che ho risolto il tuo problema puoi gentilmente fare click sul tasto "Risolto" cosi che chi ha il tuo stesso problema troverà la soluzione :-) .

Saluti Davide

P.s. Auguri di Buon Natale a te e a tutti quelli del Forum.



Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.alpacasrl.it

kar64 Profilo | Newbie

Ciao e scusami per il ritardo nella risposta.
Come ti dicevo io ho provato ad parire il progetto con visual basic 2010 express ed ho ricevuto quel messaggio di errore, mentre con vb2012 nessu errore.
Ma non e' un problema lavorero' con la 2012.

Puoi cortesemente dirmi dove trovo il pulsante "Risolto" ?

Grazie

Davide1986 Profilo | Junior Member

Mi sono sbagliato il tasto è Accetta quello verde non so se si vede per ogni cosa sono a tua disposizione per il programma
Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.alpacasrl.it
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5