In dit artikel wordt uiteengezet hoe - specifieke onderdelen - uit een PDF document ingelezen kunnen worden met behulp van Word VBA.
Vooraf is het wellicht van belang om aan te geven dat een PDF document geen dataset is, zoals bijvoorbeeld een CSV document. Om die reden laat een PDF document zich niet altijd even makkelijk inlezen.
Als voorbeeld worden de vragen ingelezen van een geschiedenis examen. Een vraag bestaat uit een inleiding en wordt als geheel gekenmerkt door een witregel (lege paragraaf) boven en onder. Gezien deze opmaak door het gehele document consistent voorkomt kunnen de vragen makkelijk ingelezen worden.
In de praktijk is gebleken dat tussen vraag 7 en 8 geen witregel stond. Het document is dus helaas niet 100% consistent qua opmaak zoals eerder verwacht.
Om dit automatiseringsproces glad te strijken was het noodzakelijk om dubbele wit regels te verwijderen (verwijderDubbeleRegels), alsmede de tabellen (verwijderTabellen).
Option Explicit Sub leesPDF() Dim docPDF As Document Set docPDF = Application.Documents.Open(ThisDocument.Path & _ "\Nederlands 2019 I_opgaven.pdf", False, , , , , , , , "PDF Files") leesKoppen docPDF Set docPDF = Nothing End Sub Sub leesKoppen(docPDF As Document) Dim p As Integer Dim startKop As Integer Dim eindKop As Integer Dim rngKop As Range For p = 1 To docPDF.Paragraphs.Count If docPDF.Paragraphs(p).Style = "Kop 2" Or _ p = docPDF.Paragraphs.Count Then If startKop > 0 Then eindKop = p Set rngKop = docPDF.Range(docPDF.Paragraphs(startKop).Range.Start, _ docPDF.Paragraphs(eindKop).Range.End) End If startKop = p End If If Not rngKop Is Nothing Then verwijderTabellen rngKop verwijderDubbeleRegels rngKop leesVragen docPDF, rngKop Set rngKop = Nothing End If Next p End Sub Sub verwijderTabellen(rngKop As Range) Dim t As Table For Each t In rngKop.Tables t.ConvertToText Next t End Sub Sub verwijderDubbeleRegels(rngKop As Range) Dim p As Integer For p = rngKop.Paragraphs.Count To 4 Step -1 If rngKop.Paragraphs(p).Range.Characters.Count = 2 And _ rngKop.Paragraphs(p - 1).Range.Characters.Count = 2 Then rngKop.Paragraphs(p).Range.Delete End If Next p End Sub Sub leesVragen(docPDF As Document, rngKop As Range) Dim p As Integer Dim startVraag As Integer Dim eindVraag As Integer Dim rngVraag As Range For p = 3 To rngKop.Paragraphs.Count If rngKop.Paragraphs(p).Range.Characters.Count = 2 Or _ p = rngKop.Paragraphs.Count Then If startVraag > 0 Then eindVraag = p Set rngVraag = docPDF.Range(rngKop.Paragraphs(startVraag).Range.Start, _ rngKop.Paragraphs(eindVraag).Range.End) If rngVraag.Characters.Count > 100 Then rngVraag.Select End If End If startVraag = p End If If Not rngVraag Is Nothing Then Set rngVraag = Nothing End If Next p End Sub
Tip: volgens dit LinkedIn-artikel zal in een toekomstige versie van Excel een ingebouwde functionaliteit komen om PDF documenten in te lezen.