Intégration dans un module Dolibarr

Vous développez un module Dolibarr et vous souhaitez extraire des données d'un fichier PDF en vous appuyant sur le serveur DocWizOn ? ScanConnect factorise le code de connexion pour vous. Suivez ce guide pour l'intégrer dans votre module.

Schéma de principe illustrant la factorisation du code de connexion avec le serveur DocWizOn via ScanConnect

Déclarer la dépendance

Ajoutez ScanConnect dans les dépendances de votre module, dans le fichier core/modules/modVotreModule.class.php :

// List of module class names that must be enabled if this module is enabled
$this->depends = ['...', 'modScanConnect'];

Inclure et instancier ScanConnect

Ajoutez l'inclusion de la classe ScanConnect dans votre code :

dol_include_once('/scanconnect/class/scanConnect.class.php');

Puis instanciez un objet scanConnect avec les paramètres de votre analyse :

$scanConnect = new scanConnect([
    'db'         => $db,
    'srcFileName' => '/var/www/dolibarr/documents/mon-fichier.pdf',  // Fichier PDF à analyser
    'ymlFileName' => '/var/www/dolibarr/documents/masque.yaml',      // Facultatif : masque d'extraction
    'profile'    => 'raw',            // Profil de document
    'action'     => 'default',        // Action à exécuter
    'lang'       => 'fra',            // Langue du document
    'pluginName' => 'MonPlugin-1.0'   // Nom de votre module
]);

Paramètres

Paramètre Obligatoire Description
db Oui Objet de connexion à la base de données Dolibarr
srcFileName Oui Chemin absolu vers le fichier PDF à analyser
ymlFileName Non Chemin vers le fichier YAML décrivant le masque d'extraction de données
profile Oui Profil de document pris en compte par le serveur DocWizOn
action Oui Action à exécuter (actuellement seule default est disponible)
lang Oui Code de la langue du document (ex. fra pour le français)
pluginName Oui Identifiant de votre module (nom et version)

Afficher les informations du serveur

Pour afficher l'état du serveur DocWizOn et les informations de votre compte, utilisez la méthode getInfoAboutWebservice() :

<div id="ocr-server-card" style="min-height: 40px; padding: 2em; border: 1px solid #888; background: #f8f8f8;">
    <?php print $scanConnect->getInfoAboutWebservice(); ?>
</div>

Cette méthode génère un bloc HTML contenant les informations de connexion :

Boîte d'information affichant l'état du serveur DocWizOn et les détails du compte

Lancer l'analyse

Appelez la méthode runAnalyze() pour envoyer le fichier PDF au serveur DocWizOn :

$res = $scanConnect->runAnalyze();

En cas d'erreur, consultez la propriété $scanConnect->error pour obtenir le message d'erreur.

Récupérer le résultat

Une fois l'analyse terminée, récupérez les données extraites avec getResult() :

$result = $scanConnect->getResult();

Exemple complet

Voici un exemple complet d'un script PHP utilisant ScanConnect dans un contexte Dolibarr :

<?php
$res = 0;
if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
    $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
}
$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME'];
$tmp2 = realpath(__FILE__);
$i = strlen($tmp) - 1;
$j = strlen($tmp2) - 1;
while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {
    $i--; $j--;
}
if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) {
    $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php";
}
if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) {
    $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";
}
if (!$res && file_exists("../main.inc.php")) {
    $res = @include "../main.inc.php";
}
if (!$res && file_exists("../../main.inc.php")) {
    $res = @include "../../main.inc.php";
}
if (!$res && file_exists("../../../main.inc.php")) {
    $res = @include "../../../main.inc.php";
}
if (!$res) {
    die("Include of main fails");
}

// Début du code ScanConnect
dol_include_once('/scanconnect/class/scanConnect.class.php');

$scanConnect = new scanConnect([
    'db'         => $db,
    'srcFileName' => '/var/www/dolibarr/documents/marathon.pdf',
    'ymlFileName' => '/var/www/dolibarr/documents/marathon.yaml',
    'profile'    => 'raw',
    'action'     => 'default',
    'lang'       => 'fra',
    'pluginName' => 'SuperTest-1.0'
]);

print "<p>File = " . $scanConnect->srcFileName . "</p>";
$res = $scanConnect->runAnalyze();
print $scanConnect->error;

if ($res) {
    print "<p>retour positif = " . $res . "</p>";
    print "<pre>";
    print json_encode($scanConnect->getResult(), JSON_PRETTY_PRINT);
    print "</pre>";
} else {
    print "<p>ERREUR:</p>";
    print $scanConnect->error;
}

Note : Le bloc d'initialisation en début de script est le pattern standard Dolibarr pour inclure main.inc.php. Dans votre propre module, ce code est déjà présent dans vos fichiers PHP.