Sample code for 30+ languages & platforms
Visual Basic 6.0 Requires Chilkat v11.7.0+

Extract a PDF Table with Merged Cells

See more PDF Text Extraction Examples

Demonstrates how merged cells are reported by the "tables" operation: a header cell that spans several columns has colSpan greater than 1, and a row label that spans several rows has rowSpan greater than 1. Also shows the minRows and minColumns options.

Chilkat Visual Basic 6.0 Downloads

Visual Basic 6.0
Dim success As Long
success = 0

'  This example requires the Chilkat API to have been previously unlocked.
'  See Global Unlock Sample for sample code.

'  The PDF used in this example is available at spans_table.pdf

Dim pdf As New ChilkatPdf
success = pdf.LoadFile("qa_data/pdf/spans_table.pdf")
If (success = 0) Then
    Debug.Print pdf.LastErrorText
    Exit Sub
End If

Dim json As New ChilkatJsonObject
Dim jsonOut As New ChilkatJsonObject

'  Grids smaller than minRows x minColumns are not reported as tables.  The defaults are 2 and 2.
'  Setting them higher skips small boxes that are not really tables.
success = json.UpdateInt("minRows",3)
success = json.UpdateInt("minColumns",3)

success = pdf.ExtractText("tables",json,jsonOut)
If (success = 0) Then
    Debug.Print pdf.LastErrorText
    Exit Sub
End If

Debug.Print "Tables found: " & jsonOut.IntOf("count")
Debug.Print jsonOut.IntOf("tables[0].rows") & " rows x " & jsonOut.IntOf("tables[0].columns") & " columns"

'  A merged cell is reported once, at its top-left position, with its spans.
'  The positions it covers have no cell of their own.
Dim rowSpan As Long
Dim colSpan As Long
Dim j As Long
j = 0
Dim count_j As Long
count_j = jsonOut.SizeOfArray("tables[0].cells")
Do While j < count_j
    jsonOut.J = j
    rowSpan = jsonOut.IntOf("tables[0].cells[j].rowSpan")
    colSpan = jsonOut.IntOf("tables[0].cells[j].colSpan")
    If ((rowSpan > 1) Or (colSpan > 1)) Then
        Debug.Print "row " & jsonOut.IntOf("tables[0].cells[j].row") & ", col " & jsonOut.IntOf("tables[0].cells[j].col") & ": """ & jsonOut.StringOf("tables[0].cells[j].text") _
             & """ spans " & rowSpan & " row(s) and " & colSpan & " column(s)"
    End If

    j = j + 1
Loop

'  Sample output:

'  Tables found: 1
'  6 rows x 6 columns
'  row 0, col 0: "Area" spans 2 row(s) and 1 column(s)
'  row 0, col 1: "City" spans 2 row(s) and 1 column(s)
'  row 0, col 2: "First Half" spans 1 row(s) and 2 column(s)
'  row 0, col 4: "Second Half" spans 1 row(s) and 2 column(s)
'  row 2, col 0: "East" spans 2 row(s) and 1 column(s)
'  row 4, col 0: "West" spans 2 row(s) and 1 column(s)