Willem Weytjens
asked on
Fill out PDF Form from Access database, and import PDF Form values into database
OK, so I have the following code (Code No. 1) that writes data from an Excel file into a PDF Form (I use Adobe Acrobat).
In addition, I have anothe rcode (Code No. 2), that pushes the data from the PDF Forms, back into the excel file.
Instead of doing these 2 things from/to Excel, I want to do it from my MS access database (let's say a table called "Data", with the same fields as the PDF Form fields), but I don't know how/where to change the code.
Any help would be greatly appreciated!
Code No. 1:
Option Explicit
Sub WritePDFForms()
  Â
  'Declaring the necessary variables.
  Dim strPDFPath        As String
  Dim strFieldNames(1 To 11)  As String
  Dim i            As Long
  Dim j            As Integer
  Dim LastRow         As Long
  Dim objAcroApp        As Object
  Dim objAcroAVDoc       As Object
  Dim objAcroPDDoc       As Object
  Dim objJSO          As Object
  Dim strPDFOutPath      As String
     Â
  'Disable screen flickering.
  Application.ScreenUpdating = False
 Â
  'Specify the path of the sample PDF form.
  'Full path example:
  'strPDFPath = "C:\Users\Christos\Desktop \Test Form.pdf"
  'Using workbook path:
  strPDFPath = ThisWorkbook.Path & "\" & "Test Form.pdf"
 Â
  'Set the required field names in the PDF form.
  strFieldNames(1) = "First Name"
  strFieldNames(2) = "Last Name"
  strFieldNames(3) = "Street Address"
  strFieldNames(4) = "City"
  strFieldNames(5) = "State"
  strFieldNames(6) = "Zip Code"
  strFieldNames(7) = "Country"
  strFieldNames(8) = "E-mail"
  strFieldNames(9) = "Phone Number"
  strFieldNames(10) = "Type Of Registration"
  strFieldNames(11) = "Previous Attendee"
 Â
  'Find the last row of data in sheet Write.
  With shWrite
    .Activate
    LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
  End With
 Â
  'Loop through all rows of sheet Write and use the data to fill the PDF form.
  For i = 4 To LastRow
 Â
    On Error Resume Next
   Â
    'Initialize Acrobat by creating the App object.
    Set objAcroApp = CreateObject("AcroExch.App ")
   Â
    'Check if the object was created.
    If Err.Number <> 0 Then
      MsgBox "Could not create the App object!", vbCritical, "Object error"
      'Release the object and exit.
      Set objAcroApp = Nothing
      Exit Sub
    End If
   Â
    'Create the AVDoc object.
    Set objAcroAVDoc = CreateObject("AcroExch.AVD oc")
   Â
    'Check if the object was created.
    If Err.Number <> 0 Then
      MsgBox "Could not create the AVDoc object!", vbCritical, "Object error"
      'Release the objects and exit.
      Set objAcroAVDoc = Nothing
      Set objAcroApp = Nothing
      Exit Sub
    End If
   Â
    On Error GoTo 0
   Â
    'Open the PDF file.
    If objAcroAVDoc.Open(strPDFPa th, "") = True Then
     Â
      'Set the PDDoc object.
      Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
     Â
      'Set the JS Object - Java Script Object.
      Set objJSO = objAcroPDDoc.GetJSObject
     Â
      On Error Resume Next
     Â
      'Fill the form fields.
      For j = 1 To 10
       Â
        objJSO.GetField(strFieldNa mes(j)).Va lue = CStr(shWrite.Cells(i, j + 1).Value)
       Â
        If Err.Number <> 0 Then
         Â
          'Close the form without saving the changes.
          objAcroAVDoc.Close True
         Â
          'Close the Acrobat application.
          objAcroApp.Exit
         Â
          'Inform the user about the error.
          MsgBox "The field """ & strFieldNames(j) & """ could not be found!", vbCritical, "Field error"
         Â
          'Release the objects and exit.
          Set objJSO = Nothing
          Set objAcroPDDoc = Nothing
          Set objAcroAVDoc = Nothing
          Set objAcroApp = Nothing
          Exit Sub
         Â
        End If
      Next j
     Â
      'Fill the checkbox field.
      If shWrite.Cells(i, j + 1).Value = "True" Then
        objJSO.GetField(strFieldNa mes(11)).V alue = "Yes"
      End If
     Â
      On Error GoTo 0
     Â
      'Create the output path, which will be like C:\Users\Christos\Desktop\ Forms\01) First Name Last Name.pdf.
      With shWrite
        If i - 3 < 10 Then
          strPDFOutPath = ThisWorkbook.Path & "\Forms\0" & i - 3 & ") " & .Cells(i, 2).Value & " " & .Cells(i, 3).Value & ".pdf"
        Else
          strPDFOutPath = ThisWorkbook.Path & "\Forms\" & i - 3 & ") " & .Cells(i, 2).Value & " " & .Cells(i, 3).Value & ".pdf"
        End If
      End With
     Â
      'Save the form as new PDF file.
      objAcroPDDoc.Save 1, strPDFOutPath
 Â
      'Close the form without saving the changes.
      objAcroAVDoc.Close True
     Â
      'Close the Acrobat application.
      objAcroApp.Exit
       Â
      'Release the objects.
      Set objJSO = Nothing
      Set objAcroPDDoc = Nothing
      Set objAcroAVDoc = Nothing
      Set objAcroApp = Nothing
     Â
    Else
   Â
      MsgBox "Could not open the file!", vbCritical, "File error"
     Â
      'Close the Acrobat application.
      objAcroApp.Exit
     Â
      'Release the objects and exit.
      Set objAcroAVDoc = Nothing
      Set objAcroApp = Nothing
      Exit Sub
     Â
    End If
   Â
  Next i
 Â
  'Enable the screen.
  Application.ScreenUpdating = True
 Â
  'Inform the user that forms were filled.
  MsgBox "All forms were created successfully!", vbInformation, "Finished"
 Â
End Sub
Code No. 2:
Option Explicit
Sub ReadPDFForms()
 Â
  '------------------------- ---------- ---------- ---------- ---------- ---------- ---------- -
  'This macro loops through all the files of the specified folder (Forms). If the file
  'is PDF (PDF form here) the macro opens the file, reads specific fields the file
  'and writes the values in the sheet Read.
   Â
  'The code uses late binding, so no reference to external library is required.
  'However, the code works ONLY with Adobe Professional, so don't try to use it with
  'Adobe Reader because you will get an "ActiveX component can't create object" error.
 Â
  'Declaring the necessary variables.
  Dim strFormsFolder      As String
  Dim strFieldNames(1 To 7)  As String
  Dim objFSO          As Object
  Dim objSourceFolder     As Object
  Dim objFileItem       As Object
  Dim j            As Integer
  Dim LastRow         As Long
  Dim objAcroApp        As Object
  Dim objAcroAVDoc       As Object
  Dim objAcroPDDoc       As Object
  Dim objJSO          As Object
  Dim strPDFOutPath      As String
     Â
  'Disable screen flickering.
  Application.ScreenUpdating = False
   Â
  'Specify the folder that contains the PDF forms.
  'Full path example (note the \ at the end):
  'strPDFPath = "C:\Users\Christos\Desktop \Forms\"
  'Using workbook path:
  strFormsFolder = ThisWorkbook.Path & "\Forms\"
 Â
  'Set the required field names in the PDF form.
  strFieldNames(1) = "First Name"
  strFieldNames(2) = "Last Name"
  strFieldNames(3) = "City"
  strFieldNames(4) = "Country"
  strFieldNames(5) = "E-mail"
  strFieldNames(6) = "Type Of Registration"
  strFieldNames(7) = "Previous Attendee"
 Â
  On Error Resume Next
 Â
  'Create the File System object.
  Set objFSO = CreateObject("Scripting.Fi leSystemOb ject")
 Â
  'Check if the object was created.
  If Err.Number <> 0 Then
    MsgBox "Could not create the File System object!", vbCritical, "Object error"
    'Release the object and exit.
    Set objFSO = Nothing
    Exit Sub
  End If
  On Error GoTo 0
         Â
  'Get information about the Forms folder.
  Set objSourceFolder = objFSO.GetFolder(strFormsF older)
 Â
  'Loop through all the files found in the folder Forms.
  For Each objFileItem In objSourceFolder.Files
   Â
    'Check if the file is pdf.
    If LCase(Right(objFileItem.Pa th, 3)) = "pdf" Then
     Â
      'Find the last row of data in sheet Read.
      With shRead
        .Activate
        LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
      End With
   Â
      On Error Resume Next
     Â
      'Initialize Acrobat by creating the App object.
      Set objAcroApp = CreateObject("AcroExch.App ")
     Â
      'Check if the object was created.
      If Err.Number <> 0 Then
        MsgBox "Could not create the App object!", vbCritical, "Object error"
        'Release the objects and exit.
        Set objAcroApp = Nothing
        Set objFileItem = Nothing
        Set objSourceFolder = Nothing
        Set objFSO = Nothing
        Exit Sub
      End If
     Â
      'Create the AVDoc object.
      Set objAcroAVDoc = CreateObject("AcroExch.AVD oc")
     Â
      'Check if the object was created.
      If Err.Number <> 0 Then
        MsgBox "Could not create the AVDoc object!", vbCritical, "Object error"
        'Release the objects and exit.
        Set objAcroAVDoc = Nothing
        Set objAcroApp = Nothing
        Set objFileItem = Nothing
        Set objSourceFolder = Nothing
        Set objFSO = Nothing
        Exit Sub
      End If
     Â
      On Error GoTo 0
   Â
      'Open the PDF file.
      If objAcroAVDoc.Open(objFileI tem.Path, "") = True Then
     Â
        'Set the PDDoc object.
        Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
       Â
        'Set the JS Object - Java Script Object.
        Set objJSO = objAcroPDDoc.GetJSObject
       Â
        'Create a counter in sheet Read (counts each PDF file).
        shRead.Cells(LastRow + 1, 1).Value = LastRow - 2
       Â
        On Error Resume Next
       Â
        'Read the form fields.
        For j = 1 To 6
         Â
          shRead.Cells(LastRow + 1, j + 1).Value = objJSO.GetField(strFieldNa mes(j)).Va lue
         Â
          If Err.Number <> 0 Then
           Â
            'Close the form without saving the changes.
            objAcroAVDoc.Close True
           Â
            'Close the Acrobat application.
            objAcroApp.Exit
           Â
            'Inform the user about the error.
            MsgBox "The field """ & strFieldNames(j) & """ could not be found!", vbCritical, "Field error"
           Â
            'Release the objects and exit.
            Set objJSO = Nothing
            Set objAcroPDDoc = Nothing
            Set objAcroAVDoc = Nothing
            Set objAcroApp = Nothing
            Set objFileItem = Nothing
            Set objSourceFolder = Nothing
            Set objFSO = Nothing
            Exit Sub
           Â
          End If
        Next j
       Â
        'Read the checkbox field.
        If objJSO.GetField(strFieldNa mes(7)).Va lue = "Yes" Then
          shRead.Cells(LastRow + 1, j + 1).Value = "True"
        Else
          shRead.Cells(LastRow + 1, j + 1).Value = "False"
        End If
       Â
        On Error GoTo 0
       Â
        'Close the PDF file without saving the changes.
        objAcroAVDoc.Close True
       Â
        'Close the Acrobat application.
        objAcroApp.Exit
       Â
        'Release the objects.
        Set objJSO = Nothing
        Set objAcroPDDoc = Nothing
        Set objAcroAVDoc = Nothing
        Set objAcroApp = Nothing
 Â
      Else
     Â
        MsgBox "Could not open the file!", vbCritical, "File error"
       Â
        'Close the Acrobat application.
        objAcroApp.Exit
     Â
        'Release the objects abd exit.
        Set objAcroAVDoc = Nothing
        Set objAcroApp = Nothing
        Set objFileItem = Nothing
        Set objSourceFolder = Nothing
        Set objFSO = Nothing
       Â
      End If
   Â
    End If
   Â
    'Renew the last row value.
    LastRow = LastRow + 1
     Â
  Next objFileItem
 Â
  'Release the objects.
  Set objFileItem = Nothing
  Set objSourceFolder = Nothing
  Set objFSO = Nothing
 Â
  'Adjust the columns' width.
  shRead.Columns("A:H").Auto Fit
 Â
  'Enable the screen.
  Application.ScreenUpdating = True
 Â
  'Inform the user that the data acquisition finished.
  MsgBox "All data from the forms were retrieved successfully!", vbInformation, "Finished"
 Â
End Sub
In addition, I have anothe rcode (Code No. 2), that pushes the data from the PDF Forms, back into the excel file.
Instead of doing these 2 things from/to Excel, I want to do it from my MS access database (let's say a table called "Data", with the same fields as the PDF Form fields), but I don't know how/where to change the code.
Any help would be greatly appreciated!
Code No. 1:
Option Explicit
Sub WritePDFForms()
  Â
  'Declaring the necessary variables.
  Dim strPDFPath        As String
  Dim strFieldNames(1 To 11)  As String
  Dim i            As Long
  Dim j            As Integer
  Dim LastRow         As Long
  Dim objAcroApp        As Object
  Dim objAcroAVDoc       As Object
  Dim objAcroPDDoc       As Object
  Dim objJSO          As Object
  Dim strPDFOutPath      As String
     Â
  'Disable screen flickering.
  Application.ScreenUpdating
 Â
  'Specify the path of the sample PDF form.
  'Full path example:
  'strPDFPath = "C:\Users\Christos\Desktop
  'Using workbook path:
  strPDFPath = ThisWorkbook.Path & "\" & "Test Form.pdf"
 Â
  'Set the required field names in the PDF form.
  strFieldNames(1) = "First Name"
  strFieldNames(2) = "Last Name"
  strFieldNames(3) = "Street Address"
  strFieldNames(4) = "City"
  strFieldNames(5) = "State"
  strFieldNames(6) = "Zip Code"
  strFieldNames(7) = "Country"
  strFieldNames(8) = "E-mail"
  strFieldNames(9) = "Phone Number"
  strFieldNames(10) = "Type Of Registration"
  strFieldNames(11) = "Previous Attendee"
 Â
  'Find the last row of data in sheet Write.
  With shWrite
    .Activate
    LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
  End With
 Â
  'Loop through all rows of sheet Write and use the data to fill the PDF form.
  For i = 4 To LastRow
 Â
    On Error Resume Next
   Â
    'Initialize Acrobat by creating the App object.
    Set objAcroApp = CreateObject("AcroExch.App
   Â
    'Check if the object was created.
    If Err.Number <> 0 Then
      MsgBox "Could not create the App object!", vbCritical, "Object error"
      'Release the object and exit.
      Set objAcroApp = Nothing
      Exit Sub
    End If
   Â
    'Create the AVDoc object.
    Set objAcroAVDoc = CreateObject("AcroExch.AVD
   Â
    'Check if the object was created.
    If Err.Number <> 0 Then
      MsgBox "Could not create the AVDoc object!", vbCritical, "Object error"
      'Release the objects and exit.
      Set objAcroAVDoc = Nothing
      Set objAcroApp = Nothing
      Exit Sub
    End If
   Â
    On Error GoTo 0
   Â
    'Open the PDF file.
    If objAcroAVDoc.Open(strPDFPa
     Â
      'Set the PDDoc object.
      Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
     Â
      'Set the JS Object - Java Script Object.
      Set objJSO = objAcroPDDoc.GetJSObject
     Â
      On Error Resume Next
     Â
      'Fill the form fields.
      For j = 1 To 10
       Â
        objJSO.GetField(strFieldNa
       Â
        If Err.Number <> 0 Then
         Â
          'Close the form without saving the changes.
          objAcroAVDoc.Close True
         Â
          'Close the Acrobat application.
          objAcroApp.Exit
         Â
          'Inform the user about the error.
          MsgBox "The field """ & strFieldNames(j) & """ could not be found!", vbCritical, "Field error"
         Â
          'Release the objects and exit.
          Set objJSO = Nothing
          Set objAcroPDDoc = Nothing
          Set objAcroAVDoc = Nothing
          Set objAcroApp = Nothing
          Exit Sub
         Â
        End If
      Next j
     Â
      'Fill the checkbox field.
      If shWrite.Cells(i, j + 1).Value = "True" Then
        objJSO.GetField(strFieldNa
      End If
     Â
      On Error GoTo 0
     Â
      'Create the output path, which will be like C:\Users\Christos\Desktop\
      With shWrite
        If i - 3 < 10 Then
          strPDFOutPath = ThisWorkbook.Path & "\Forms\0" & i - 3 & ") " & .Cells(i, 2).Value & " " & .Cells(i, 3).Value & ".pdf"
        Else
          strPDFOutPath = ThisWorkbook.Path & "\Forms\" & i - 3 & ") " & .Cells(i, 2).Value & " " & .Cells(i, 3).Value & ".pdf"
        End If
      End With
     Â
      'Save the form as new PDF file.
      objAcroPDDoc.Save 1, strPDFOutPath
 Â
      'Close the form without saving the changes.
      objAcroAVDoc.Close True
     Â
      'Close the Acrobat application.
      objAcroApp.Exit
       Â
      'Release the objects.
      Set objJSO = Nothing
      Set objAcroPDDoc = Nothing
      Set objAcroAVDoc = Nothing
      Set objAcroApp = Nothing
     Â
    Else
   Â
      MsgBox "Could not open the file!", vbCritical, "File error"
     Â
      'Close the Acrobat application.
      objAcroApp.Exit
     Â
      'Release the objects and exit.
      Set objAcroAVDoc = Nothing
      Set objAcroApp = Nothing
      Exit Sub
     Â
    End If
   Â
  Next i
 Â
  'Enable the screen.
  Application.ScreenUpdating
 Â
  'Inform the user that forms were filled.
  MsgBox "All forms were created successfully!", vbInformation, "Finished"
 Â
End Sub
Code No. 2:
Option Explicit
Sub ReadPDFForms()
 Â
  '-------------------------
  'This macro loops through all the files of the specified folder (Forms). If the file
  'is PDF (PDF form here) the macro opens the file, reads specific fields the file
  'and writes the values in the sheet Read.
   Â
  'The code uses late binding, so no reference to external library is required.
  'However, the code works ONLY with Adobe Professional, so don't try to use it with
  'Adobe Reader because you will get an "ActiveX component can't create object" error.
 Â
  'Declaring the necessary variables.
  Dim strFormsFolder      As String
  Dim strFieldNames(1 To 7)  As String
  Dim objFSO          As Object
  Dim objSourceFolder     As Object
  Dim objFileItem       As Object
  Dim j            As Integer
  Dim LastRow         As Long
  Dim objAcroApp        As Object
  Dim objAcroAVDoc       As Object
  Dim objAcroPDDoc       As Object
  Dim objJSO          As Object
  Dim strPDFOutPath      As String
     Â
  'Disable screen flickering.
  Application.ScreenUpdating
   Â
  'Specify the folder that contains the PDF forms.
  'Full path example (note the \ at the end):
  'strPDFPath = "C:\Users\Christos\Desktop
  'Using workbook path:
  strFormsFolder = ThisWorkbook.Path & "\Forms\"
 Â
  'Set the required field names in the PDF form.
  strFieldNames(1) = "First Name"
  strFieldNames(2) = "Last Name"
  strFieldNames(3) = "City"
  strFieldNames(4) = "Country"
  strFieldNames(5) = "E-mail"
  strFieldNames(6) = "Type Of Registration"
  strFieldNames(7) = "Previous Attendee"
 Â
  On Error Resume Next
 Â
  'Create the File System object.
  Set objFSO = CreateObject("Scripting.Fi
 Â
  'Check if the object was created.
  If Err.Number <> 0 Then
    MsgBox "Could not create the File System object!", vbCritical, "Object error"
    'Release the object and exit.
    Set objFSO = Nothing
    Exit Sub
  End If
  On Error GoTo 0
         Â
  'Get information about the Forms folder.
  Set objSourceFolder = objFSO.GetFolder(strFormsF
 Â
  'Loop through all the files found in the folder Forms.
  For Each objFileItem In objSourceFolder.Files
   Â
    'Check if the file is pdf.
    If LCase(Right(objFileItem.Pa
     Â
      'Find the last row of data in sheet Read.
      With shRead
        .Activate
        LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
      End With
   Â
      On Error Resume Next
     Â
      'Initialize Acrobat by creating the App object.
      Set objAcroApp = CreateObject("AcroExch.App
     Â
      'Check if the object was created.
      If Err.Number <> 0 Then
        MsgBox "Could not create the App object!", vbCritical, "Object error"
        'Release the objects and exit.
        Set objAcroApp = Nothing
        Set objFileItem = Nothing
        Set objSourceFolder = Nothing
        Set objFSO = Nothing
        Exit Sub
      End If
     Â
      'Create the AVDoc object.
      Set objAcroAVDoc = CreateObject("AcroExch.AVD
     Â
      'Check if the object was created.
      If Err.Number <> 0 Then
        MsgBox "Could not create the AVDoc object!", vbCritical, "Object error"
        'Release the objects and exit.
        Set objAcroAVDoc = Nothing
        Set objAcroApp = Nothing
        Set objFileItem = Nothing
        Set objSourceFolder = Nothing
        Set objFSO = Nothing
        Exit Sub
      End If
     Â
      On Error GoTo 0
   Â
      'Open the PDF file.
      If objAcroAVDoc.Open(objFileI
     Â
        'Set the PDDoc object.
        Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
       Â
        'Set the JS Object - Java Script Object.
        Set objJSO = objAcroPDDoc.GetJSObject
       Â
        'Create a counter in sheet Read (counts each PDF file).
        shRead.Cells(LastRow + 1, 1).Value = LastRow - 2
       Â
        On Error Resume Next
       Â
        'Read the form fields.
        For j = 1 To 6
         Â
          shRead.Cells(LastRow + 1, j + 1).Value = objJSO.GetField(strFieldNa
         Â
          If Err.Number <> 0 Then
           Â
            'Close the form without saving the changes.
            objAcroAVDoc.Close True
           Â
            'Close the Acrobat application.
            objAcroApp.Exit
           Â
            'Inform the user about the error.
            MsgBox "The field """ & strFieldNames(j) & """ could not be found!", vbCritical, "Field error"
           Â
            'Release the objects and exit.
            Set objJSO = Nothing
            Set objAcroPDDoc = Nothing
            Set objAcroAVDoc = Nothing
            Set objAcroApp = Nothing
            Set objFileItem = Nothing
            Set objSourceFolder = Nothing
            Set objFSO = Nothing
            Exit Sub
           Â
          End If
        Next j
       Â
        'Read the checkbox field.
        If objJSO.GetField(strFieldNa
          shRead.Cells(LastRow + 1, j + 1).Value = "True"
        Else
          shRead.Cells(LastRow + 1, j + 1).Value = "False"
        End If
       Â
        On Error GoTo 0
       Â
        'Close the PDF file without saving the changes.
        objAcroAVDoc.Close True
       Â
        'Close the Acrobat application.
        objAcroApp.Exit
       Â
        'Release the objects.
        Set objJSO = Nothing
        Set objAcroPDDoc = Nothing
        Set objAcroAVDoc = Nothing
        Set objAcroApp = Nothing
 Â
      Else
     Â
        MsgBox "Could not open the file!", vbCritical, "File error"
       Â
        'Close the Acrobat application.
        objAcroApp.Exit
     Â
        'Release the objects abd exit.
        Set objAcroAVDoc = Nothing
        Set objAcroApp = Nothing
        Set objFileItem = Nothing
        Set objSourceFolder = Nothing
        Set objFSO = Nothing
       Â
      End If
   Â
    End If
   Â
    'Renew the last row value.
    LastRow = LastRow + 1
     Â
  Next objFileItem
 Â
  'Release the objects.
  Set objFileItem = Nothing
  Set objSourceFolder = Nothing
  Set objFSO = Nothing
 Â
  'Adjust the columns' width.
  shRead.Columns("A:H").Auto
 Â
  'Enable the screen.
  Application.ScreenUpdating
 Â
  'Inform the user that the data acquisition finished.
  MsgBox "All data from the forms were retrieved successfully!", vbInformation, "Finished"
 Â
End Sub
Any reason why you are not constructing an Access report and print it as a PDF ? and why you read back the PDF?
This question needs an answer!
Become an EE member today
7 DAY FREE TRIALMembers can start a 7-Day Free trial then enjoy unlimited access to the platform.
View membership options
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.