-
À propos d'ABBYY FlexiCapture
- Nouveautés d'ABBYY FlexiCapture 12
- Types de documents traités à l'aide d'ABBYY FlexiCapture
- Brève description du traitement de document à l'aide d'ABBYY FlexiCapture
- Installation et exécution du programme
- Architecture d'ABBYY FlexiCapture
-
Configuration du programme
- Configuration d'ABBYY FlexiCapture
- Multi-tenant
-
Création d'un projet
- Propriétés de projets
- Variables d'environnement
- Importation d'image
- Types de lots
- Configuration des workflows
- Outils
- Priorité du lot par défaut
- Paramètres du SLA
- Rôles personnalisés de l'opérateur
- Paramètres d'enregistrement
- Téléchargement d'un projet vers le serveur d'application
- Tester un projet
- Paramètres des skins
- Qualité des images affichées
-
Définitions de document
- Création de définitions de document fixes
- Création d'une définition de document pour traiter des documents flexibles et non structurés
- Création d'une définition de document pour les documents ne nécessitant pas une extraction de données automatique
- Ensembles de documents
-
Les champs de définitions de documents
- Champ de saisie de texte
- Coches
- Groupes de coches
- Code barre
- Images
- Tableaux
- Groupe de champs
- Champ de service
- Champs d'index
- Lien vers un champ existant
- Champs sans région
- Création d'un champ comportant une région non rectangulaire
- Champs avec plusieurs instances
- Champ contenant plusieurs régions
- Modification du nom d'un champ
- Copie, déplacement et suppression de champs
- Exclusion d'une région de la reconnaissance
- Assistant de définition de document
- Modification et publication d'une Définition de Document
- Assemblage de documents multipages
- Propriétés de définitions de documents
- Propriétés d'une section de définition de document
- Validation par règle
- Configuration de l’exportation
- Configuration de la présentation des données dans la fenêtre de document
- Test de définitions de documents
- Localiser une Définition de document
-
Classification
- Scénarios de classification
- Profils de classification
- Équilibre précision/rappel
-
Création d'un classificateur
- Configuration du classificateur
- Configuration de votre classificateur et chargement des images
- Apprentissage des classificateurs
- Analyse des résultats de classification
- Improving your classifier
- Classification à partir de la base de données des entreprises
- Exportation et importation de classificateurs
- Mappage des catégories vers les sections de la définition de document
- Apprentissage d'extraction de champs
- Utilisation d'un projet configuré
-
ABBYY FlexiCapture pour factures
- Fonctionnalités de la reconnaissance et de l'extraction de données d'ABBYY FlexiCapture for Invoices
- Comment capturer des factures
-
Comment configurer un projet de capture de factures
- Paramètres de pays et de langues
- Connexion des bases de données d'entités commerciales et de fournisseurs
- Paramètres d'exportation de données
- Statut des documents des projets de ABBYY FlexiCapture for Invoices
- Formation d'ABBYY FlexiCapture for Invoices
- Règles
- Capturer des champs de facture supplémentaires
- Analogie des bons de commande
- Activer des fonctionnalités de programme supplémentaires pour les opérateurs
- Utiliser plusieurs Définitions de document
- Modifier les paramètres de facture des fichiers XML
- Mise à jour de la Définition de document pour les factures
- Systèmes fiscaux
- Caractéristiques techniques
- Capturing receipts
- Capturing purchase orders
- Using NLP to process unstructured documents
- Interface d'ABBYY FlexiCapture
-
Annexe
-
Utilisation de scripts sous ABBYY FlexiCapture
- Règles spécifiques aux scripts écrits en langages .Net
- Assemblages externes
- Modèle d'objet
-
Scripts permettant de personnaliser les étapes de traitement
-
Types de scripts
- Règle de script
- Script d'autocorrection
- Script d'exportation
- Script utilisateur (action personnalisée)
- Script d'assemblage de document
- Script de reconnaissance personnalisée
- Règle d'étape
- Scripts de traitement
- Script de mise à jour de jeu de données
- Script de validation de jeu de données
- Script de classification de documents
-
Gestionnaires d'événements
- Lot créé
- Lot supprimé
- Modification des paramètres du lot
- Modification de la structure d'un lot (page ajoutée/page supprimée/document ajouté/document supprimé)
- Pages déplacées
- Lot ouvert/fermé
- Vérification de l’intégrité du lot
- Modification de paramètres du document
- Modification de l'état du document
- Exportation terminée
- Scripté exécuté après la vérification des règles
- Avant l'association
- Requête de vérification de champs
-
Objets
- IActionResult
- IAssemblingError
- IAssemblingErrors
- IBatch
- IBatchCheckResults
- IBatchItem
- IBatchItems
- IBatchTypeClassifier
- IBatchTypeClassifierResult
- IBinarizationParams
- IBoxedBoolean
- ICharacterParams
- ICharactersParams
- ICheckmarkGroupValue
- ICheckmarkValue
- IDataSet
- IDataSetQuery
- IDataSetRecord
- IDocument
- IDocuments
- IDocumentExportResults
- IDocumentsExportResults
- IDocumentDefinitionInfo
- IDocumentDefinitionInfoArray
- IEditablePictureObject
- IExportFieldsToRedact
- IExportImageSavingOptions
- IField
- IFieldRegion
- IFieldRegions
- IFields
- IFlexiCaptureTools
- ILocalContrastParams
- IMatchedSectionInfo
- IMatchingInfo
- IPage
- IPageClassificationResult
- IPages
- IPictureObject
- IPictureObjectsInfo
- IPrincipal
- IPrincipals
- IProcessingCallback
- IProject
- IProperties
- IProperty
- IPropertyModificationInfo
- IRecordCheckResult
- IRecordset
- IRect
- IRects
- IRoutingRuleResult
- IRuleContext
- IRuleError
- IRuleErrors
- IRuleTag
- IRuleTags
- IScriptBinaryAttributes
- IScriptDefinitionContext
- ISectionDefinitionInfo
- ISectionDefinitionInfoArray
- IShadowsHighlightsParams
- IStageInfo
- IUserAttachment
- IUserAttachments
- IUserSessionInfo
- IValue
- IVARIANTArray
- TAssemlingErrorType
- TBatchItemType
- TColorToFilter
- TExportFieldType
- TExportType
- TImageCompressionType
- TPageClassificationType
- TPdfAVersion
- TPdfDocumentInfoType
- TPdfTextSearchAreaType
- TPrincipalType
- TProcessingPriority
- TPropertyType
- TRuleErrorType
- TStateType
- Exemples de scripts
- Noms internes des langues de reconnaissance
-
Types de scripts
-
Scripts de traitement des évènements de l'interface
-
Gestionnaires d'événements
- À la fermeture du document
- À la fermeture du projet
- À l'activation du document
- À l'activation du contrôle de champ
- Au retour de la tâche
- En cas de commande utilisateur
- À la désactivation du contrôle de champ
- À la fermeture du document
- À la fermeture de la tâche
- À la fermeture du projet
- À la modification de région
- À la modification du mode de la fenêtre Tâche
- À l'ouverture du document
- À la création de la fenêtre Tâche
- Au rejet de la tâche
- À la conception du contrôle de région
- À l'étape Envoyer vers
- À la validation du champ de texte
-
Objets
- IBoolean
- IBoxedFieldControl
- IDocumentEditor
- IDocumentItem
- IDocumentItems
- IDocumentsCollection
- IDocumentsWindow
- IDrawContext
- IErrorControl
- IErrorControls
- IErrorsWindow
- IFieldControl
- IFieldRegionControl
- IFieldRegionControls
- IFormWindow
- IImageWindow
- IMainMenu
- IMainWindow
- IMenu
- IMenuItem
- IPageControl
- IPageItem
- IPageItems
- IPagesCollection
- IPoint
- ISelection
- IShellRational
- IShellRect
- IShellRects
- ITaskWindow
- ITextEditor
- IToolbar
- IToolbarButton
- IToolbars
- TCommandBarType
- TCommandID
- TDockingType
- TDocumentState
- TErrorType
- TSelectionType
- TTaskWindowMode
- TTextSize
- TUserRole
- TWorkWindowType
-
Gestionnaires d'événements
- Script utilisateur pour le poste de vérification Web
-
Création d'un formulaire lisible par machine
- Formulaires lisibles par machine
- Éléments de formulaires lisibles par machine
- Méthodes de remplissage de formulaire
- Types de formulaires lisibles par machine
- Choix du type de formulaire adéquat
- Exigences générales pour les formulaires lisibles par machine
- Couleurs recommandées pour les formulaires simili détourés
-
Raccourcis clavier
- Raccourcis clavier de la station de configuration de projets
- Raccourcis clavier de la station de vérification
- Raccourcis clavier de la station de vérification des données
- Raccourcis clavier de l'éditeur de définition de document
- Raccourcis clavier de la fenêtre de vérification groupée
- Raccourcis clavier dans la fenêtre de vérification de champ
- Raccourcis
- Autres options
- Description des commandes du serveur de traitement
- Exemples de projets ABBYY FlexiCapture
- Langues de reconnaissance prises en charge
- Supported classifier languages
- Polices requises pour un rendu correct des caractères
- Types de textes pris en charge
- Types de codes barres pris en charge
- Formats d'entrée pris en charge
- Traiter des fichiers PDF
- Formats de fichiers d'exportation
- Formats de la date
- Caractères alphabétiques utilisés dans les expressions régulières
- Brevets
- Technologies tierces
- Glossaire
- Support technique
- Comment acheter ABBYY FlexiCapture
- Contrat de licence utilisateur final (CLUF)
-
Utilisation de scripts sous ABBYY FlexiCapture
Exemples de scripts décrivant une exportation
Récupération des valeurs de champ pendant une exportation
Cet exemple de code montre comment récupérer la valeur d'un champ pendant une exportation. Vous pouvez utiliser cette valeur pour nommer les fichiers dans lesquels les images ou les données sont exportées. S'il n'y a pas de champ de ce type dans le document, une erreur se produira.will occur.
Structure du document à exporter :
Section 1 Field1 … Group1 Field2 … … FieldN Section 2 Field1 … FieldK [VBScript] Dim field1Value, field2Value ' Récupère la valeur de Field1 dans la Section 1 if Not IsNull( me.Field( "Section 1\Field1" ).Value ) then field1Value = me.Field( "Section 1\Field1" ).Value end if ' Récupère la valeur de Field2 dans Group1 dans la Section 1 if Not IsNull( me.FIELD( "Section 1\Group1\Field2" ).Value ) then field2Value = me.Field( "Section 1\Group1\Field2" ).Value end if ' Récupère la valeur de Field1 dans Section 1 si la section comporte plusieurs instances if Not me.Field( "Section 1" ).Items Is Nothing then dim curPage for each curPage in me.Field( "Section 1" ).Items if Not curPage.Children Is Nothing then dim curField for each curField in curPage.Children if curField.Name = "Field1" And Not IsNull( curField.Value ) then field1Value = curField.Value exit for end if next end if next end if [JScript] // Récupère la valeur de Field1 dans Section 1 if( Field("Section 1\\Field1").Value != null ) { var field1Value = Field("Section 1\\Field1").Value; } // Récupère la valeur de Field2 dans Group1, Section 1 if( Field("Section 1\\Group1\\Field2").Value != null ) { var field2Value = Field("Section 1\\Group1\\Field2").Value; } // Récupère la valeur de Field1 dans Section 1 si la section comporte plusieurs instances if( Field( "Section 1" ).Items != null ) { var i, j; for( i = 0; i < Field( "Section 1" ).Items.Count; i++ ) { var curPage = Field( "Section 1" ).Items.Item( i ); if( curPage.Children != null ) { for( j = 0; j < curPage.Children.Count; j++ ) { var curField = curPage.Children.Item( j ); if( curField.Name == "Field1" && curField.Value != null ) { var field1Value = curField.Value; break; } } } } }
Exportation d'images de pages
Le code de cet exemple montre comment exporter des images de toutes les pages d'un document en utilisant le format de fichier requis, le système de couleurs requis et la résolution requise. Les images sont enregistrées page par page. Chaque page est donc stockée dans un fichier distinct.
Les fichiers de cet exemple sont nommés « page1.tif », « page2.tif », etc. Vous pouvez modifier le mécanisme de dénomination des fichiers si nécessaire. Par exemple, vous pouvez créer des noms de fichiers à partir de la valeur d'un champ.
[VBScript] dim fso, folderName set fso = CreateObject("Scripting.FileSystemObject") folderName = "d:\ExportImages" if Not fso.FolderExists( folderName ) then fso.CreateFolder folderName end if dim imageOptions set imageOptions = FCTools.NewImageSavingOptions imageOptions.Format = "tif" imageOptions.ColorType = "BlackAndWhite" imageOptions.Resolution = 600 dim i for i = 0 to me.Pages.Count - 1 dim fileName ' Définit l'extension et le nom souhaités pour le fichier, en fonction du format sélectionné fileName = fso.BuildPath( folderName, "page" & (i+1) & ".tif" ) me.Pages.Item(i).SaveAs fileName, imageOptions next [JScript] var fso = new ActiveXObject("Scripting.FileSystemObject"); var folderName = "d:\\ExportImages"; if( !fso.FolderExists( folderName ) ) { fso.CreateFolder( folderName ); } var imageOptions = FCTools.NewImageSavingOptions(); imageOptions.Format = "tif"; imageOptions.ColorType = "BlackAndWhite"; imageOptions.Resolution = 600; var i; for( i = 0; i < Pages.Count; i++ ) { // Définit l'extension et le nom souhaités pour le fichier, en fonction du format sélectionné var fileName = fso.BuildPath( folderName, "page" + (i+1) + ".tif" ); Pages.Item(i).SaveAs( fileName, imageOptions ); }
Exportation d'un tableau
Cet exemple montre comment exporter un tableau vers un fichier *.txt
[VBScript] dim fso, txtFile, fileName set fso = CreateObject("Scripting.FileSystemObject") fileName = "d:\TestExportTable.txt" set txtFile = fso.CreateTextFile( fileName, true ) txtFile.WriteLine "Table" dim table, row, cell, rowNumber set table = me.Field("Page 1\Table") rowNumber = 1 for each row in table.Items txtFile.WriteLine "RowNumber = " & rowNumber for each cell in row.Children txtFile.Write cell.Value & " " next txtFile.WriteBlankLines 1 rowNumber = rowNumber + 1 next txtFile.Close set txtFile = nothing set fso = nothing [JScript] var fso, txtFile, fileName; fso = new ActiveXObject("Scripting.FileSystemObject"); fileName = "d:\\TestExportTable1.txt"; txtFile = fso.CreateTextFile( fileName, true ); txtFile.WriteLine( "Table" ); var table, i, j; table = Field("Page 1\\Table"); var rows = table.Items; for( i = 0; i < rows.Count; i++ ) { txtFile.WriteLine( "RowNumber = " + ( i+1 ) ); var cells = rows.Item(i).Children; for( j = 0; j < cells.Count; j++ ) { txtFile.Write( cells.Item(j).Value + " " ); } txtFile.WriteBlankLines(1); } txtFile.Close();
Exportation d'un document quel que soit son niveau d'imbrication
Cet exemple montre comment exporter des champs d'un document, quel que soit son niveau d'imbrication, en utilisant des fonctions personnalisées, que vous créez vous-même, à partir du module d'exportation global. S'il vous faut exporter des champs d'un document présentant une imbrication variable, il est recommandé d'utiliser un composant COM externe (voir l'exemple suivant).
Code d'exportation de base
[VBScript]
Export.ExportDocument me, FCTools
[JScript]
Export.ExportDocument( this, FCTools );
Code des fonctions du module d'exportation global
[VBScript] ' La procédure effectue l'exportation : elle crée un dossier d'exportation et ' enregistre dans ce dernier des fichiers image de pages, le fichier texte contenant les champs du document, ' et des informations relatives au document Sub ExportDocument(ByRef docObj, ByRef FCTools) Dim folderName Dim txtFile, fileName Dim fso On Error Resume Next set fso = CreateObject("Scripting.FileSystemObject") ' création du dossier d'exportation folderName = CreateExportFolder(docObj.DefinitionName, fso) if Err.Number <> 0 then docObj.Action.Succeeded = false docObj.Action.ErrorMessage = "Error during create export folder: " + Err.Description Err.Clear Exit Subub End if ' exportation d'images ExportImages docObj, FCTools, folderName, fso if Err.Number <> 0 then docObj.Action.Succeeded = false docObj.Action.ErrorMessage = "Erreur lors de l'exportation d'images : " + Err.Description Err.Clear Exit Sub End if ' création du fichier texte fileName = fso.BuildPath(folderName, "doc.txt") Set txtFile = fso.CreateTextFile(fileName, True) ' exportation des informations concernant le document ExportDocInfo docObj, txtFile ' exportation des champs txtFile.WriteLine "Fields:" ExportFields docObj.Children, txtFile, "" txtFile.Close if Err.Number <> 0 then docObj.Action.Succeeded = false docObj.Action.ErrorMessage = "Erreur lors de l'exportation de données : " + Err.Description Err.Clear Exit Sub End if Set txtFile = Nothing Set fso = Nothing End Sub ' Fonction d'exportation d'images Function ExportImages( ByRef docObj, ByRef FCTools, ByVal exportFolder, ByRef fso ) Dim pages, page, imageOptions Dim fileName, pageNum ' spécificationdes paramètres d'exportation Set imageOptions = FCTools.NewImageSavingOptions imageOptions.Format = "bmp" imageOptions.ColorType = "FullColor" imageOptions.Resolution = 100 ' exportation page par page Set pages = docObj.Pages pageNum = 1 For Each page In pageses fileName = fso.BuildPath(exportFolder, "page" & pageNum & ".bmp") page.SaveAs fileName, imageOptions pageNum = pageNum + 1 Next End Function ' Procédure d'exportation des informations concernant le document Sub ExportDocInfo(ByRef docObj, ByRef txtFile) txtFile.WriteLine "Doc info:" txtFile.WriteLine ("DocumentId " & docObj.Id) txtFile.WriteLine ("IsAssembled " & docObj.IsAssembled) txtFile.WriteLine ("IsVerified " & docObj.IsVerified) txtFile.WriteLine ("IsExported " & docObj.IsExported) txtFile.WriteLine ("ProcessingErrors " & docObj.ProcessingErrors) txtFile.WriteLine ("ProcessingWarnings " & docObj.ProcessingWarnings) txtFile.WriteLine ("TotalSymbolsCount " & docObj.TotalSymbolsCount) txtFile.WriteLine ("RecognizedSymbolsCount " & docObj.RecognizedSymbolsCount) txtFile.WriteLine ("UncertainSymbolsCount " & docObj.UncertainSymbolsCount) txtFile.WriteLine End Sub ' Procédure d'exportation des champs à partir de l'ensemble de champs Sub ExportFields(ByRef fields, ByRef txtFile, ByVal indent) Dim curField For Each curField In fields ExportField curField, txtFile, indent Next End Sub ' Vérifie si la valeur du champ est nulle ' Si la valeur du champ n'est pas valide, toute tentative d'accès à ce champ (y compris ' pour en vérifier la nullité) peut générer une exception Function IsNullFieldValue( ByRef field ) on error resume next IsNullFieldValue = IsNull( field.Value ) if Err.Number <> 0 then IsNullFieldValue = True Err.Clear End if End Function ' Procédure d'exportation des champs Sub ExportField(ByRef field, ByRef txtFile, ByVal indent) ' enregistrement du nom des champs txtFile.Write (indent & field.Name) ' enregistrement de la valeur des champs accessibles If IsNullFieldValue(field) Then txtFile.WriteLine Else txtFile.WriteLine (" " & field.Text) End If If Not field.Children Is Nothing Then ' exportation des champs enfants ExportFields field.Children, txtFile, indent & " " ElseIf Not field.Items Is Nothing Then ' exportation des instances de champs ExportFields field.Items, txtFile, indent & " " End If End Sub ' La fonction crée un dossier d'exportation et retourne le chemin d'accès complet de ce dossier Function CreateExportFolder(ByVal definitionName, ByRef fso) Dim docFolder, folderName ' dossier principal exportFolder = "d:\ScriptExport" If fso.FolderExists(exportFolder) = False Then fso.CreateFolder (exportFolder) End If ' le dossier de la définition de document spécifiée docFolder = fso.BuildPath(exportFolder, definitionName) If fso.FolderExists(docFolder) = False Then fso.CreateFolder (docFolder) End If ' le dossier du document exporté Dim i i = 1 folderName = fso.BuildPath(docFolder, i) While fso.FolderExists(folderName) i = i + 1 folderName = fso.BuildPath(docFolder, i) Wend fso.CreateFolder (folderName) CreateExportFolder = folderName End Function [JScript] // La fonction effectue l'exportation : elle crée un dossier d'exportation et // enregistre dans ce dernier des fichiers image de pages, le fichier texte contenant les champs du document // et des informations relatives au document function ExportDocument(docObj, exportImageTools) { var folderName var txtFile, fileName var fso fso = new ActiveXObject("Scripting.FileSystemObject"); // création des dossiers d'exportation try { folderName = CreateExportFolder(docObj.DefinitionName, fso); } catch( e ) { docObj.Action.Succeeded = false; docObj.Action.ErrorMessage = "Erreur lors de l'exportation d'images : " + e.description; return;n; } // exportation d'images try { ExportImages(docObj, exportImageTools, folderName, fso); } catch( e ) { docObj.Action.Succeeded = false; docObj.Action.ErrorMessage = "Erreur lors de l'exportation d'images : " + e.description; return; } // création du fichier texte fileName = fso.BuildPath(folderName, "doc.txt"); txtFile = fso.CreateTextFile(fileName, true); // exportation des informations concernant le document ExportDocInfo( docObj, txtFile ); // exportation des champs txtFile.WriteLine( "Fields:" ); try { ExportFields( docObj.Children, txtFile, "" ); } catch( e ) { { docObj.Action.Succeeded = false; docObj.Action.ErrorMessage = "Erreur lors de l'exportation d'images : " + e.description; txtFile.Close(); return; } txtFile.Close(); txtFile = 0; fso = 0; } // Fonction d'exportation d'images. If an error occurs when exporting images, // it returns a message about the error; otherwise, it returns an empty string function ExportImages( docObj, exportImageTools, exportFolder, fso ) { // spécification des paramètres d'exportation var imageOptions = exportImageTools.NewImageSavingOptions(); imageOptions.Format = "bmp"; imageOptions.ColorType = "FullColor"; imageOptions.Resolution = 100; // exportation page par page var pages = docObj.Pages; var i for( i = 0; i < pages.Count; i++ ) { var fileName = fso.BuildPath( exportFolder, "page" + (i+1) + ".bmp" ); pages.Item(i).SaveAs( fileName, imageOptions ); } } // Procédure d'exportation des informations concernant le document function ExportDocInfo(docObj, txtFile) { txtFile.WriteLine( "Doc info:" ); txtFile.WriteLine("IsAssembled " + docObj.IsAssembled); txtFile.WriteLine("IsVerified " + docObj.IsVerified); txtFile.WriteLine("IsExported " + docObj.IsExported); txtFile.WriteLine("ProcessingErrors " + docObj.ProcessingErrors); txtFile.WriteLine("ProcessingWarnings " + docObj.ProcessingWarnings); txtFile.WriteLine("TotalSymbolsCount " + docObj.TotalSymbolsCount); txtFile.WriteLine("RecognizedSymbolsCount " + docObj.RecognizedSymbolsCount); txtFile.WriteLine("UncertainSymbolsCount " + docObj.UncertainSymbolsCount); txtFile.WriteLine(); } // Procédure d'exportation des champs à partir de l'ensemble de champs function ExportFields(fields, txtFile, indent) { var i for( i = 0; i < fields.Count; i++ ) { ExportField( fields.Item(i), txtFile, indent ); } } // Vérifie si la valeur du champ est nulle // Si la valeur du champ n'est pas valide, toute tentative d'accès à ce champ (y compris // pour en vérifier la nullité) peut générer une exception function IsNullFieldValue( field ) { try { return ( field.Value == null ); } catch( e ) { return true; } } // Procédure d'exportation des champs function ExportField(field, txtFile, indent) { // enregistrement du nom des champs txtFile.Write(indent + field.Name); // enregistrement de la valeur des champs accessibles if( IsNullFieldValue( field ) ) { txtFile.WriteLine(); } else { txtFile.WriteLine(" " + field.Text); } } if( field.Children != null ) { // exportation des champs enfants ExportFields( field.Children, txtFile, indent + " " ); } else if( field.Items != null ) { // exportation des instances de champs ExportFields( field.Items, txtFile, indent + " " ); } } // La fonction crée un dossier d'exportation et retourne le chemin d'accès complet de ce dossier function CreateExportFolder(definitionName, fso) { var docFolder, folderName // dossier principal var exportFolder = "d:\\ScriptExport"; if( !fso.FolderExists(exportFolder) ) { fso.CreateFolder (exportFolder); } } // le dossier de la définition de document spécifiée docFolder = fso.BuildPath(exportFolder, definitionName); if( !fso.FolderExists(docFolder) ) { fso.CreateFolder(docFolder); } // le dossier du document exporté var i = 1; folderName = fso.BuildPath(docFolder, i); while( fso.FolderExists(folderName) ) { i++; folderName = fso.BuildPath(docFolder, i); } fso.CreateFolder(folderName); return folderName; }
Utilisation d'un composant COM externe
[VBScript] dim autoExport set autoExport = CreateObject( "AutomationExport.Exporter" ) autoExport.Export me, FCTools [JScript] var autoExport = new ActiveXObject("AutomationExport.Exporter"); autoExport.Export( this, FCTools );
Code d'un composant ActiveX en VisualBasic
Vous trouverez ci-dessous un code de classe Exporter issu du projet AutomationExport, qui est utilisé dans les scripts ci-dessus.
OptionExplicit Dim mFso AsNew Scripting.FileSystemObject ' La procédure exécute l'exportation du document : elle crée un dossier d'exportation et ' enregistre dans ce dernier des fichiers image de pages, le fichier texte contenant les champs du document ' et des informations relatives au document PublicSub Export(ByRef docObj As Object, ByRef FCTools As Object) OnErrorGoTo err_h Dim folderName AsString Dim txtFile As TextStream, fileName AsString Dim imageExportResult AsString, errMessage AsString ' création du dossier d'exportation folderName = createExportFolder(docObj.definitionName) If folderName = "" Then docObj.Action.Succeeded = False docObj.Action.ErrorMessage = "Impossible de créer le dossier d'exportation" ExitSub EndIf ' exportation d'images imageExportResult = exportImages(docObj, FCTools, folderName) ' création du fichier texte fileName = mFso.BuildPath(folderName, "doc.txt") Set txtFile = mFso.CreateTextFile(fileName, True) ' enregistrement des informations sur les problèmes d'exportation d'images If imageExportResult <> "" Then txtFile.WriteLine imageExportResult errMessage = errMessage & imageExportResult EndIf ' exportation des informations concernant le document exportDocInfo docObj, txtFile ' exportation des champs txtFile.WriteLine "Fields:" IfNot exportFields(docObj.Children, txtFile, "") Then errMessage = errMessage & " Erreur lors de l'exportation des données" EndIf txtFile.Close ' si des erreurs surviennent pendant l'exportation, réinitialisez l'indicateur ' d'exportation réussie sur False If errMessage <> "" Then docObj.Action.Succeeded = False docObj.Action.ErrorMessage = errMessage EndIf Set txtFile = Nothing Set mFso = Nothing ExitSub err_h: docObj.Action.Succeeded = False docObj.Action.ErrorMessage = Err.Description txtFile.Close Set mFso = Nothing EndSub ' Fonction d'exportation d'images. Si une erreur survient pendant l'exportation des images, ' un message relatif à l'erreur est retourné, sinon une chaîne vide est retournée PrivateFunction exportImages(ByRef docObj As Object, ByRef FCTools As Object, _ ByVal exportFolder AsString) AsString OnErrorGoTo err_h Dim pages As Object, page As Object, imageOptions As Object Dim fileName AsString, pageNum AsLong exportImages = "" ' spécification des paramètres d'exportation Set imageOptions = FCTools.NewImageSavingOptions imageOptions.Format = "png" imageOptions.ColorType = "GrayScale" imageOptions.Resolution = 300 ' exportation page par page Set pages = docObj.pages pageNum = 1 ForEach page In pages fileName = mFso.BuildPath(exportFolder, page.definitionName + "_page" & pageNum & "." & imageOptions.Format) page.SaveAs fileName, imageOptions pageNum = pageNum + 1 Next page ExitFunction err_h: exportImages = Err.Description EndFunction ' Procédure d'exportation des informations concernant le document PrivateSub exportDocInfo(ByRef docObj As Object, ByRef txtFile As TextStream) OnErrorGoTo err_h txtFile.WriteLine "Doc info:" txtFile.WriteLine ("DocumentId " & docObj.Id) txtFile.WriteLine ("IsAssembled " & docObj.IsAssembled) txtFile.WriteLine ("IsVerified " & docObj.IsVerified) txtFile.WriteLine ("IsExported " & docObj.IsExported) txtFile.WriteLine ("ProcessingErrors " & docObj.ProcessingErrors) txtFile.WriteLine ("ProcessingWarnings " & docObj.ProcessingWarnings) txtFile.WriteLine ("TotalSymbolsCount " & docObj.TotalSymbolsCount) txtFile.WriteLine ("RecognizedSymbolsCount " & docObj.RecognizedSymbolsCount) txtFile.WriteLine ("UncertainSymbolsCount " & docObj.UncertainSymbolsCount) txtFile.WriteLine ExitSub err_h: txtFile.WriteLine Err.Description EndSub ' Procédure d'exportation des champs à partir de l'ensemble de champs PrivateFunction exportFields(ByRef fields As Object, ByRef txtFile As TextStream, ByVal indent As String) AsBoolean OnErrorGoTo err_h Dim curField As Object exportFields = True ForEach curField In fields IfNot exportField(curField, txtFile, indent) Then exportFields = False EndIf Next curField ExitFunction err_h: txtFile.WriteLine Err.Description exportFields = False EndFunction ' Vérifie si la valeur du champ est nulle ' Si la valeur du champ n'est pas valide, toute tentative d'accès à ce champ (y compris ' pour en vérifier la nullité) peut générer une exception Function IsNullFieldValue(ByRef field As Object) AsBoolean OnErrorGoTo err_h IsNullFieldValue = IsNull(field.Value) ExitFunction err_h: IsNullFieldValue = True EndFunction ' Fonction d'exportation de champs PrivateFunction exportField(ByRef field As Object, ByRef txtFile As TextStream, _ ByVal indent AsString) AsBoolean OnErrorGoTo err_h Dim result AsBoolean result = True ' enregistrement du nom des champs txtFile.Write (indent & field.Name) ' enregistrement de la valeur des champs accessibles IfNot IsNullFieldValue(field) Then txtFile.WriteLine (" " & field.Value) Else txtFile.WriteLine EndIf IfNot field.Children Is NothingThen ' exportation des champs enfants result = result And exportFields(field.Children, txtFile, indent & " ") ElseIfNot field.Items IsNothingThen ' exportation des instances de champs result = result And exportFields(field.Items, txtFile, indent & " ") EndIf exportField = result ExitFunction err_h: txtFile.WriteLine Err.Description exportField = False EndFunction ' La fonction crée un dossier d'exportation et retourne le chemin d'accès complet de ce dossier PrivateFunction createExportFolder(ByVal definitionName AsString) AsString OnErrorGoTo err_h Dim docFolder AsString, folderName AsString ' dossier principal Const exportFolder = "d:\AutomationExport" If mFso.FolderExists(exportFolder) = FalseThen mFso.CreateFolder (exportFolder) EndIf ' le dossier de la définition de document spécifiée docFolder = mFso.BuildPath(exportFolder, definitionName) If mFso.FolderExists(docFolder) = FalseThen mFso.CreateFolder (docFolder) EndIf ' dossier du document exporté Dim i AsLong i = 1 folderName = mFso.BuildPath(docFolder, i) While mFso.FolderExists(folderName) i = i + 1 folderName = mFso.BuildPath(docFolder, i) Wend mFso.CreateFolder (folderName) createExportFolder = folderName ExitFunction err_h: createExportFolder = "" EndFunction
Utilisation d'un composant externe écrit en .Net ( C# )
Pour utiliser un composant externe écrit en .Net, procédez comme suit :
- Créez un projet de type ClassLibrary
- Ajoutez ControllerInterop.dll aux références du projet. ABBYY.FlexiCapture apparaît dans la liste Références et toutes les interfaces des objets de scripts sont désormais disponibles dans le projet.
- Définissez l'interface disp et la classe implémentant cette interface, ainsi que ProgId (afin de pouvoir utiliser le composant .Net tout comme ActiveX, à partir du code du script).
- Une fois que le projet est créé, enregistrez la bibliothèque de types générée (activez l'option correspondante dans les propriétés du projet pour effectuer cette opération automatiquement).
- À partir du code d'exportation, appelez la méthode du composant comme vous le faites habvituellement :
[VBScript] dim autoExport set autoExport = CreateObject( "ExportLibrary1.Export" ) autoExport.ExportDocument me, FCTools [JScript] var autoExport = new ActiveXObject("ExportLibrary1.Export"); autoExport.ExportDocument( this, FCTools );
Le code d'un tel composant est illustré ci-dessous :
using System; using System.Runtime.InteropServices; using System.IO; using ABBYY.FlexiCapture; namespace ExportLibrary1 { // Interface du composant d'exportation accessible à partir du script // Lorsque vous créez un nouveau composant, générez un nouveau GUID [Guid("32B10C3B-EEA3-4194-B0A0-E358C310225A")] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface _cExport { [DispId(1)] void ExportDocument(ref IExportDocument DocRef, ref FCTools Tools); } // Classe implémentant la fonctionnalité du composant d'exportation // Lorsque vous créez un nouveau composant, générez un nouveau GUID // et définissez votre ProgId [Guid("3BA19BD7-C6DC-4f63-BC08-0D95254DADC3")] [ClassInterface(ClassInterfaceType.None)] [ProgId("ExportLibrary1.Export")] [ComVisible(true)] public class Export : _cExport { public Export() { } // La fonction exécute l'exportation du document : elle crée un dossier d'exportation et // enregistre dans ce dernier des fichiers image de pages, // le fichier texte contenant les champs du document et des informations relatives au document public void ExportDocument( ref IExportDocument docRef, ref FCTools FCTools ) { try { string exportFolder = createExportFolder( docRef.DefinitionName ); exportImages( docRef, FCTools, exportFolder ); // création du fichier texte string fileName = exportFolder + "//" + "doc.txt"; StreamWriter sw = File.CreateText( fileName ); // exportation des informations concernant le document exportDocInfo( docRef, sw ); // exportation des champs sw.WriteLine( "Fields:" ); exportFields( docRef.Children, sw, "" ); sw.Close(); } catch( Exception e ) { docRef.Action.Succeeded = false; docRef.Action.ErrorMessage = e.ToString(); } } // La fonction crée un dossier d'exportation et retourne le chemin d'accès complet de ce dossier privatestring createExportFolder(string definitionName ) { string docFolder, folderName; // dossier principal string exportFolder = "d:\\DotNetExport"; if( !Directory.Exists(exportFolder) ) { Directory.CreateDirectory(exportFolder); } // le dossier de la définition de document spécifiée docFolder = exportFolder + "\\" + definitionName; if( !Directory.Exists(docFolder) ) { Directory.CreateDirectory( docFolder ); } // dossier du document exporté int i = 1; folderName = docFolder + "\\" + i; while( Directory.Exists(folderName) ) { i++; folderName = docFolder + "\\" + i; } Directory.CreateDirectory(folderName); return folderName; } // Fonction d'exportation d'images private void exportImages( IExportDocument docRef, FCTools FCTools, string exportFolder ) { string baseFileName = exportFolder + "\\page_"; IExportImageSavingOptions imageOptions = FCTools.NewImageSavingOptions(); imageOptions.Format = "bmp"; imageOptions.ColorType = "FullColor"; imageOptions.Resolution = 100; int i = 1; foreach( IExportPage curPage in docRef.Pages ) { string fileName = baseFileName + i + ".bmp"; curPage.SaveAs( fileName, imageOptions ); i++; } } // Exportation des informations concernant le document private void exportDocInfo( IExportDocument docRef, StreamWriter sw ) { sw.WriteLine( "Doc info:" ); sw.WriteLine("DocumentId " + docRef.Id ); sw.WriteLine("IsAssembled " + docRef.IsAssembled); sw.WriteLine("IsVerified " + docRef.IsVerified); sw.WriteLine("IsExported " + docRef.IsExported); sw.WriteLine("ProcessingErrors " + docRef.ProcessingErrors); sw.WriteLine("ProcessingWarnings " + docRef.ProcessingWarnings); sw.WriteLine("TotalSymbolsCount " + docRef.TotalSymbolsCount); sw.WriteLine("RecognizedSymbolsCount " + docRef.RecognizedSymbolsCount); sw.WriteLine("UncertainSymbolsCount " + docRef.UncertainSymbolsCount); sw.WriteLine(); } // Exportation d'un ensemble de champs private void exportFields( IExportFields fields, StreamWriter sw, string indent ) { foreach( IExportField curField in fields ) { exportField( curField, sw, indent ); } } // Vérifie si la valeur du champ est nulle // Si la valeur du champ n'est pas valide, toute tentative d'accès à ce champ (y compris // pour en vérifier la nullité) peut générer une exception privatebool IsNullFieldValue( IExportField field ) { try { return ( field.Value == null ); } catch( Exception e ) { returntrue; } } // Exportation du champ spécifié private void exportField( IExportField field, StreamWriter sw, string indent ) { // enregistrement du nom des champs sw.Write( indent + field.Name ); // enregistrement de la valeur des champs accessibles if( IsNullFieldValue( field ) ) { sw.WriteLine(); } else { sw.WriteLine( " " + field.Text ); } if( field.Children != null ) { // exportation des champs enfants exportFields( field.Children, sw, indent + " " ); } else if( field.Items != null ) { // exportation des instances de champs exportFields( field.Items, sw, indent + " " ); } } } }
Gestionnaire d'exportation
Cet exemple de code illustre un gestionnaire d'exportation élémentaire qui enregistre des informations concernant les documents exportés et exporte les résultats vers des fichiers texte. Deux fichiers texte sont utilisés dans cet exemple : l'un d'eux contient la liste des documents exportés avec succès et l'autre contient la liste des documents pour lesquels des erreurs ont été retournées pendant l'exportation.
[VBScript] dim curDoc dim fso, fileErrorName, txtErrorFile, fileSucceedName, txtSucceedFile set fso = CreateObject("Scripting.FileSystemObject") ' création du fichier pour les documents dont l'exportation a échoué fileErrorName = "d:\ExportResults\ErrorsDocuments.txt" set txtErrorFile = fso.CreateTextFile( fileErrorName, true ) ' création du fichier pour les documents dont l'exportation a réussi fileSucceedName = "d:\ExportResults\SucceedDocuments.txt" set txtSucceedFile = fso.CreateTextFile( fileSucceedName, true ) dim i, exprortResult, docInfo ' itération de l'ensemble de documents exportés for i = 0 Tome.Count - 1 set exportResult = me.Item(i) docInfo = "DocumentId:" & exportResult.Document.Id if exportResult.Succeeded then docInfo = docInfo & " - Exported successfully." txtSucceedFile.WriteLine docInfo else docInfo = docInfo & " - Export error: " & exportResult.ErrorMessage txtErrorFile.WriteLine docInfo endif next txtErrorFile.Close txtSucceedFile.Close [JScript] var fso = new ActiveXObject("Scripting.FileSystemObject"); // création des fichiers pour les documents dont l'exportation a échoués var fileErrorName = "d:\\ExportResults\\ErrorsDocuments.txt"; var txtErrorFile = fso.CreateTextFile( fileErrorName, true ); // création du fichier pour les documents dont l'exportation a réussi var fileSucceedName = "d:\\ExportResults\\SucceedDocuments.txt" var txtSucceedFile = fso.CreateTextFile( fileSucceedName, true ); var i // itération de l'ensemble de documents exportés for( i = 0; i < Documents.Count; i++ ) { var curDoc = Documents.Item( i ); var docInfo = "DocumentId: " + curDoc.Id; if( curDoc.Action.Succeeded ) { docInfo = docInfo + ". Exported successfully. Result:" + curDoc.Action.Result; txtSucceedFile.WriteLine( docInfo ); } else { docInfo = docInfo + ". Export error: " + curDoc.Action.ErrorMessage + " Result:" + curDoc.Action.Result; txtErrorFile.WriteLine( docInfo ); } } txtErrorFile.Close(); txtSucceedFile.Close();
Accéder aux fichiers source dans des formats Office courants
Cet exemple de script montre comment vous pouvez enregistrer les fichiers source lors de l'exportation de documents. Les fichiers source doivent être dans l’un des formats Office courants pris en charge et un nom unique doit leur être attribué afin d’éviter les conflits de noms.
using System; using System.IO; using System.Collections.Generic; // Répéter sur toutes les pages. for( int i = 0; i<Document.Pages.Count; i++ ) { IPage page = Document.Pages[i]; // Vérifier la présence d'un fichier source. if( page.SourceFileGUID == "" ) { continue; } // Le nom d'origine du fichier. string sourceFileName = @""; // Spécifier le nom d'origine du fichier if( page.ImageSourceType == @"File" ) { sourceFileName = Path.GetFileName( page.ImageSource ); } else if( page.ImageSourceType == @"Scanner" || page.ImageSourceType == @"Custom" ) { sourceFileName = Path.GetFileName( page.ImageSourceFileSubPath ); } // Supprimer l'extension de fichier du nom du fichier. if( sourceFileName != @"" ) { sourceFileName = Path.GetFileNameWithoutExtension( sourceFileName ) + @"."; } // Nom unique du fichier source (nom d'origine + guid). string sourceFileUniqueName = sourceFileName + page.SourceFileGUID; // Le chemin d'accès au dossier dans lequel le fichier source doit être enregistré. string sourceFilePath = Document.Batch.Project.ExportRootPath + @"\" + sourceFileUniqueName; // S'assurer que le fichier n'existe pas. if( File.Exists( sourceFilePath ) ) { continue; } // Enregistrer le fichier. Processing.ReportMessage( "Enregistrement du fichier source : " + sourceFileUniqueName ); page.SaveSourceFile( sourceFilePath ); }
14.01.2021 14:17:20