Visual FoxPro Requires Chilkat v11.7.0+
Visual FoxPro
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 FoxPro Downloads
LOCAL lnSuccess
LOCAL loPdf
LOCAL loJson
LOCAL loJsonOut
LOCAL lnRowSpan
LOCAL lnColSpan
LOCAL j
LOCAL lnCount_j
lnSuccess = 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
loPdf = CreateObject('Chilkat.Pdf')
lnSuccess = loPdf.LoadFile("qa_data/pdf/spans_table.pdf")
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
CANCEL
ENDIF
loJson = CreateObject('Chilkat.JsonObject')
loJsonOut = CreateObject('Chilkat.JsonObject')
* 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.
loJson.UpdateInt("minRows",3)
loJson.UpdateInt("minColumns",3)
lnSuccess = loPdf.ExtractText("tables",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
CANCEL
ENDIF
? "Tables found: " + STR(loJsonOut.IntOf("count"))
? STR(loJsonOut.IntOf("tables[0].rows")) + " rows x " + STR(loJsonOut.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.
j = 0
lnCount_j = loJsonOut.SizeOfArray("tables[0].cells")
DO WHILE j < lnCount_j
loJsonOut.J = j
lnRowSpan = loJsonOut.IntOf("tables[0].cells[j].rowSpan")
lnColSpan = loJsonOut.IntOf("tables[0].cells[j].colSpan")
IF ((lnRowSpan > 1) OR (lnColSpan > 1)) THEN
? "row " + STR(loJsonOut.IntOf("tables[0].cells[j].row")) + ", col " + STR(loJsonOut.IntOf("tables[0].cells[j].col")) + ': "' + loJsonOut.StringOf("tables[0].cells[j].text") + '" spans ' + STR(lnRowSpan) + " row(s) and " + STR(lnColSpan) + " column(s)"
ENDIF
j = j + 1
ENDDO
* 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)
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut