giovedì 8 giugno 2017

VBA rilevare il numero delle pagine in un file PDF

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_vba-rilevare-il-numero-delle-pagine-in-u_1525.aspx

In questo articolo, vediamo come realizzare una semplice procedura che ci permette di leggere il numero di pagine all’interno di un file PDF.
Il codice è scritto in Visual Basic for Application, da utilizzare nel programma Microsoft Office (per esempio Microsoft Word o Microsoft Excel) , da inserire in una macro o in qualche form all’interno di qualche applicativo.
Da notare che il numero di pagine che andiamo a rilevare riguarda tutti quei file che non hanno la protezione (password) e che all’interno è presente il testo e non immagine, altrimenti lo script rileverà 0 pagine.

Stesura del codice

Apriamo il programma Microsoft Word o Microsoft Excel (qualsiasi versione va bene) e selezioniamo la scheda con la voce “Sviluppo”, nel caso che non è presente, dobbiamo selezionare nella voce “Opzioni” il menu “Scheda Sviluppo” e mettere la spunta.
A questo punto, selezioniamo dal menu “Sviluppo” la voce “Visual Basic”, verrà aperto l’editor di Visual Basic Application.
In alto prima di ogni dichiarazione, inseriamo l’istruzione per l’obbligo di dichiarazione.
Qui di seguito l’esempio di codice.

Option Explicit

A questo punto si crea una funzione, che ha lo scopo di aprire in file pdf, leggere il contenuto al suo interno, verificare le varie sezioni e contarle.
Qui di seguito il frammento di codice di tale funzione.

Private Function OttieniNumeroPaginePdf(PercorsoNomeFile As String) As Long
Dim File As Long
Dim bufferFile As String
Dim ArrayPagine() As String
Dim inizio As Long
Dim fine As Long
Dim pagineElaboro As Long
Dim TotaliPagine As Long
Dim contatore As Long
File = FreeFile()
'Apro il file Pdf in modo che verifico il contenuto
Open PercorsoNomeFile For Binary As #File
bufferFile = String$(LOF(File), Chr$(0))
'Scrivo nel buffer
Get #File, , bufferFile
'chiudo la gestione della lettura del file
Close #File
'Intercetto le sezioni
ArrayPagine = Split(bufferFile, "/Type/Pages")
For contatore = 1 To UBound(ArrayPagine)
inizio = InStr(1, ArrayPagine(contatore), "/Count ")
If inizio Then
inizio = inizio + 7
fine = inizio
Do While IsNumeric(Mid$(ArrayPagine(contatore), fine, 1))
fine = fine + 1
Loop
pagineElaboro = CLng(Mid$(ArrayPagine(contatore), inizio, fine - inizio))
TotaliPagine = TotaliPagine + pagineElaboro
End If
Next contatore
OttieniNumeroPaginePdf = TotaliPagine
End Function


Ora non ci resta che creare la nostra funzione che verrà eseguita come macro, con il quale viene eseguita tale funzione.
Qui di seguito tale dichiarazioni

Sub EseguiContaPagine()
MsgBox (OttieniNumeroPaginePdf("E:\test.pdf"))
End Sub


Conclusioni

L’articolo ha voluto fornire una tecnica di come rilevare informazioni da un file PDF, in particolare il numero di pagine.
Con l’aggiunta di Visual Basic application, gli applicativi office migliorano la loro produttiva, integrando quelle funzionalità che non sono presenti nell’applicativo stesso, ed al tempo stesso estendere ulteriori programmi.
Un linguaggio semplice alla portata di tutti, con interessanti potenzialità.

Nessun commento: