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).
005 | Dim docPDF As Document |
007 | Set docPDF = Application.Documents.Open(ThisDocument.Path & _ |
008 | "\Nederlands 2019 I_opgaven.pdf" , False , , , , , , , , "PDF Files" ) |
016 | Sub leesKoppen(docPDF As Document) |
019 | Dim startKop As Integer |
020 | Dim eindKop As Integer |
024 | For p = 1 To docPDF.Paragraphs.Count |
026 | If docPDF.Paragraphs(p).Style = "Kop 2" Or _ |
027 | p = docPDF.Paragraphs.Count Then |
033 | Set rngKop = docPDF.Range(docPDF.Paragraphs(startKop).Range.Start, _ |
034 | docPDF.Paragraphs(eindKop).Range. End ) |
043 | If Not rngKop Is Nothing Then |
045 | verwijderTabellen rngKop |
046 | verwijderDubbeleRegels rngKop |
047 | leesVragen docPDF, rngKop |
057 | Sub verwijderTabellen(rngKop As Range) |
061 | For Each t In rngKop.Tables |
069 | Sub verwijderDubbeleRegels(rngKop As Range) |
073 | For p = rngKop.Paragraphs.Count To 4 Step -1 |
075 | If rngKop.Paragraphs(p).Range.Characters.Count = 2 And _ |
076 | rngKop.Paragraphs(p - 1).Range.Characters.Count = 2 Then |
078 | rngKop.Paragraphs(p).Range.Delete |
086 | Sub leesVragen(docPDF As Document, rngKop As Range) |
089 | Dim startVraag As Integer |
090 | Dim eindVraag As Integer |
092 | Dim rngVraag As Range |
094 | For p = 3 To rngKop.Paragraphs.Count |
096 | If rngKop.Paragraphs(p).Range.Characters.Count = 2 Or _ |
097 | p = rngKop.Paragraphs.Count Then |
099 | If startVraag > 0 Then |
103 | Set rngVraag = docPDF.Range(rngKop.Paragraphs(startVraag).Range.Start, _ |
104 | rngKop.Paragraphs(eindVraag).Range. End ) |
106 | If rngVraag.Characters.Count > 100 Then |
118 | If Not rngVraag Is Nothing Then |
120 | Set rngVraag = Nothing |
Tip: volgens dit LinkedIn-artikel zal in een toekomstige versie van Excel een ingebouwde functionaliteit komen om PDF documenten in te lezen.