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

PDF to Markdown Options: Page Breaks, Images, Tables, Emphasis, Heading Levels

See more PDF Text Extraction Examples

Demonstrates the options of the "markdown" operation: pageBreaks (comment, rule or none), images (placeholder or none), tables (ruled or none), emphasis, and maxHeadingLevel.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loPdf
LOCAL loJson
LOCAL loSbMarkdown
LOCAL loJsonOut

lnSuccess = 0

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

*  The two-page PDF used in this example is available at markdown_options.pdf

loPdf = CreateObject('Chilkat.Pdf')
lnSuccess = loPdf.LoadFile("qa_data/pdf/markdown_options.pdf")
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    CANCEL
ENDIF

loJson = CreateObject('Chilkat.JsonObject')
loSbMarkdown = CreateObject('Chilkat.StringBuilder')
loJsonOut = CreateObject('Chilkat.JsonObject')

*  First with the default options.
lnSuccess = loPdf.ExtractTextSb("markdown",loJson,loSbMarkdown,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loSbMarkdown
    RELEASE loJsonOut
    CANCEL
ENDIF

? "---- default options ----"
? loSbMarkdown.GetAsString()

*  Now change the options:

*  pageBreaks: "comment" (the default) separates pages with <!-- page N -->,
*  "rule" separates them with a horizontal rule (---), and "none" runs the pages together.
loJson.UpdateString("pageBreaks","rule")

*  images: "placeholder" (the default) marks where each image sits with ![image](page-1-image-1);
*  "none" leaves images out.
loJson.UpdateString("images","none")

*  tables: "ruled" (the default) converts tables that have drawn cell borders into Markdown tables;
*  "none" returns their cells as plain text.
loJson.UpdateString("tables","none")

*  emphasis: false leaves out the ** and * markers for bold and italic.
loJson.UpdateBool("emphasis",0)

*  maxHeadingLevel: inferred headings deeper than this level are folded into this level.
*  The PDF has three heading levels; with maxHeadingLevel 2 the third level becomes ##.
loJson.UpdateInt("maxHeadingLevel",2)

loSbMarkdown.Clear()
lnSuccess = loPdf.ExtractTextSb("markdown",loJson,loSbMarkdown,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loSbMarkdown
    RELEASE loJsonOut
    CANCEL
ENDIF

? "---- custom options ----"
? loSbMarkdown.GetAsString()

*  Sample output:

*  ---- default options ----
*  <!-- page 1 -->
*  
*  # Community Garden Handbook
*  
*  ## Plots
*  
*  ### Plot Sizes
*  
*  Plots come in two sizes. A **full plot** is twenty feet by ten feet; a **half plot** is ten feet square. New gardeners are *strongly encouraged* to start with a half plot.
*  
*  ![image](page-1-image-1)
*  
*  ### Plot Fees
*  
*  | Plot | Size | Annual Fee |
*  | --- | --- | --- |
*  | Full | 20 x 10 ft | $60 |
*  | Half | 10 x 10 ft | $35 |
*  
*  <!-- page 2 -->
*  
*  ## Watering
*  
*  ### Schedule
*  
*  The shared tanks are filled on Monday and Thursday mornings. Please water by hand from the tanks rather than running a hose from the street tap, which is metered.
*  
*  ### Dry Spells
*  
*  During a declared drought the committee may limit watering to **two days a week**. Notices are posted on the shed door and sent by e-mail.
*  
*  ---- custom options ----
*  # Community Garden Handbook
*  
*  ## Plots
*  
*  ## Plot Sizes
*  
*  Plots come in two sizes. A full plot is twenty feet by ten feet; a half plot is ten feet square. New gardeners are strongly encouraged to start with a half plot.
*  
*  ## Plot Fees
*  
*  Plot Size Annual Fee
*  
*  Full 20 x 10 ft $60
*  
*  Half 10 x 10 ft $35
*  
*  ---
*  
*  ## Watering
*  
*  ## Schedule
*  
*  The shared tanks are filled on Monday and Thursday mornings. Please water by hand from the tanks rather than running a hose from the street tap, which is metered.
*  
*  ## Dry Spells
*  
*  During a declared drought the committee may limit watering to two days a week. Notices are posted on the shed door and sent by e-mail.

RELEASE loPdf
RELEASE loJson
RELEASE loSbMarkdown
RELEASE loJsonOut