Sample code for 30+ languages & platforms
Dart 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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // 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

  final pdf = CkPdf();
  try {
    pdf.loadFile('qa_data/pdf/markdown_options.pdf');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final json = CkJsonObject();
  final sbMarkdown = CkStringBuilder();
  final jsonOut = CkJsonObject();

  // First with the default options.
  try {
    pdf.extractTextSb('markdown', json, sbMarkdown, jsonOut);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('---- default options ----');
  print(sbMarkdown.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.
  json.updateString('pageBreaks', 'rule');

  // images: "placeholder" (the default) marks where each image sits with ![image](page-1-image-1);
  // "none" leaves images out.
  json.updateString('images', 'none');

  // tables: "ruled" (the default) converts tables that have drawn cell borders into Markdown tables;
  // "none" returns their cells as plain text.
  json.updateString('tables', 'none');

  // emphasis: false leaves out the ** and * markers for bold and italic.
  json.updateBool('emphasis', false);

  // 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 ##.
  json.updateInt('maxHeadingLevel', 2);

  sbMarkdown.clear();
  try {
    pdf.extractTextSb('markdown', json, sbMarkdown, jsonOut);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('---- custom options ----');
  print(sbMarkdown.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.
}