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

Search a PDF with a Regular Expression

See more PDF Text Extraction Examples

Demonstrates searching a PDF with a regular expression (regex: true), limiting the number of results (maxResults), and matching whole words only (wholeWord).

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 PDF used in this example is available at order_records.pdf

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

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

  // Find every order number.  With regex set to true, the query is a regular expression.
  json.updateString('query', 'ORD-[0-9]{4}-[0-9]{4}');
  json.updateBool('regex', true);
  // We only want the matched text, so no context is needed.
  json.updateInt('context', 0);

  try {
    pdf.extractText('search', json, jsonOut);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Order numbers found: ${jsonOut.intOf('count')}');
  var i = 0;
  var countI = jsonOut.sizeOfArray('matches');
  while (i < countI) {
    jsonOut.i = i;
    print(jsonOut.stringOf('matches[i].text'));
    i++;
  }

  // Find the e-mail addresses, but stop after the first three.
  json.updateString('query', '[a-z0-9._]+@[a-z]+[.][a-z]+');
  json.updateInt('maxResults', 3);
  try {
    pdf.extractText('search', json, jsonOut);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('First three e-mail addresses:');
  i = 0;
  countI = jsonOut.sizeOfArray('matches');
  while (i < countI) {
    jsonOut.i = i;
    print(jsonOut.stringOf('matches[i].text'));
    i++;
  }

  // wholeWord: true matches only whole words.  The word "cat" appears once in the PDF,
  // but it is also inside "catalog" and "category".
  json.delete('maxResults');
  json.updateBool('regex', false);
  json.updateString('query', 'cat');
  try {
    pdf.extractText('search', json, jsonOut);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Occurrences of cat (any): ${jsonOut.intOf('count')}');

  json.updateBool('wholeWord', true);
  try {
    pdf.extractText('search', json, jsonOut);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Occurrences of cat (whole word): ${jsonOut.intOf('count')}');

  // Sample output:

  // Order numbers found: 9
  // ORD-2026-0301
  // ORD-2026-0302
  // ORD-2026-0303
  // ORD-2026-0304
  // ORD-2026-0305
  // ORD-2026-0306
  // ORD-2026-0307
  // ORD-2026-0308
  // ORD-2026-0307
  // First three e-mail addresses:
  // alice.moore@example.com
  // bkumar@example.org
  // carla@example.net
  // Occurrences of cat (any): 3
  // Occurrences of cat (whole word): 1
}