Upload
others
View
27
Download
1
Embed Size (px)
Citation preview
ST40 – Rapport de stage professionnel
La gestion électronique des documents
Emmanuel Trivis – département Génie Informatique
Semestre d’automne 2006
Suiveur en entreprise : Guillaume Tosolini
Suiveur UTBM : Claude Renaud
Odyssée Ingenierie
Le Patio - Parc d'Activités Le
Garon
6, rue Bonnefond
69700 GIVORS France
Odyssée Ingénierie :
La gestion électronique des documents
Emmanuel Trivis
Université de Technologie de Belfort-Montbéliard, département Génie
INFORMATIQUE semestre 03
Semestre d’automne 2006, du 4 Septembre 2006 au 16 février 2007.
Unité de Valeur ST40.
Remerciements
Je tenais à remercier toute l’équipe d’Odyssée Ingénierie pour leur accueil, les
conseils qu’ils m’ont donné, et leur bonne humeur plus personnellement :
M. Sébastien Chevalier, le directeur Technique d’Odyssée, pour m’avoir
proposé ces sujets et permis de rejoindre le personnel durant ces semaines.
M. Guillaume Tosolini, mon maître de stage, pour son suivi et sa patience.
M. Olivier Lecoq pour son rôle de beta testeur, ses critiques constructives, et ses
chocolats.
M. Sébastien Di-Ruzza, pour ses enseignements sur l’installation logiciel et
réseau.
M. Loïc Montagne pour son aide sur les threads.
M. Jean Claude Estragnat pour son point de vue commercial.
Mme. Françoise Chevalier, pour sa bonne humeur et ses fous rires au standard.
Puis je voulais également remercier M. Claude Renaud, mon suiveur à l’UTBM
pour s’être déplacé jusqu’à Givors.
Enfin je souhaitais féliciter les relecteurs de ce rapport, pour le temps passé à le
corriger.
Ce rapport est le compte rendu du travail réalisé durant le stage qui s’est déroulé
dans l’entreprise Odyssée Ingénierie située à Givors (Rhône).
Il a été réalisé dans le cadre de l’unité de valeur ST40 « stage professionnel », de
l’Université de Technologie de Belfort-Montbéliard. Cette unité de valeur consiste en
un stage de 24 semaines ayant lieu durant le troisième semestre du cycle d’ingénieur
des Universités de technologie.
Odyssée ingénierie est un éditeur de progiciel ayant eu besoin de compétences
dans le domaine de l’imagerie. Ayant des acquis dans ce domaine, voulant m’y
perfectionner et ayant déjà réalisé un stage en laboratoire de recherche j’ai voulu gouter
au milieu de l’entreprise.
Ce stage a consisté en l’implémentation sous Visual Basic 2005 d’une
visionneuse d’image numérique, de visionneurs de documents, d’outils de numérisation
d’image, de gestion et de recherche de documents image.
Dans ce rapport nous allons tout d’abord présenter le lieu d’accueil puis le
contexte du stage, ensuite nous en aborderons le sujet et les outils mis à disposition,
dans un troisième temps nous développerons les solutions adoptées aux problèmes
posés, enfin nous conclurons.
Sommaire
Introduction I. Présentation de l’entreprise : Odyssée Ingénierie 1
1. La société 1
2. L’environnement, les partenaires 1
3. Les clients 1
4. L’équipe 2
5. Le service 2
II. Le produit phare de l’entreprise : Acropolis 4 1. Présentation du sujet 5
2. Introduction 5
3. Contraintes associées 6
4. Plannings 7
III. Programmation 8 1. Le langage Visual Basic 2005 8
2. Le .net Framework 11
3. Visual Studio 2005 12
Développement Introduction 14
I. La visionneuse d’image 15 I. Introduction à l’image 15 1. L’image 15
2. La compression 15
3. Le format tiff 16
4. Les autres formats d’image 16
5. L’objet « Image » du .Net Framework 17
6. Le format de pixel 17
II. Réalisation de la visionneuse 18 1. Les contrôles utilisés 18
2. Le déplacement de l’image 20
3. L’affichage de l’image 21
4. L’objet Graphics 22
5. La gestion de la mémoire, stockage de l’image « TIFF » 22
6. La création des images miniatures 23
7. La gestion des miniatures, le chemin de fer 24
Conclusion 26
II. L’implémentation de fonctions à la GED 27 I. L’impression 27 1. Une impression intelligente 27
2. L’impression avec le .net Framework 2.0 27
3. Les interfaces d’impression 28
II. La numérisation d’un document 29 1. La librairie WIA 29
2. Structure de la librairie WIA 30
3. L’acquisition d’une image 33
4. Manipulation des propriétés de numérisation 33
5. Manipulation d’images 34
III. La reconnaissance optique de caractères 35 1. Définition 35
2. Histoire 35
3. Principe de l’OCR 35
4. La librairie MODI 36
5. Structure de la librairie MODI 36
6. Le pilotage de l’OCR 36
IV. L’indexation 37 1. Introduction 37
2. Contraintes associées aux descripteurs 37
3. Les expressions régulières 38
4. Les arbres de recherches 38
V. La recherche full-text 40 1. Principe 40
2. Implémentation et option de la recherche intégrale 40
Conclusion 41
III. Les autres travaux 42 I. Le rapport d’erreur 42
1. Réalisation du rapport d’erreur 42
2. L’appel du rapport d’erreur 43
II. Réalisation d’un contrôle d’aperçu multi documents 43 1. Visualisation des images 43
2. Visualisation des documents pdf et textuels 43
3. Visualisation des documents Offices 44
4. Conclusion au contrôle 44
III. La localisation 45
IV. Les commentaires 46
V. Le déploiement 47
Conclusion 47
Bilan I. L’intégration 48 1. Le module courrier 48
2. Le module AcroGed 48
3. Conclusion à l’intégration 49
II. Conclusion au travail 49
Conclusion 50
Bibliographie 51
Annexe 52
1
Introduction
I. Présentation de l’entreprise : Odyssée Ingénierie
1. La société
Odyssée Ingénierie est une SARL Spécialisée depuis 1992 dans la gestion de la
production administrative électronique (GPAE) (Gestion applicative des flux
d'information, des documents, de leurs contenus et des tâches associées), sur le marché
du Secteur Public et des Entreprises.
L’activité de la société tourne essentiellement autour d’ «Acropolis "Fédération
et Circulation de l’Information" » disponible en client riche et Web couvrant les
domaines de la gestion électronique des documents (dématérialisation de documents),
du courrier, des dossiers, du protocole (GED, GEIDE, Workflow). Elle enrichit
continuellement le progiciel mais fournit également le matériel, l’installation, la
formation, la maintenance, l’assistance nécessaire à l’utilisation d’Acropolis.
Lors du stage les développements avaient pour but de passer à une version
d’Acropolis tout en technologie .NET, ainsi que d’éditer de petits modules pouvant être
commercialisés indépendamment.
Figure i.1 logo de la société
2. L’environnement, les partenaires
La société est basée à Givors (Rhône) ville de taille moyenne (environs 19000
habitants) située à 25km au sud de Lyon. Mais possède de nombreux partenaires (DWS
(région nord), Ajilon (Auvergne et Rhône-Alpes), Exakis (Aquitaine-Picardie), Saint
Clair consulting (région Normandie), I-Consulting (Région Languedoc Roussillon)).
La société a également développé de nombreux partenariats commerciaux ; les
principaux étant avec Microsoft, IBM, Fujitsu ou encore Canon…
3. Les clients
L’entreprise a développé 2 axes de clientèle, l’industrie et le service (Velan
S.A.S (Robinetterie Nucléaire et Cryogénique), Parc des expositions de Lyon), et le
service public (de nombreuses mairies, conseils régionaux, et administration
gouvernementale (HALDE, DIACT)).
La clientèle est essentiellement française même si Acropolis offre une version
anglaise. De plus l’entreprise possède des clients en Martinique, et à la Réunion.
2
4. L’équipe
Neufs personnes composent Odyssée Ingénierie, quatre d’entre elles ayant une
vocation commerciale, les cinq autres étant plus du coté technique.
L’équipe commerciale comprend le directeur commercial, la secrétaire de
direction et responsable des achats, une ingénieure avant-vente et formation utilisateur
(travaillant à Paris), une responsable Marketing et communication.
L’équipe technique comprend le directeur technique, un analyste programmeur
étant en charge de l’hardware, de l’installation et de la formation, un ingénieur d’affaire
étant également chef de projet d’intégration, le chef de projet responsable du
développement interne de l’entreprise, et d’un analyste programmeur spécialisé dans le
développement et le déploiement.
5. Le service
Durant ce stage j’étais attaché au service technique, où j’étais responsable d’un
développement sous la tutelle du chef de projet : M. Tosolini, étant également mon
maître de stage.
Le service technique était composé de 2 bureaux : celui du directeur technique
(M. Chevalier), et celui de M. Di-Ruzza, M. Lecoq, M. Montagne, et M. Tosolini,
j’étais dans dernier.
Mon poste possédait le système d’exploitation Windows XP Pro sp2, le .Net
Framework 2.0, et l’outil de développement Visual Studio 2005 Pro sp1.
Le service technique avait à sa disposition plusieurs postes (Windows 2000 à Vista), et
de nombreux serveurs :
- Serv2000 (Windows 2000) contenant :
o Un SQL server 2000 o La base de données de développement (ACRODEV) et de
l’entreprise (ACROPRD).
o Le contrôleur de domaine o La distribution client « riche » d’Acropolis o …
- ServWeb (Windows 2003 Serveur) contenant :
o Un SQL Server 2005 o La version client « léger » d’Acropolis o …
- ServTFS (Windows 2003 Server) contenant :
o SQL Server 2005 o Team Foundation Server (Contrôleur du code source)
- …
Il y avait également la possibilité de lancer des machines virtuelles de tout genre.
3
Le contrôleur de code source utilisé était Team Foundation Server 2005, un
produit Microsoft. Il était hiérarchisé de la manière suivante, où le niveau inférieur ne
peut accéder aux niveaux supérieurs :
- Le niveau le plus bas était un dossier Component, possédant toutes les librairies
non fabriquées par la société.
- Puis venait le niveau Odyssée, contenant toutes les librairies de base fabriquées
par la société, offrant des fonctionnalités spécifiques et donc inexploitable
directement.
- Enfin le niveau Acropolis renfermait les librairies et les exécutables finaux de la
société.
Le contrôleur possédait également un groupement spécifique aux tests, et un autre pour
la version web d’Acropolis,
Comme son nom l’indique le service technique se chargeait (à l’exception du
directeur technique) de tout ce qui n’était ni administratif, ni commercial. Il se vouait
surtout au développement. Mais s’occupait aussi de la maintenance, l’assistance et la
formation.
Les développements se faisaient pour l’essentiel en Visual Basic et .net, avec un
peu de SQL, de WinDev, et d’ASP, puisque Acropolis gère des bases de données, est
codé en WinDev pour sa version riche et en ASP pour sa version web.
4
II. Le produit phare de l’entreprise : « Acropolis fédération et circulation de l’information »
Acropolis « fédération et circulation de l’information » [07] ou plus simplement
Acropolis est un progiciel intégrant toutes les fonctions de gestion de productions
administrative, gestion électronique de documents, workflow, gestion des courriers, des
dossiers, des acteurs, des actions. Sa première version est sortie en 1996. Aujourd’hui,
est commercialisée la version 3.7. Une version 4 tout en .net est prévue pour la fin du
2ième trimestre 2007.
La structure d’Acropolis est composée de 5 grands objets : les contacts
(personnes), les documents, les entreprises, les actions, et les dossiers. Tous ces objets
sont en relation entre eux, et avec eux même.
Figure i.2 : le logo d’ « Acropolis »
Acropolis repose sur un modèle client/serveur, c'est-à-dire que l’utilisateur
travaille directement sur un poste « client » et peut obtenir des informations et des
utilitaires indirectement du poste « serveur ».
Le serveur d’Acropolis a pour rôle de stocker les documents de l’entreprise
(images, documents office, e-mails…), il sert également de serveur de base de données,
de contrôleur d’accès, d’automate de traitement de tâches.
Le client Acropolis possède une installation du progiciel pouvant dialoguer avec le
serveur.
Les 2 postes communiquent par une api ODBC, qui permet une compatibilité de
communication entre n’importe quels systèmes.
L’installation serveur d’Acropolis est compatible avec n’importe quel système
d’exploitation et de base de données (SQL serveur, oracle, PosGreSql, DB2 (AS/400)).
Néanmoins le poste client ne fonctionne aujourd’hui que sous des systèmes Microsoft
(2000 et supérieur) puisqu’il est réalisé en WinDev et .net, mais une version compatible
Unix utilisant Mono est envisagée.
De Plus la version client est déclinée en 2 versions. La première dite « riche » où la
partie cliente d’Acropolis est installé sur le poste utilisateur, une seconde dite « légère »
où les interfaces utilisateurs sont accessibles par Internet via n’importe quel navigateur
web.
5
III. Présentation du Sujet
1. Introduction.
Le travail consistait à remplacer et à améliorer la fenêtre GED du logiciel
« Acropolis » de l’entreprise celle-ci étant visuellement et fonctionnellement obsolète.
Cette fenêtre permettant la visualisation, la manipulation et la numérisation d’images,
offrait également quelques outils de traitement d’image.
Figure i.3 : l’ancienne fenêtre « GED »
Puis d’ajouter un outil de reconnaissance optique de caractère afin d’enregistrer
le texte d’une image, et ainsi pouvoir retrouver une image grâce à son contenu textuel.
Une fois ces travaux terminés il a été demandé de réaliser un formulaire de
rapport d’erreur et un contrôle permettant de visualiser un grand nombre de types de
documents.
L’implémentation des algorithmes s’est faite en langage Visual Basic 2005
accompagné du Framework .NET 2.0, sous le logiciel d’édition Visual Studio 2005.
6
2. Contraintes associées
Contraintes associées à la visionneuse d’images
La visionneuse doit accepter le plus grand nombre de format d’images mais
manipulera essentiellement des fichiers Tiff monochrome et multipages.
Il devra également proposer :
- un « chemin de fer » c'est-à-dire une zone affichant les miniatures des images du
document.
- Tous les outils classiques de manipulation d’image comme la rotation, la copie,
le facteur d’éloignement (zoom), le déplacement de l’image.
- Un déplacement fluide par « soulevé déplacé » de l’image (drag and drop avec la
main).
- Une numérisation par driver WIA.
- Une impression « intelligente »
- Une ouverture rapide des documents
- La possibilité de manipuler de très grandes images (images contenant plus de
100 millions de pixels)
- Une technologie compatible sous les systèmes d’exploitation Windows 2000 et
supérieur.
Enfin il devra être décliné sous forme de contrôle et de formulaire.
Contraintes Associées à la reconnaissance optique de caractères
La reconnaissance optique de caractères permet d’extraite le texte contenu dans
une image.
Cette reconnaissance doit se faire grâce à la librairie de « Microsoft Office Document
Imaging », l’outil de télécopie de Microsoft, proposé avec « Microsoft Office » 2003 et
supérieur.
L’utilisation du texte de l’image doit servir pour une recherche par « mots clefs » et
pour une recherche « full texte ».
Dans le cas de la recherche par mots clefs, une correspondance est faite entre un
document et une expression si cette dernière fait partie du texte de l’image. Une
recherche « Full Texte » cherchera la correspondance entre une expression et tous les
documents d’une base.
Contraintes associées au rapport d’erreur
Le rapport d’erreur doit fournir à la société assez d’informations pour traiter
l’erreur (dont une capture d’écran). Il devra être imprimable et envoyable par courrier
électronique.
Contraintes associées au visionneur multi documents.
Le contrôle devra ouvrir les documents office Word, Excel, Visio, Pdf, image et
les fichiers textes, html, xml.
Le contrôle devra offrir la possibilité de verrouiller les documents ouverts afin qu’ils ne
puissent ni être modifiés ni être sauvegardés.
7
3. Plannings
Lors de l’arrivée dans l’entreprise, le planning n’a pas été explicitement annoncé
pour 24 semaines. Il a été basé pour 4 mois et a été étoffé ou précisé au fil des réunions.
Planning prévisionnel
Planning réel
8
IV. La programmation
La société possède comme logiciel de développement Visual Studio 2005 un
outil puissant, et a choisi de développer son produit avec le .Net Framework de
Microsoft facile d’implémentation et gratuit. Le langage de programmation choisi, est le
Visual Basic peu complexe, aisément appréhendable et performant.
1. Le langage Visual Basic 2005
Ce langage est hérité du langage Basic utilisé sous MS-DOS et Visual Basic
apparu sous Windows 3.0 ainsi, il s’agit d’un langage Microsoft. Couplé avec le .net
Framework il permet de créer des interfaces pour les systèmes d’exploitation Microsoft
ou encore des pages web (ASP .NET).
C’est un langage orienté objet, où toutes classes sont héritées de la classe
« Object » tout comme est conçu le langage Java. Il est un des langages permettant de
communiquer avec le .net Framework qui lui fournit ses objets et contrôles.
Ce langage prend en compte les exceptions, les threads, les génériques
(Template), des Collections….
En Visual basic toute la programmation se déroule dans des classes d’objets.
Par exemple la création d’une application Windows (une fenêtre pouvant comporter des
contrôles) passe par la création d’un formulaire et d’une classe définissant ce
formulaire, héritant de la classe System.Windows.Forms.Form. Ou encore la définition
d’un tout nouveau contrôle passe par la déclaration d’une classe héritant de
System.Windows.Forms.UserControl, définissant ce contrôle...
Coté langage, Visual Basic 2005 est fortement typé et ne se soucie pas de la
caste (différenciation des minuscules et majuscules)
Tout comme dans le Java, dans Visual Basic 2005 tout est référence, la notion de
pointeur n’existe pas. Ainsi dans la variable déclarée, est stocké l’adresse en mémoire
de l’objet plutôt que l’objet lui-même.
Les bases et vocabulaire de la programmation avec Visual Basic 2005
La déclaration
La déclaration est la procédure qui consiste à définir le nom d’une variable ainsi
que le type d’objet auquel elle appartient.
Les contrôles
Les contrôles sont ceux qui rendent une application graphique dynamique, ils
permettent de dialoguer entre l’utilisateur et la machine.
Les objets
Un objet est une entité définie par une classe. Cette classe pouvant contenir des
variables et des méthodes. On les appelle alors variables et méthodes membres de
classe.
9
L’instanciation
Instancier une variable consiste à attacher un objet à cette variable.
Physiquement l’instanciation réserve en mémoire la place que prend un objet et donne à
la variable l’adresse mémoire où se trouve l’objet.
L’initialisation
L’initialisation d’une variable ne peut se faire que si cette variable a été
instanciée. Cette étape consiste alors à donner une valeur à la variable en question.
Construction d’une classe
Le constructeur d’une classe est défini par le nom de procédure « New ». C’est
lui qui permet d’instancier un objet.
Variable
Une variable est une boîte définie dans le but de contenir un objet.
Déclarer une variable permet de définir à quel type d’objet elle appartient et ainsi lui
associer les méthodes propre à son type.
Le nom de variable doit être en un seul mot, sans espace et caractère d’opération (*, -,
<, …), et doit être unique.
Le dialogue entre les classes
En programmation orientée objet on utilise des « méthodes » permettant
d’interagir entre les classes. Ces méthodes sont de plusieurs types offrant différentes
fonctionnalités et avantages, elles permettent de passer des objets d’une classe à l’autre :
on appelle alors ces objets des « paramètres »
Il y a 2 types de passages :
byval (par valeur) ce qui équivaut en un passage en entrée uniquement, ou
lecture seule, l’objet passé va être cloné lors du passage dans la méthode et le clone sera
détruit lorsque celle-ci va être terminée. On passe donc ici un objet complet, l’objet tel
qu’il est en mémoire.
Byref (par référence) ce qui équivaut à un passage en entrée-sortie, ou lecture-
écriture. Ici on ne passe pas l’objet mais la référence sur l’objet. On passe donc son
adresse en mémoire ce qui est plus rapide mais moins sécurisé, puisque que ces
modifications dans le méthode seront conservées lorsque celle-ci va être terminée.
Visual Basic offre également la possibilité de proposer un passage facultatif des
paramètres. Pour cela lors de la déclaration le mot clef « optionnal » devra précéder le
type de passage. Et les paramètres optionnels devront être en fin de liste de déclaration
et devront obligatoirement avoir une valeur par défaut.
Les méthodes
Il existe plusieurs types de méthodes proposant chacune un compromis entre
simplicité, sécurité, et optimisation de programmation.
10
- déclaration d’une procédure
Une procédure est une méthode pouvant prendre une infinité de paramètres et ne
renvoyant rien, sa déclaration doit commencer par sub() avec les paramètres entre les
parenthèses séparés d’une virgule. Par défaut ils sont passés par valeur (byval). Les
procédures doivent se terminer par « end sub »
- déclaration d’une fonction
Une fonction est une méthode pouvant prendre une infinité de paramètres et devant
renvoyer un objet d’un type prédéfini lors de sa déclaration.
Sa déclaration doit commencer par function() avec les paramètres entre parenthèses
séparés d’une virgule puis de la déclaration du type renvoyé précédé du mot clef « as ».
Par défaut les paramètres sont passés par valeur (byval). Elle renvoie l’objet par le mot
clef « return » et doit se terminer par « end function »
- déclaration d’un accesseur
Un accesseur est destiné à la manipulation des variables membres d’une classe.
L’accesseur en Visual Basic 2005 est appelé propriété et est déclaré par le mot clef
« Property » et doit ce terminer par « end property »
Un Accesseur peut être de 3 types :
- En lecture seule, la variable membre sera uniquement retournée, dans ce cas le
mot clef « readOnly » devra précéder la déclaration de l’accesseur.
Cette lecture se fera entre les mots clefs « Get » et « End Get » et la variable membre de
la classe sera retournée en l’affectant au nom de l’accesseur ou par le mot clef
« return ».
- En écriture seule, la variable membre subira une affectation par la valeur
affectée au nom de l’accesseur, dans ce cas le mot clef « writeOnly » devra précéder la
déclaration de l’accesseur.
Cette lecture ce fera entre les mots clefs « Set(nom_paramètre_unique) » et « End Set »,
le paramètre devra être affecté à la variable membre de la classe.
- En lecture écriture, comme son nom l’indique, l’accesseur est une fusion des 2
cas précédents, aucun mot clef n’est requis pour cette déclaration, et il comprendra
obligatoirement les 2 types de mots clefs internes vu précédemment.
11
2. Le .Net Framework
Le .net Framework peut être considéré comme une couche permettant de
communiquer entre le langage de programmation et le système d’exploitation. Il
transforme en code toutes les applications des contrôles de Windows. Il s’agit d’un
produit gratuit de Microsoft et ne fonctionne que sur les systèmes d’exploitation
Microsoft. Cependant il existe des équivalents libres du .NET Framework, tels que
Mono, et DotGNU qui permettent d’exécuter un programme .NET sur des systèmes
UNIX.
Historiquement il est apparu dans sa première version en 2002, retouché en 2003
pour sa version 1.1, amélioré dans sa version 2.0 en 2005, et existe aujourd’hui dans une
version 3.0 dont les fonctions de pilotage ne sont pas encore disponibles.
Le .net Framework est un outil indispensable pour programmer en .net puisqu’il
fournit tous les outils de la programmation, les contrôles et les bibliothèques de classes.
Quelque soit l’un des nombreux langages utilisés pour écrire une application
.net, le code va être précompilé en un langage unique appelé MSIL (Microsoft
Intermediate Language), ce MSIL étant indépendant de la configuration matériel et du
système d’exploitation de la machine. C’est alors un code générique et portable, qui
peut fonctionner quelque soit la machine à partir du moment où celle-ci possède le
Framework .NET ou un équivalent. Ensuite lors de l’exécution finale la code MSIL va
être interprété en langage machine grâce au CLR (Common language Runtime) pour les
Systèmes d’exploitation Microsoft ou au Mono et Autre pour les Systèmes Unix.
Figure i.4 : structure du .net Framework 2.0
Enfin le .net Framework est un langage de très haut niveau permettant très
facilement de créer des applications évènementielles, c'est-à-dire des applications
répondant aux actions de l’utilisateur sur le programme.
Il faut noter qu’une documentation complète et illustrée concernant les méthodes
et classes du .net Framework est disponible dans la MSDN (MicroSoft Developer
Network), dont une version est consultable en ligne [09].
12
3. Visual Studio 2005
Visual Studio 2005 est le logiciel de développement édité par Microsoft. La
société odyssée-ingénierie possède la version commerciale « Team Edition for Software
Developers » mais une version gratuite dite « express » existe.
Microsoft a édité des suites de logiciel nommé « Visual Studio » afin de
regrouper plusieurs langages de programmation dans un même éditeur, le premier étant
Visual Studio 97. Visual Studio 2005 est basé sur la technologie .Net de Microsoft,
utilisé depuis Visual Studio .Net (2002) utilisant le Framework 1.0. La version 2005
supportant le Framework 2.0.
Visual studio 2005 est un outil extrêmement puissant supportant un grand
nombre de langages (VB, C#, C++, J#, jScript, ASP) tous pouvant utiliser les objets du
Framework .net.
Visual Basic studio permet de créer des applications exécutables (.exe) ou des
bibliothèques de classes (.dll)
Il propose de nombreux outils de développement très pratiques comme un
éditeur d’interface, par simple sélection et positionnement de contrôles, il offre
également l’IntelliSense (figure i.5) qui complète automatiquement les rentrées de
l’utilisateur et informe l’utilisateur de la déclaration et la définition de chaque variable,
méthode, classes...
Figure i.5 : Exemple d’IntelliSense
Le débogueur de Visual Studio 2005 offre la possibilité de poser des points
d’arrêt et de naviguer aisément dans le code mais offre surtout la possibilité de changer
13
le code dynamiquement. C'est-à-dire que lorsque l’exécution d’un programme est
stoppée et passée en mode débogue, il est possible de modifier le code puis de continuer
son exécution sans qu’il y ait besoin de tout recompiler et de repartir du début.
14
Développement
Introduction
La Gestion électronique des documents ou la GED (ou Gestion Electronique
d'Informations et de Documents pour l'Entreprise, en abrégé GEIDE), représente
l’utilisation des moyens informatisés pour l’ensemble de la gestion d’un document
électronique (fichier texte, tableur, image, vidéo,..)
L’objectif de la GED est de parvenir à constituer un référentiel de l’ensemble des
documents de l’entreprise, afin de gérer leurs cycles de vie, de leurs créations à leurs
destructions.
Apparue dans les années 80 la GED doit permettent :
- l’acquisition des documents (par intégration, ou production). [partie 2]
- l’indexation des documents électronique permettant de classifier, et d’optimiser la
recherche. [partie 2]
- le stockage (enregistrement) des documents.
- la restitution des documents par une phase de recherche [partie 2], puis de
visualisation soit sur support informatique [partie 1], soit sur support papier [partie
2].
- l’archivage des documents.
Une application GED offre des avantages sur le plan organisationnel mais
également du coté financier. La recherche et la diffusion de l’information deviennent
extrêmement plus rapides. Le coût de l’espace de stockage, de classement, de recherche
et de diffusion est réduit.
Tout d’abord, nous étudierons les développements et notions nécessaires à la
réalisation de la visionneuse, dans un second temps nous aborderons la numérisation,
l’impression d’images, l’implémentation et les idées de la reconnaissance optique de
caractères entrainant la réalisation de deux buts de la GED : l’indexation et la recherche,
enfin nous expliquerons le contrôle multi-documents, le rapport d’erreur et les tâches
obligatoires de tout développement.
15
Première partie : La visionneuse d’image
Comme il a été vu précédemment, le logiciel édité par la société « Acropolis »
doit pour sa fonction GED manipuler des documents. Lorsque les documents ont un
format propriétaire comme les « .doc » de Microsoft Word ou les « .pdf » d’Abode
Acrobat il est possible et recommandé d’ouvrir les documents directement avec les
logiciels éditeur, mais aujourd’hui peu de formats d’image sont privés, et il en existe de
nombreux différents.
Ainsi il sera plus simple de centrer la manipulation et visualisation de tous par
un outil unique. De plus un module GED doit permettre d’acquérir une image
simplement, rapidement et doit permettre de visualiser, manipuler et éventuellement
modifier l’acquisition avant la validation de la numérisation.
Dans cette partie sont introduits les concepts de base de l’image, puis expliqué
comment la visionneuse en elle-même a pu être créée.
I. Introduction à l’image
1. L’image
En informatique il existe deux grandes familles d’images. L’image matricielle
(bitmap ou raster), et l’image vectorielle.
La première est une représentation point par point de l’image. En informatique
ce point est appelé pixel. L’image devient alors une matrice de points de couleurs.
Chacun de ces points est codé de façon binaire. L’image est donc lourde en poids mais
rapide de traitements.
L’autre type d’image, l’image vectorielle est définie par des formes vectorielles.
Son affichage est plus lent puisque pour une image il faudra calculer les formes
vectorielles, transformer l’image en matrice de points, puis les afficher. Mais sa
compression est plus performante.
Néanmoins il est possible de compresser une image bitmap, afin de réduire son poids en
mémoire, certaines de ces techniques de compression utilisent la vectorisation de
l’image.
2. La compression
On parlera en général de compression pour les images matricielles.
La compression de l’image consiste à réduire le nombre de bits qui code cette
image et ainsi à réduire sa taille en mémoire. La décompression quant à elle transforme
un fichier d’image compressé en une image. Il existe deux sortes de compression.
La compression sans perte, une image compressée aura la même qualité visuelle
et les mêmes informations sur chacun de ses pixel que la même image non compressée,
la compression est réalisée généralement en simplifiant les redondances des
informations de l’image.
16
La compression avec perte offre généralement de meilleures performances que
la compression sans pertes. Cette fois la compression se joue également sur la qualité de
l’image, c'est-à-dire qu’une fois une image compressée avec cette technique, elle ne
pourra jamais retrouver la même qualité que l’image d’origine. De nombreux principes
de cette compression ont utilisé les faiblesses de la vision humaine, ainsi cette
compression va faire en sorte de simplifier des données sans que l’œil ne s’en
aperçoive.
L’outil GED développé devra pour les 90% du temps traiter des fichiers
numérisés en noir et blanc au format Tiff.
3. Le format TIFF (tagged image file format)
Le format TIFF ou TIF [03] a été conçu dans les années 80 dans le but de créer
un format pouvant être utilisé par toutes les normes d’impression et d’affichage de
l’époque, et dans le but de faciliter la diffusion des images.
Au commencement il était destiné au domaine de la publication assisté par ordinateur
(PAO), puis a été étendu à la CAO, la cartographie …
Avantage autre que sa compatibilité, le format TIFF permet de stocker dans un
même fichier une multitude d’images, pouvant être définies par une infinité de
résolutions et une très grande diversité de formats compression, et de formats de pixel.
Ainsi un même fichier TIFF pourra contenir des images monochromes (pixel
noir ou blanc, codés sur 1 bit), des images en niveaux de gris, des images en couleur
compressées ou non, et même des images gérant la transparence.
Sur ce même principe, chaque image du fichier TIFF pourra avoir un format de
compression différent allant de CCITT (format monochrome) au JPEG en passant par le
LZW et le RLE…
Néanmoins, le .net Framework ne nous permet que de gérer les fichiers TIFF
compressés aux formats RLE, LZW, CCITT3, CCITT4 et non compressés. Par exemple
la tentative d’ouverture d’un fichier TIFF contenant une image compressée au format
JPEG retournera une erreur.
Malgré cela, il faudra tout de même pouvoir manipuler au moins les
formats d’image les plus répandus.
4. Les autres formats d’image.
Il existe de nombreux autres formats d’image, les plus populaires étant le format
JPEG (ou JPG) destiné aux images complexes (photos réelles) et offrant dans ce cas un
excellant taux de compression. Les formats PNG et GIF sont destinés aux images
simples (schémas, images texte, dessins simples), et ils permettent la gestion de la
transparence, le premier offrant un taux de compression plus performant que le second.
Ou encore le format BMP (ou bitmap) format développé par Microsoft et IBM qui
contrairement aux 2 premiers formats n’est pas destiné au web car il offre une
compression médiocre.
17
Bien évidemment, il existe bien d’autres formats d’image mais sont présentés ici
les plus utilisés et les plus performants.
Afin de pouvoir manipuler des images, il faut pouvoir les stocker à l’intérieur du
code dans un objet. Le .net Framework offre pour cela la classe « Image ».
5. L’objet « Image » du .Net Framework
L’objet image est une classe de base fournie par system.drawing du .net
Framework. Il fournit des fonctionnalités pour les classes bitmap (image matricielle) et
metafile (image vectorielle non utilisé dans le projet).
Dans notre cas, nous utiliserons la classe image lorsqu’elle sera suffisante. Par
exemple lorsque l’on voudra connaître la taille, le format de pixel de l’image… Et nous
utiliserons la classe bitmap de manipulation matricielle dans les autres cas. Cette classe
offre la possibilité de manipuler les données physiques de l’image (les pixels), de créer
une image (avec l’objet Graphics), ou encore une fonction de découpe de l’image.
L’objet image permet de stocker une image. Il prend en compte les formats bmp, emf,
exif, gif, icon, jpeg, png, tiff, et wmf.
Cet objet offre de nombreuses informations sur les propriétés de l’image, ses
dimensions, sa résolution, son format d’image et de pixels. Il propose également des
fonctions de rotation, de chargement, de sauvegarde, de manipulation des frames, de
miniaturisation…
L’objet bitmap offre en plus la possibilité de créer de toutes pièces ou bien
depuis une ressource une image. Il propose des méthodes de manipulation de l’image,
de ses pixels, de sa taille, de verrouiller une image en mémoire (pour optimiser sa
lecture/écriture).
6. Le format de pixel
Dans le développement suivant on parlera souvent de format de pixel. Un pixel
est la contraction de l’anglais « picture élément », c’est le plus petit point pouvant être
dessiné par un support numérique (écran, imprimante, scanner…).
Un format de pixel est caractérisé par le nombre de bits qui code ce pixel. Dans
notre cas le plus souvent on parlera de 4 types de code : code sur 1 bit qui donnera une
image en noir et blanc, le code sur 8 bits qui donnera une image en niveau de gris, le
code sur 24 bits donnant une image en couleurs « vraies », et le codage sur 32 bits
donnant une image en couleurs « vraies » avec gestion de transparences.
18
II. Réalisation de la visionneuse
Plusieurs études ont été faites pour réaliser cette visionneuse. Pour être utilisable
commercialement l’ouverture et la manipulation de l’image devait être rapide et fluide,
de plus son déploiement ne devait nécessiter que le .net Framework 2.0.
Une des principales difficultés a été le fait que le .net Framework n’optimisait
pas l’affichage des images : il fallait pour que l’affichage soit fluide et rapide qu’elle
soit en 32 bits par pixels. Ainsi l’affichage de très grandes images provoquait très
facilement un dépassement de capacité et donc un arrêt du programme. Une très grande
image sera composée de 100 millions de pixels, cette valeur peut paraître énorme mais
puisque la société travaille avec des industries, la numérisation d’un plan A0 atteint très
facilement cette limite.
Une autre difficulté a été la création des miniatures qui du fait de sa durée de
traitement rendait l’utilisation de la visionneuse impossible, il a fallu alors utiliser le
principe du thread qui permet d’effectuer des taches « parallèlement » à d’autres (ce
principe sera approfondi par la suite).
La visionneuse étant une application Windows nous allons voir les principaux
contrôles qui la composent. Et par la même occasion introduire ces contrôles.
1. Les contrôles utilisés
La fenêtre Ged
Le contrôle principal de la fenêtre est une ‘pictureBox’ cet élément permet
l’affichage des images ou des objets ‘Graphics’. Il est situé dans un des ‘panels’ du
‘split container’.
Ce split container est un contrôle possédant 2 panels séparés par un séparateur
(‘splitter ‘).
Un panel est un conteneur permettant de grouper d’autres contrôles et ainsi de
pouvoir les identifier. Ce type de contrôles est souvent utilisé pour diviser un formulaire
par fonction.
Un panel peut posséder des barres de défilement « automatique » géré
automatiquement par le .net Framework, ces barres sont actives si un élément d’un
Panel n’est pas dans le zone d’affichage de celui-ci. La manipulation directe, dans le
code, des barres de défilement est très complexe. La Picturebox possède également des
barres de défilement mais sa taille étant fixe dans le Panel, les barres de défilement
automatique se sont avérées inutilisables. Il a alors fallu implémenter la manipulation
d’autres barres.
Le Splitcontainer s’est imposé comme un outil idéal pour séparer la visualisation
des miniatures de l’image, de l’image elle-même.
Enfin la visionneuse comprend une barre de menu, d’outils et d’état. Ces barres
ont le comportement et l’aspect du système d’exploitation lanceur. Ces éléments gèrent
les boutons et les autres éléments qu’ils contiennent, les dépassements de capacité et
son déploiement dans le contrôle.
Elle possède également des contrôles non visibles directement, les menus contextuels
(menu affiché lors d’un clic droit), une boite de dialogue d’impression permettant de
sélectionner les périphériques d’impression, et un élément contenant le document à
imprimer.
19
Figure 1.2.1 : fenêtre de la visionneuse, chemin de fer caché, et fenêtre volante
d’aperçu des miniatures.
Les Autres fenêtres
De nombreuses autres fenêtres ou « boites de dialogue » sont appelées par la
visionneuse, la plupart sont composées de Boutons, de TextBox, et de PictureBox
utilisées en guise d’illustration.
Cependant le formulaire d’aperçu avant impression est plus complexe, et mérite
d’être détaillé.
La fenêtre d’aperçu avant impression
Cette fenêtre est composée de deux éléments, le premier étant une barre d’outils
comportant plusieurs boutons et Splitbouttons (combinaison entre un bouton et un menu
déroulant), et d’un Textbox. Le second élément étant un PrintPreviewControl. Ce
contrôle permet de voir un document tel qu’il sera en sortie d’impression. Il offre
également de nombreux outils de visualisation comme le zoom ou encore l’affichage de
plusieurs pages en même temps.
Ce contrôle affichera un document contenu dans un contrôle ‘Printdocument’. Pour
modifier l’affichage il faudra fermer la fenêtre puis l’afficher de nouveau. Ce contrôle
offre l’avantage d’être automatisé mais il supporte mal la manipulation des grosses
et/ou nombreuses images puisqu’il va charger toutes ces images en mémoire même
celles non n’affichées.
L’aspect graphique de la visionneuse mis au point, intéressons nous maintenant
à un point du cahier des charges, la manipulation de l’image.
20
2. Le déplacement de l’image
Le déplacement de l’image dans un outil de visualisation est un point très
important. Le déplacement doit être rapide, fluide et agréable. Pour cela il a été
implémenté toutes les méthodes classiques de navigation dans une fenêtre.
Autre que le déplacement avec les barres de défilement et la molette de la souris,
il a été utilisé le glisser-déplacer (drag and drop) de l’image.
Le drag and drop
Le glisser déplacer de l’image a été une des principales contraintes du cahier des
charges. Une telle manipulation permet de déplacer une image lorsque l’on fait un clic
gauche sur l’image, puis que l’on déplace la souris en maintenant le bouton gauche
enfoncé. Le déplacement de l’image se fait tout le long de la pression sur le bouton
gauche et le déplacement de la souris. L’image se déplacera alors d’autant que le
déplacement de la souris. Cette fonctionnalité permet de bouger de l’image très
facilement et très agréablement.
Dans le programme la position de la souris est enregistrée lorsque le bouton
gauche est pressé (lors de l’événement mouseDown) sur la PictureBox de l’image. Puis
lorsque la souris bouge au dessus de l’image (évènement MouseMove de la PictureBox)
si le bouton gauche de la souris est cliqué, on calcule le vecteur défini entre la position
précédente et la position courante de la souris.
L’abscisse de ce vecteur est ajoutée à la valeur de la barre de défilement
horizontal de la PictureBox, l’ordonnée à celle de la barre verticale. Puis on initialise la
position précédente à la position courante de la souris. L’évènement MouseMove sera
rappelé à chaque déplacement de la souris sur la PictureBox.
Il faut noter que ce déplacement se fait en modifiant les valeurs des barres de
défilement de la PictureBox. En effet tous les déplacements sont faits grâce à ces deux
barres.
La gestion des barres de défilement de la PictureBox
Les barres de défilements de la PictureBox sont entièrement paramétrables. Il est
possible de désigner : les bornes minimales et maximales, le pas d’incrémentation, la
valeur que prendra la barre de défilement… Si cette valeur dépasse les bornes, le
système renvoie une exception, les bornes ont du être gérées par une fonction vérifiant
la validité de la valeur à insérer. La modification des valeurs de ces deux barres de
défilements modifie la position de l’image.
Tous les déplacements de l’image reviennent à modifier la position de ces deux
barres de défilements, car la position de l’image dans la PictureBox est calculée à partir
de ces valeurs. Suite à chaque changement de valeur de ces barres, l’image est affichée.
21
3. L’affichage de l’image
L’image est affichée dans une PictureBox. La taille et la position de ce contrôle
sont fixes.
Ainsi pour faire bouger l’image, on déplace la position d’affichage de l’image.
Dans tous les cas, toute l’image est affichée même si elle n’est pas entièrement visible à
l’écran. N’afficher que la partie visible imposerait de découper cette partie à chaque
rappel d’affichage, Une telle opération est bien plus couteuse que d’afficher toute
l’image.
Les coordonnées d’affichage de l’image (xImg, et yImg) valent :
xImg = (-lImg + lPict ) / 2 - valeurBarreH
yImg = valeurBarreV
avec valeurBarreH la valeur de la barre de défilement horizontale,
et valeurBarreV la valeur de la barre de défilement verticale.
Figure 1.2.3 : Position de l’image dans la PictureBox
L’affichage de l’image est appelé dans l’évènement ‘Paint’ de la PictureBox.
Cet évènement est appelé à chaque fois que la PictureBox est redimensionnée ou
redessinée, lorsqu’une fenêtre passe dessus par exemple. Il est possible d’accéder à cet
évènement par la procédure ‘Refresh’ du contrôle PictureBox.
L’affichage ne se fait pas en affectant l’objet image de la PictureBox mais grâce à
l’objet ‘Graphics’ de cette même PictureBox.
Zone de l’image
(xImg, yImg) lImg
hImg hPict
lPict
Ymax = himg-hpict
Xmax = (lImg - lPict) / 2
Xmin = (-lImg + lPict)/ 2
Ymin = 0
PictureBox de l’image
22
4. L’objet Graphics
L’objet Graphics permet de dessiner des traits, des formes vectorielles, du texte
formaté ou d’afficher et de manipuler des images. Cet objet représente une surface de
dessin et est utilisé pour créer, afficher ou imprimer du texte ou des images.
Cet objet utilise l’API « Microsoft Windows GDI+ » qui permet d’utiliser l’objet sur un
écran ou une imprimante. Cet api n’accède pas directement au matériel graphique mais
interagit avec les drivers des périphériques.
L’objet Graphics possède de nombreuses méthodes de dessin consistant pour la
plupart à dessiner ou remplir une forme vectorielle, ou une image dans une zone définie
par un rectangle passé en paramètre.
Cet objet ne possédant pas de constructeur, il ne peut être instancié que lorsque l’on
récupère l’un des paramètres d’un événement Printpage ou Paint en contenant un
initialisé, ou par la procédure ‘CreateGraphics’ de certains contrôles.
Par exemple si l’objet Graphics est instancié par le paramètre PaintEventArg de
l’évènement d’affichage Paint d’un contrôle PictureBox, dessiner dans l’objet Graphics
revient à dessiner dans la PictureBox. Il en sera de même d’instancier l’objet par la
procédure ‘CreateGraphics’ de la même PictureBox.
L’instanciation à partir d’un objet Bitmap permettra de dessiner dans cette
image, et celle à partir du paramètre de l’événement d’impression, de dessiner sur la
page de sortie d’imprimante.
Nous avons vu la réalisation graphique de la visionneuse, comment déplacer une
image, et comment l’afficher. Il reste néanmoins deux points à traiter : celui du stockage
de l’image et par la même occasion de la gestion mémoire, et celui des miniatures et du
chemin de fer.
5. Gestion de la mémoire, stockage de l’image « Tiff »
L’affichage à l’écran se fait généralement en 32 bits ; ainsi afficher à l’écran une
image codée en en monochrome (1bit par pixel) reviendra à stocker une image 32 fois
plus grande en mémoire.
Comme nous l’avons vu dans la partie 1.1.3, le format Tiff est un des rares
formats à proposer une gestion multipages et multi résolutions. Cela permet alors de
stocker un grand nombre d’images sous le même objet « Image ».
Une image de type Tiff multipage est appelée « frame » ou encore « page ». Pour
sélectionner une frame d’un objet Image la procédure SelectActiveFrame est suffisante.
Cette procédure prend en paramètre une FrameDimension (pour spécifier la dimension
à sélectionner, ici une « Page ») et le numéro (rang) de la frame à sélectionner, allant de
0 à NBframe -1.
La frame sélectionnée devient alors l’image courante de l’objet image.
Cette particularité permet un gain important de mémoire et de temps de gestion
des multiframes, mais est assez longue d’exécution.
Les manipulations de l’image sont définies dans un objet « ImageScannee »
implémenté pour l’occasion.
23
Dans le cas d’une image existante, les manipulations se font à partir d’un fichier
unique et le changement des frames de l’image se fait grâce à la fonction
SelectActiveFrame.
Dans le cas où l’image est en cours de numérisation, chaque page est un fichier.
Les procédures de manipulation générale de l’image doivent être changées. En effet une
image numérisée a de grandes chances d’être retraitée par la suite (suppression des
pages blanches, remplacement d’une page numérisée…), et la sauvegarde d’une telle
image sous un fichier unique imposerait de réenregistrer de nouveau toutes les pages de
l’image à chaque manipulation. Le temps du procédé est acceptable dans le cas d’une
petite multipage, mais devient intolérable dans le cas contraire.
Appliquer la stratégie d’une image numérisée à une image déjà existante n’est
également pas possible, car l’ouverture de l’image existante demanderait de créer un
fichier par page, et donc de trop nombreux calculs pour les très grandes et très
nombreuses images.
Lorsqu’une image est numérisée, elle est enregistrée et son chemin est ajouté à
l’objet ImageScannée, la miniature lui correspondant est créée, et les informations
concernant le nombre de pages du document sont mises à jour.
La sélection des frames de l’image se fait alors par ouverture du fichier correspondant à
la frame.
6. La création des images miniatures
La miniature d’une image est retournée à l’aide de la fonction de l’objet image
« GetThumbernailImage » qui convertira obligatoirement le format de pixel d’une
image en format 32 bits pargb, et qui fera perdre la propriété multi-page de l’objet
Image. Cette méthode appliquée sur un fichier image multi-page miniaturisera
uniquement sur la frame courante.
La création des miniatures pour une image à plusieurs frames suit la procédure
suivante :
La frame à miniaturiser est sélectionnée, l’image courante (donc la frame
sélectionnée) est miniaturisée, puis cette miniature est affectée à l’image de la
PictureBox créée dynamiquement à cet effet.
Ces opérations sont peu coûteuses en mémoire, puisque les miniatures sont par
définition petites, mais est très coûteuse en temps de calcul, puisqu’elle combine une
sélection de frame, opération déjà longue, à une miniaturisation. Ces opérations
prennent en moyenne 0,5s par image. Lorsque le fichier Tiff ouvert contient plus de 20
pages cette opération de miniaturisation est irréalisable, car elle va rendre inutilisable la
visionneuse pendant un temps trop long.
C’est pour cela qu’elle a été exécutée dans un processus parallèle, un Thread
(Annexe 1). Ce thread étant mis à la priorité la plus basse (lowest) afin de permettre une
manipulation fluide de l’image affichée à l’écran.
Les miniaturisations des images permettent de créer un « chemin de fer » une bande
permettant un aperçu des pages du document. Ce chemin de fer possède de nombreuses
fonctionnalités et est un outil d’aide à la visualisation devenu indispensable.
24
7. La gestion des miniatures, le chemin de fer
De nos jours tous les plus grands logiciels de visualisation de document
présentent un « chemin de fer » c'est-à-dire une zone réservée à l’affichage des
miniatures des pages du document.
Ce chemin de fer permet d’avoir une vue d’ensemble du document, il facilite la
navigation entre les miniatures (surbrillance de la miniature courante, changement de
page par sélection de la miniature) et dans l’image (possibilité de zoom sur une zone de
l’image par sélection d’un cadre sur la miniature, coloration de la zone de l’image
affichée).
Il offre également de nombreuses options de manipulation. Il est possible de
changer la taille des miniatures, l’orientation et la taille du chemin de fer, de le masquer
et de l’ajuster à la taille des miniatures. Enfin il est possible de passer en mode
« diaporama » et d’afficher les miniatures des premières pages des documents image
contenus dans un dossier.
La création du chemin de fer
La création des miniatures des chemins de fer se fait dynamiquement, car on ne
connait pas à l’avance le nombre de miniatures qu’il y aura dans le chemin de fer. C'est-
à-dire que la place des miniatures ne sera pas délimitée à l’avance et qu’il faudra alors
les définir dans le code.
Une miniature sera composée d’une PictureBox contenant l’image d’une page
miniaturisée, d’un Label contenant le numéro de la page dans le document et d’un Panel
contenant ces deux éléments.
Manipulation sur le chemin de fer et les miniatures
Le chemin de fer n’est pas une fonction gadget, c’est un réel outil. Il doit donc
être manipulable et fonctionnel. Dans ce but, de nombreuses fonctionnalités lui ont été
ajoutées.
Tout d’abord les barres de défilement permettent de naviguer très facilement
dans le chemin, puis les boutons qu’il contient offrent la possibilité d’accéder à la
miniature de tête et de queue, précédente et suivante, courante. Enfin la taille du chemin
est manipulable par simple glisser-déplacer du séparateur du SplitContainer, il peut être
masqué et ajusté par clic sur bouton et ajustable par double clic sur le séparateur. Enfin
l’orientation du chemin de fer peut être changée.
Les miniatures offrent elles aussi de nombreuses fonctionnalités : elles possèdent
un menu contextuel propre, le clic sur une d’entre elles permet de la définir comme
image courante. Un cadre dans la miniature permet de savoir où se situe la visualisation
de l’image, il est possible de définir cette zone qui deviendra alors la zone affichée.
Trois tailles différentes peuvent définir les miniatures.
Lorsque la visionneuse est utilisée en mode d’acquisition, il est possible de
déplacer une page par déplacement de la miniature dans le chemin de fer.
La mise en forme des miniatures dans le chemin de fer se fait grâce à la méthode
« MiseEnFormeMiniature ». Cette procédure range les images de façon ordonnée. Dans
le cas où le chemin de fer est vertical, les images sont rangées en priorité en ligne : si
25
une miniature dépasse du Panel on l’affiche sur la ligne suivante et on continue
l’affichage sur cette ligne.
Dans le cas où le chemin de fer est horizontal, les miniatures sont rangées en
ligne quelque soit la place qu’il existe en hauteur. Ces choix on été faits compte tenu du
sens de lecture.
Le changement d’orientation du chemin de fer
Dans un souci de préférence d’utilisation, il est possible de changer l’orientation
du chemin de fer. Il peut être soit vertical à gauche, soit horizontal en bas.
Le changement est possible grâce à la propriété « Orientation » du
Splitcontainer (control contenant le chemin de fer et la PictureBox…) prenant en
paramètre un énuméré (System.Windows.Forms.Orientation) représentant les
valeurs « horizontale » et « verticale ».
Le changement d’orientation change la disposition des panels, mais pas comme
il nous conviendrait dans l’utilisation de la visionneuse. Si le chemin de fer est vertical à
gauche, mettre l’orientation du panel à « horizontal » le met horizontal en haut, et
inversement pour qu’il soit horizontal en bas en mode « horizontal » il faut qu’il soit
vertical à droite en mode « vertical ».
Ainsi il a fallu à chaque changement d’orientation inverser les contenus des deux
panels du SplitContainer. Toutefois, un aspect de clignotement est apparu, dû au
déplacement des miniatures. Ainsi afin de rendre cette opération la plus fluide possible,
avant de faire les changements, le chemin de fer est masqué, puis la PictureBox et les
barres de défilement du Panel principal sont déplacées. Le Panel allant recevoir les
miniatures est masqué, les miniatures sont déplacées enfin le Panel des miniatures est
ajusté au besoin.
Figure 1.2.7 : fenêtre de la visionneuse, chemin de fer horizontal et petites miniatures.
26
Conclusion sur la réalisation de la visionneuse
La fenêtre de visualisation des images a été faite de la manière la plus
ergonomique et plus performante possible. Des icônes et des descriptions ont été
attribuées aux boutons et autres contrôles provoquant des actions. La manipulation du
chemin de fer et des miniatures, le déplacement de l’image permettent une navigation et
une visualisation très fluide et très simple.
Cette fenêtre GED offre une allure beaucoup plus jeune et agréable que
l’ancienne. Néanmoins pour obtenir l’appellation de fenêtre GED elle doit offrir
d’autres fonctionnalités que la visualisation.
27
Deuxième partie : L’implémentation de fonctions à la GED
Pour que la visionneuse décrite dans la partie 1 puisse être utilisée comme
application GED, il faut qu’elle offre des outils autres que la visualisation.
Nous décrirons tout d’abord deux instruments indispensables à la GED
l’impression puis l’acquisition de documents, puis nous verrons trois autres outils qui
vont booster les performances de la GED et simplifier la vie de l’utilisateur c'est-à-dire :
la reconnaissance optique de caractères (OCR), puis l’indexation automatique et enfin la
recherche intégrale des documents : deux techniques dépendantes de l’OCR.
I. L’impression
1. Une impression intelligente
L’impression est gérée par le programme, pour imprimer une image avec le .net
Framework il faut la dessiner sur une page virtuelle, cela permet une très grande liberté
vis-à-vis de l’impression.
Le module GED précédant ne proposait que l’impression d’un document ou
d’une page du document sans que l’on puisse avoir un aperçu avant impression ou
même modifier les paramètres d’impression.
Alors, l’implémentation de l’impression a dû se faire de manière intelligente.
L’idée d’imprimer une ou toutes les pages a été gardée et un aperçu avant impression a
été créé. En plus il a été rendu possible de piloter l’impression, la taille des mages
l’orientation de sortie, mais surtout de pouvoir imprimer plusieurs pages par feuilles (de
1 à 16) pour minimiser la consommation de papier et d’encre, et d’utiliser plusieurs
feuilles pour une page (double ou quadruple la taille de la sortie classique) ce qui
permet d’obtenir de grand format.
Enfin le pilote WIA a permis d’offrir un assistant d’impression pour les
systèmes possédant XP sp1 et supérieur.
Toutes ces implémentations ont été faites de la manière la plus ergonomique
possible dans un souci de simplicité et d’efficacité.
2. L’impression avec le .net Framework 2.0
Le .net Framework ne propose pas réellement d’outils gérant l’impression
automatiquement il faut toujours dessiner manuellement les formes ou le texte dans des
rectangles [05].
L’impression d’un document n’est possible que par l’implémentation d’un
contrôle PrintDocument. Ce contrôle possède 4 événements d’impression :
- BeginPrint appelé avant l’impression.
- QueryPageSetting appelé avant chaque changement de page.
- PrintPage fonction principale imprimant une page du document.
- Endprint appelé à la fin de l’impression.
28
Afin d’imprimer quelque chose, il faut dessiner dans l’objet Graphics donné par
l’élément PrintpageEventAgrs passé en paramètre de l’événement PrintPage.
Dessiner dans ce Graphics revient alors à dessiner dans un rectangle de la taille de la
page de sortie (cf partie 1.2.4)
L’impression d’un texte utilisera la méthode Graphics.Drawstring, et d’une image la
méthode Graphic.Drawimage.
L’appel de l’événement PrintPage permet de dessiner uniquement dans une
page.
Pour imprimer plusieurs pages il suffit de dessiner une page dans cet événement, puis de
changer de page, en mettant à vrai la méthode Hasmorepages de l’objet PrintDocument.
Cette mise à vrai permet de rappeler l’évènement PrintPage lorsque celui-ci est terminé.
Il s’agit donc d’une boucle sur lui-même.
Ainsi l’évènement doit prendre en compte l’avancement de l’impression pour ne pas se
retrouver dans le cas d’une boucle infinie.
Une fois les documents « dessinés » ils sont contenus dans le graphique de l’objet
PrintDocument. Il ne reste alors plus qu’à choisir le périphérique d’impression et la
mise en page associée.
Le périphérique d’impression est défini par un objet PrinterSetting, il permet
d’accéder à toutes les propriétés du périphérique d’impression. Pour le sélectionner il
est possible d’utiliser la boite de dialogue du .net Framework prévue à cet effet
(PrintDialog) ou bien obtenir la liste des périphériques du système courant, définie dans
la liste d’objets System.Drawing.Printing.InstalledPrinters.
Les propriétés de la page : sa taille, ces marges, son orientation, sa couleur sont
définit dans un objet PageSettings, situé dans PrintDocument.DefaultPageSetting (pour
les pages par défaut d’un document), ou PrintDocument.PageSetting (pour la page en
cours d’impression), la propriété de la page sont modifiables directement et par
l’interface PageSetUp.
3. Les interfaces d’impression
L’impression d’un document image a nécessité la création de deux interfaces
graphiques. Celle permettant l’aperçu avant impression et celle permettant la mise en
page.
L’aperçu avant impression
Il est à noter qu’une interface d’aperçu avant impression (PrintPreviewDialog)
est déjà implémentée dans le .net Framework. Mais cette interface n’est pas pilotable et
son look est désuet. Ainsi un formulaire a été implémenté offrant d’autres petites
fonctionnalités et pouvant bien sûr être piloté.
Ce formulaire offre la possibilité :
- de changer de page par boutons et saisies clavier,
- d’afficher à l’écran 1, 2 (1 ligne), 2 (1 colonne), 3, ou 4 images
- d’aligner une image à gauche ou au centre de la page
- de zoomer par 2 boutons et un menu déroulant
29
- d’imprimer par un bouton.
- D’accéder à la fenêtre de mise en page et de gestion des marges et du format de
page de sortie afin de voir le résultat de la modification instantanément dans
l’aperçu.
La fenêtre de mise en page
Cette fenêtre permet de gérer le nombre d’images à imprimer par page en sortie,
ainsi que l’orientation d’impression. Une image illustrera les choix de l’utilisateur.
Il pourra être imprimé plusieurs images sur une même feuille (pour minimiser le
nombre de feuilles en sortie), mais également une image pourra être imprimée sur
plusieurs feuilles (pour maximiser la taille de l’image imprimée)
L’orientation pourra être portrait (coté le plus grand de la feuille verticale) ou
paysage (coté le plus grand de la feuille horizontale).
30
II. La numérisation d’un document : La Librairie Microsoft Windows Image Acquisition (WIA)
La numérisation d’un document ne peut se faire qu’en pilotant des drivers
d’acquisition. Actuellement il en existe 3 grandes sortes : les drivers Twain, ISIS, et
WIA. Néanmoins les 2 premiers sont spécifiques à chaque marque et chaque modèle de
scanneur, alors que le troisième peut être dit « générique »
L’avantage d’utiliser des drivers WIA au lieu de drivers Twain ou ISIS est la
compatibilité de fonctionnement du driver, puisque la façon de piloter un scanneur sera
la même pour tous scanneurs configurés en WIA. Alors que les autres types de drivers
sont spécifiques à la marque et au model du scanneur, il faudrait donc implémenter
l’acquisition pour chaque modèle et chaque marque.
Hors actuellement Acropolis acquiert ses images grâce aux drivers Twain ou
ISIS pour des constructeurs spécifiques et des modèles déterminés, ce qui est
contraignant commercialement, et à l’installation puisque des drivers spécifiques
devront être installés. Ainsi l’acquisition par pilote WIA s’impose.
1. La librairie Microsoft Windows Image Acquisition (WIA)
La librairie Windows Image acquisition [02][10] a été développée en 2000 par
Microsoft pour les systèmes d’exploitation Windows Millenium et supérieurs. Elle est à
la fois un driver et une API Windows.
Ce driver permet de gérer des appareils d’acquisitions, comme les appareils
photos, les scanneurs, ou encore les caméras, de manière « plug and play » et sans que
l’on ait à installer de drivers spécifiques. Son architecture est construite sur la couche
haute de la librairie STI (Still Image Architecture) qui permettait déjà la détection,
l’installation, le support d’évènements, et un driver de communication de bas niveau.
Initialement l’implémentation de l’api WIA v1 est assez complexe et est
manipulable uniquement dans les langages C et C++.
En 2002 Microsoft écrit une librairie « Windows Image Acquisition
Automation Library v2.0 » remplaçant la précédente et étant pilotable en langage
Visual Basic mais n’étant supportée que sur un Système d’exploitation Windows XP
SP1 et supérieur.
L’api fournit des outils basic de manipulation et d’acquisition d’image, ainsi que
des interfaces utilisateurs.
2. Structure de la librairie WIA
La librairie contient de nombreux objets étroitement liés entre eux mais
l’implémentation du projet n’utilise que les principaux objets : ceux symbolisant
l’appareil d’acquisition (objet Device), les propriétés de numérisation (objets Item,
Property), l’image numérisée (objet ImageFile). Il est également utilisé un objet
31
permettant d’afficher les interfaces utilisateur de la librairie (objet CommonDialog), et
les objets permettant la manipulation de l’image (objets ImageProcess, Filter,
FilterInfo).
La librairie comprend d’autres outils non utilisés lors du stage comme l’objet
Vector (une image créée « à la main »), l’objet VideoPreview (permettant l’affichage
d’une video en streaming), l’objet rational…
Etudions de plus près les objets permettant d’acquérir et de manipuler une image.
L’objet Device
Il représente une connexion active à un périphérique d’acquisition. A partir de
cet objet il est possible d’obtenir la plupart des propriétés du scanneur et les propriétés
de numérisation (propriétés de l’objet Device, et de l’objet !item du Device).
Il existe plusieurs moyens d’instancier un objet Device, la plus logique dans le
cadre du stage était de manipuler l’objet CommonDialog (gestionnaire des interfaces)
afin de laisser à l’utilisateur le choix de la sélection du périphérique de numérisation.
L’objets Item
L’objet item contient les « options » de numérisation d’un périphérique
d’acquisition. Il permet de numériser une image, d’accéder et de modifier les propriétés
de numérisation.
Ces propriétés sont directement modifiables dans le code, et peuvent être
instanciées par manipulation de l’objet CommonDialog (gestionnaire des interfaces).
Les objets Properties et Property
L’objet Properties est une structure de données contenant des objets de type
Property. Les objets Property sont toutes les propriétés définissant les options de
numérisation. On les trouve dans les objets Item et Device.
Une propriété est caractérisée par une valeur, un nom, un type, un numéro (PropertyID),
et des bornes à sa valeur. Seule la valeur de la propriété est accessible à la lecture.
L’objet imageFile
Il contiendra une image. Ses méthodes et ses propriétés sont comparables à
celles de l’objet Image du .Net Framework.
Cette image pourra être directement obtenue par numérisation ou encore être chargée
depuis une image déjà enregistrée.
Les objets ImageProcess, FilterInfos, FilterInfo, Filter, Filters
Ces objets servent à la manipulation « physique » de l’image.
L’objet ImageProcess permet d’appliquer des modifications à une image de type
ImageFile. Elle contient 2 objets. FilterInfos structure de données contenant des
FilterInfo et une autre structure de données Filters contenant des objets Filter.
32
Les Filter sont des filtres, donc des fonctions de modification, applicable à une image,
les Filterinfo fournissent des informations sur les filtres pouvant être appliquées à une
image.
L’objet Commondialog : Le gestionnaire des interfaces
La librairie WIA fournit des interfaces verrouillées proposant à l’utilisateur
d’effectuer des opérations de numérisation et d’impression.
Ces interfaces sont celles qu’offre également l’assistant d’impression et de numérisation
de Windows XP, et vista. Ces fenêtres appartiennent à l’objet WIA Commondialog
ShowSelectDevice
Cette fenêtre permet à l’utilisateur de choisir son périphérique (configurer avec
un driver WIA) de numérisation.
showItemProperty
Cette fenêtre offre la possibilité de
sélectionner :
Sur le premier onglet :
- Le nombre de bit par pixel utilisé
pour numériser l’image
- la résolution de numérisation en
pixels par pouce (en gérant les
bornes de résolution de l’appareil)
Sur le second onglet
- l’activation ou non de la
numérisation en recto verso
ShowSelectItem
Cette fenêtre permet l’appel de la fenêtre décrite précédemment et permet la
sélection du format de page à numériser.
ShowDeviceProperty
Cette fenêtre est celle des propriétés du scanner, elles ne sont pas modifiables
ShowWizzardPrinter
Cette procédure appelle le même assistant d’impression que Windows.
Il permet de sélectionner le nombre de copies en sortie, et offre la possibilité de mettre
en forme l’impression.
ShowWizzarScanner
Cette procédure appelle le même assistant de numérisation que Windows, il n’a
pas été utilisé pour la réalisation du projet.
Fenêtre showItemProperty
33
Etudions maintenant comment manipuler ces objets afin de numériser ou de
manipuler une image.
3. L’acquisition d’une image
Une image ne peut être contenue que dans un objet Imagefile. Il existe deux méthodes
pour lancer l’acquisition d’une image :
- par une méthode de l’objet Item du périphérique
- par une méthode de l’objet CommoDdialog prenant en paramètre l’Item du
périphérique. Cette méthode offrant une barre de progression sur l’avancement
de l’acquisition.
Ces deux méthodes retournent un Objet générique pouvant être converti en ImageFile.
4. Manipulation des propriétés de numérisation
Lors de l’acquisition d’un document, la librairie WIA permet de manipuler le
format de pixel de numérisation (choix entre : couleur, niveau de gris, ou en noir et
blanc), la taille de la page en entrée, la résolution en pouce par pixel (ppp ou dpi en en
anglais), la luminosité, et le contraste de numérisation de l’image en sortie, enfin
l’activation ou non du mode duplex (numérisation des deux cotés de la feuille).
Chacun de ces paramètres est manipulable directement dans le code, il est défini
dans les propriétés (objet Property) de l’item du premier rang des items du périphérique
de numérisation et dans les propriétés du périphérique de numérisation.
Pour accéder à la propriété souhaitée, il faut connaître son numéro
d’identification (son propertyId), et modifier la valeur de la propriété possédant cet
identifiant.
'_scanner étant une référence sur le périphérique de numérisation ' « 3088 » numéro de la propriété : "Document-Handling-Select" correspondant au mode duplex du périphérique
Dim ThisProperty as wia.property = CType(_scanner, WIA.Device).Properties("3088") 'modeduplex est vrai si la numérisation va être faite en duplex
modeduplex = (ThisProperty.Value.Equals(5))
Exemple 2.2.4.a : lecture des propriétés de périphérique, numérisation en duplex
'_scanner étant une référence sur le périphérique de numérisation ' « 4103 » numéro de la propriété : "data types" correspondant au format de pixels de numérisation
Dim ThisProperty as wia.property = CType(_scanner, WIA.Device).Items(1).Properties("4103") 'met la valeur en noir et blanc
ThisProperty.Value = 0
Exemple 2.2.4.b : modification des propriétés des items du périphérique, passage en
noir et blanc
34
5. Manipulation d’images
La librairie WIA fournit de nombreux outils de manipulation d’image : la
rotation, le redimensionnement, la superposition, la découpe, la modification des pixels,
la création de fichiers multipage, la compression d’images…
Ces manipulations sont réalisables par application de filtres sur une image.
L’application de filtres fonctionne de la manière suivante :
- Un objet ImageProcess permettant l’application du filtre est instancié.
- Un objet ImageFile contenant l’image allant subir la modification est initialisé.
- L’identifiant d’un nouveau filtre est ajouté à la collection de filtres de l’objet
ImageProcess.
- Le filtre ainsi créé est initialisé suivant la valeur souhaitée pour la modification.
- Enfin la fonction Apply de l’objet ImageProcess est appliquée sur l’ImageFile et
retourne alors un nouvel objet ImageFile contenant les données souhaités.
‘’les variables imageFiletmp2 et imageFiletmp étant 2 objets imagefile instanciés 'déclaration de l'objet permettant la manipulation
Dim imgPro As New WIA.ImageProcess 'ajout du filtre permettant d'ajouter une page dans un fichier image multi page.
imgPro.Filters.Add(imgPro.FilterInfos("Frame").FilterID) 'ajout de l'image imgPro.Filters(imgPro.Filters.Count).Properties("ImageFile").Value = imageFiletmp2 'ajout du filtre permettant la déclaration d'un format de compression
imgPro.Filters.Add(imgPro.FilterInfos("Convert").FilterID) 'ajout du type de format de compresison
imgPro.Filters(imgPro.Filters.Count).Properties("FormatID").Value= WIA.FormatID.wiaFormatTIFF 'application des filtres sur l'image '(ajout de la frame "imageFileTmp2" au fichier tiff composé de l'image"imageFileTmp")
imageFileTmp = imgPro.Apply(imageFileTmp)
Exemple2.2.5.a : application de filtres, création d’un TIFF multipage
35
III. La reconnaissance optique de caractères : La librairie « Microsoft Office Document Imaging »
Un des buts du stage a été de trouver et de piloter une librairie gratuite
permettant la reconnaissance optique de caractères.
Cette reconnaissance permet de détecter tout le texte contenu dans une image de
manière automatique puis de pouvoir éditer ce texte.
Avec cette technique, le texte sauvegardé est associé à l’image d’origine, ceci permet
par recherche textuelle de retrouver l’image contenant une expression donnée ou encore
de pouvoir déterminer la nature de l’image.
Cette reconnaissance a donc pour but unique de détecter le texte sans souci de
mise en page et des formes de l’image, on l’appelle alors : OCR léger.
1. Définition
La reconnaissance optique de caractères ou en anglais Optical Character
Recognition (OCR), est une application informatique ayant pour but de transcrire du
texte manuscrit ou dactylographié contenu dans une image numérique en du texte
informatique éditable. Ce texte éditable pouvant alors être exploité, modifié et
sauvegardé…
2. Histoire
L’idée de la reconnaissance optique de caractères est apparue aux Etats-Unis
dans les années 50 lors de propositions, par la NASA, de processus de gestion
automatique de documents. David Shepard un cryptanalyse a été le principal précurseur.
Les premières ventes de machines à reconnaissance optique de caractères ont été faites à
partir de l’année 1955 au magazine Readers Digest, puis à de nombreuses compagnies
pétrolières pour lire des imprimés de carte de crédit.
De nos jours la reconnaissance optique de caractères est devenue indispensable dans le
domaine du tri postal.
3. Principe de la reconnaissance optique de caractères
La principale technique utilisée pour la reconnaissance consiste à détecter les
différents signes de l’image puis de les comparer à une bibliothèque de symboles.
Certains logiciels d’OCR ont acquis de l’intelligence artificielle, en ayant d’une part des
dictionnaires syntaxiques (vérifiant la cohérence des mots), et grammaticaux (vérifiant
la cohérence des expressions), et d’autre part pour la reconnaissance d’écritures
manuscrites acquièrent la mémoire des typologies des utilisateurs, dans ce cas ils seront
de plus en plus performant au fil du temps.
Lors de ce stage les recherches pour intégrer une librairie se sont très vite
orientées vers les outils proposés par Microsoft la société étant partenaire gold. Il est
alors apparu que la librairie MODI utilisée par l’outil de numérisation de la suite Office
36
proposait une OCR performante, rapide, facilement pilotable et suffisante. Le choix
d’utiliser cette librairie fut vite fait.
4. La librairie « Microsoft Office Document Imaging »
La librairie Microsoft Office Document Imaging 11.0 (MODI) [06] est apparue
avec le logiciel « Microsoft Office Document Imaging » disponible dès 2002 dans la
suite office XP mais ce n’est qu’avec office 2003 que ses fonctionnalités sont devenues
manipulables.
Il s’agit d’une bibliothèque d’objets manipulable par tous langages capables d’intégrer
les composants COM.
Hormis la reconnaissance optique de caractères la librairie MODI permet
l’affichage, l’enregistrement, l’impression, la recherche de textes dans un document
image pouvant être multipage mais de type TIFF et MDI (format multipage de la
librairie) uniquement.
Néanmoins il ne permet pas l’acquisition d’une image, ne garde pas les mises en
forme lors du traitement par OCR, et enfin il ne convertit pas directement l’image en un
document texte au format Word (ce que fait le logiciel Microsoft fournissant MODI).
La librairie propose aussi un contrôle ActiveX permettant de visualiser et
manipuler les images du document MODI.
Enfin cette librairie ne permet pas de reconnaître du texte manuscrit mais utilise
des dictionnaires syntaxiques et grammaticaux.
5. Structure de la librairie MODI
Afin d’effectuer la reconnaissance optique de caractères il est utilisé 4 objets.
L’objet père de la librairie contenant le document image (l’objet Document), la structure
de données Images représentant toutes les pages du document, l’objet définissant une
page (objet Image) et l’objet Layout possédant le résultat de la reconnaissance de
caractères.
6. Le pilotage de la reconnaissance optique de caractères.
Le pilotage de la reconnaissance avec la librairie MODI est assez simple, et reste
relativement rapide compte tenu du travail effectué.
Pour lancer une reconnaissance sur un document image il faut créer un objet Document
de la librairie MODI et l’instancier avec l’image souhaitée contenant le texte à
reconnaître.
La reconnaissance peut se faire par la méthode ‘OCR’, soit sur tout le document
(Ocr sur toutes les pages du document), soit sur une image de la collection Images du
document (Ocr sur une seule page du document). Cette méthode prend en paramètres la
langue de traitement (définissant les dictionnaires utilisés), un booléen définissant
l’autorisation de rotation de l’image pour la reconnaissance, et un booléen autorisant
l’ajustement de l’alignement de l’image).
37
Un événement de l’objet Document permet de visualiser la progression de
l’avancement du traitement par OCR. Le texte reconnu est contenu dans la variable text
de l’objet Layout des images traitées par Ocr.
Annexe 2. Exemple de reconnaissance optique de caractères
IV. L’indexation
1. Introduction
Dans Acropolis, un document peut être associé à un ou plusieurs descripteurs.
Un descripteur étant un mot ou un ensemble de mots décrivant le document.
Cette fonctionnalité permet une recherche extrêmement rapide d’un document si l’on
connaît les descripteurs pouvant lui être associé.
Ces descripteurs sont référencés dans ce que l’on appelle des « thésaurus », sorte
de dictionnaire de mots.
Enfin un thésaurus est associé à un type de document.
La numérisation d’un document associée à la Reconnaissance Optique de
Caractères permet de déterminer tous les descripteurs d’un thésaurus présents dans un
document, et de les associer automatiquement à celui-ci.
Cette opération est appelée indexation, et est réalisable par recherche de
présence de descripteurs dans le texte. Pour que cette recherche soit la plus optimale
possible la définition d’un descripteur va être contrainte.
2. Contraintes associées aux descripteurs
Les descripteurs doivent posséder une casse spécifique. Ils devront être écrits en
majuscules, uniquement avec des chiffres, des lettres et des espaces, sans caractère
spéciaux, accent ou cédille. Ces caractères codés avec la table ASCII sont donc en
décimal : 32 (espace), et compris de 65 à 90 (0 à 9), et de 48 à 57 (A à Z).
Enfin ils pourront être un mot unique ou une chaine de caractères contenant
plusieurs mots séparés uniquement par des espaces.
Ainsi puisque les descripteurs seront de 2 types, il sera utilisé 2 méthodes
différentes afin d’optimiser les performances. Les expressions régulières permettront de
retrouver des descripteurs comportant des espaces dans un texte inchangé, et une
recherche par arbre binaire équilibré sera utilisée pour rechercher un mot unique, ce qui
nécessitera la construction de l’arbre et permettra la suppression des occurrences et
diminuera ainsi la taille de la zone de recherche.
38
3. Les expressions régulières
Définition
Les expressions régulières (également appelées Regex ou Regexp) [04] sont une
traduction controversée de "regularexpressions" que les puristes appelleront les
expressions rationnelles.
Les expressions régulières sont un outil très puissant permettant de vérifier la
syntaxe d'une chaîne de caractères. Plus précisément, c'est vérifier que la chaîne de
caractères à examiner respecte un motif ou une série de motifs.
Dans notre cas on vérifie que les motifs correspondants à une expression sont
présents dans un texte.
L’implémentation
La notion d’expression régulière est nouvelle dans le .net Framework 2.0, les
motifs de recherche seront contenus dans un objet « Regex », la validation de la
présence du motif dans un texte se fera dans un objet « Match » retourné par la fonction
Match de l’objet Regex.
Si la fonction Success de l’objet Match instancié retourne « vrai », la chaine
recherchée sera présente dans le texte.
4. Les arbres de recherche
Définition
Un arbre en informatique est une structure de données, c’est un graphe possédant
une seule source et ne comportant aucun cycle (aucun membre connexe).
Un arbre est composé de Nœuds reliés entre eux par une connexion à direction unique.
Un Nœud est dit « parent » d’un Noeud lorsqu’il le relie, et est dit « fils » lorsqu’il est
relié (par un nœud parent).
Le nœud ne possédant pas de parent, est le plus haut et est appelé « racine ».
Les éléments les plus bas, ceux ne possédant pas de fils sont appelés « feuilles ».
La « profondeur » d’un nœud est le nombre de nœuds parents le séparant de la racine.
Un arbre binaire est un arbre ne pouvant posséder que 2 fils par nœud. Un nœud
sera donc une structure possédant : un élément contenant la valeur du nœud et deux
pointeurs sur deux autres nœuds fils, le « fils gauche » et le « fils droit ».
Un arbre équilibré est un arbre possédant des sous arbres équilibrés. Dans notre
cas l’arbre sera complètement équilibré, c'est-à-dire que tous les nœuds (hormis les
feuilles et les parents des feuilles) doivent posséder 2 fils. Et que toutes les feuilles
doivent avoir, à une hauteur près, la même profondeur.
39
Un arbre binaire est dit trié dans le cas où tout nœud d’un arbre gauche est de
valeurs inférieur à celle de ces parents. Et que tout noeud d’un arbre droit est de valeur
supérieure à celle de ces parents.
Figure 3.5.4 : un arbre binaire de recherche trié
Dans notre cas nous utilisons un arbre binaire équilibré trié.
La recherche dans un arbre binaire trié
La recherche dans un arbre binaire trié est très simple : pour un arbre on
compare la valeur cherchée à la racine. Si elles sont égales la valeur est trouvée, si la
valeur cherchée est inférieure à la racine, on reproduit l’opération sur le sous arbre
gauche, si elle est supérieure on reproduit l’opération sur le sous arbre droit.
La complexité de recherche moyenne dans notre arbre binaire équilibré est alors
en Olog2(N) où N est le nombre de mots de l’arbre. Car au pire cas, le mot se trouve sur
une feuille de l’arbre, donc sur la plus grande profondeur, mais puisque le nombre de
mots stockés dans l’arbre double à chaque profondeur, la profondeur maximale de
l’arbre sera de log2(N)
La méthode de recherche par arbre est légèrement plus rapide d’exécution que la
recherche par expression régulière puisse qu’elle ne garde qu’une seule occurrence des
mots du document. Mais globalement l’indexation d’un document reste extrêmement
rapide.
Dans le cas d’un document de 8000 mots (25 pages) et d’un thésaurus d’environ
300 mots, l’indexation prend moins des 200 millisecondes. Dans le cas critique d’un
thésaurus de 18000 expressions et d’un document de 150 pages (50000 mots) le temps
d’indexation essentiellement par expression régulière reste inférieur à 10 secondes.
40
V. La recherche full-text
La recherche « fulltext » ou « recherche intégrale » permet de retrouver un
document en recherchant une expression contenue ou non dans celui.
Cette recherche intégrale est permise par l’exécution d’une requête SQL disponible
uniquement sur un serveur de base de données contenant SQL Server. [01]
1. Principe
Un processus résidant va collecter tous les contenus des fichiers pouvant être
indexés. Cette recherche du SQL Server permet d’indexer les fichiers textes classiques
mais également certains types de fichiers binaires formatés comme les documents
Offices Word, Excel, Adobe Acrobat…
Une fois ces textes indexés ils vont être intégrés dans une structure de texte
intégrale, reposant sur une théorie complexe [01].
Pour rechercher une information il ne restera plus qu’à exécuter une requête de
recherche dans cette structure à l’aide du mot clef CONTAINS.
Figure 2.5.2 : fenêtre de recherche full texte
2. Implémentation et option de la recherche intégrale
La recherche permet d’utiliser tous les caractères spéciaux et opérateurs logiques
du langage SQL sur les chaînes. L’utilisateur pourra directement entrer une requête
contenant ou non des caractères spéciaux et des opérateurs, ou bien entrer des mots dans
des champs correspondant à une condition, ce qui va par la suite créer une requête.
Le caractère espace est le caractère séparateur des mots et des opérateurs
logiques.
Le caractère spécial étoile (‘*’) symbolise n’importe quelle chaîne de caractères sans
espace.
41
Les caractères spéciaux « guillemet » permettent de rechercher une expression
contenant des espaces, « X Y » retournera vrai pour les documents contenant
l’expression X et à sa suite séparée d’un espace, l’expression Y.
Si X et Y sont deux expressions :
L’opération X AND Y retournera vrai pour les documents contenant les expressions X
et Y.
L’opération X OR Y retournera vrai pour les documents contenant l’expression X ou
l’expression Y, ou les expressions X et Y.
L’opération X AND NOT Y retournera vrai pour les documents contenant l’expression
X et pas l’expression Y.
L’opération X NEAR Y retournera vrai pour les documents contenant l’expression X et
Y et que ces deux expressions sont rapprochées physiquement dans le texte de la
recherche.
Conclusion Nous avons vu dans cette partie comment ont été réalisées l’impression,
l’acquisition, la reconnaissance de caractères, l’indexation et la recherche de documents.
Les fonctions d’impression et d’acquisition sont directement disponibles et
pilotables dans la visionneuse de la partie 1. La reconnaissance optique de caractères et
l’indexation ne peuvent pas être directement utilisées depuis la fenêtre GED, ces deux
étapes sont implémentées, en dur dans le code, suivant les cas et les droits accordés à
l’utilisateur. Enfin la recherche intégrale de documents ne sera pas disponible dans cette
fenêtre.
Tous ces modules couplés à la visionneuse ont été réalisés afin de simplifier
l’utilisation et d’optimiser les performances de la GED. Ils seront destinés à remplacer
la fenêtre GED actuelle.
42
Troisième partie : Les autres travaux
La réalisation des travaux des parties 1 et 2 s’est terminée au deux tiers du stage,
néanmoins ils ont été perfectionnés tout au long des 24 semaines.
L’équipe ayant du retard dans la réalisation de modules, il a été confié des tâches
indépendantes demandant parfois un travail important de recherches et de tests.
Ainsi dans cette partie nous verrons deux travaux réalisés, hors du cadre de la
GED. Pour commencer nous aborderons le formulaire gérant un rapport d’erreur, puis
nous décrirons un contrôle unique permettant la visualisation d’un très grand nombre de
types de documents. Enfin nous traiterons trois points très importants concernant
différentes étapes du développement logiciel : la localisation, l’aide au maintient et le
déploiement.
I. Le rapport d’erreur
Une application finale doit être la plus stable possible, mais il arrive toujours que
des erreurs se produises rendant l’utilisation de l’application inexploitable. Ces erreurs
fatales sont appelées exceptions. Ces exceptions doivent alors être corrigées. Pour cela
l’utilisateur en ayant soulevé une, doit en informer la société et ses informations doivent
être assez précises pour pouvoir retrouver ou reproduire l’erreur.
Dans ce but a été réalisé un rapport d’erreur.
1. Réalisation du rapport d’erreur
Ce rapport peut être : envoyé par courrier électronique à la boîte support de la
société, imprimé, écrit dans le journal d’erreur du logiciel ou encore simplement
visionné.
Il fournit :
- Des détails sur le système (le nom du poste, les adresses IP de la machine, la
version du système d’exploitation, le nom et les droits de l’utilisateur), des
détails sur la connexion du logiciel (le nom de l’utilisateur Acropolis, et la base
de données courante) ces deux points précisant l’environnement de l’exception.
- Des détails sur l’exception, son type, sa description, sa source, la trace de la pile
au moment de son soulèvement. Ces informations permettant de retrouver la
fonction où a eu lieu l’erreur.
- Des détails sur l’application elle-même : le nom de l’application concernée, sa
version, la date de sa dernière modification permettant de savoir si l’application
est à jour, les assemblés (noms et versions) qu’utilisent l’application.
43
De plus l’utilisateur a la possibilité d’ajouter des commentaires pouvant préciser
les manipulations faites et le contexte de l’erreur.
Enfin une capture d’écran prise au moment de l’erreur peut être jointe. Cette
capture permet de connaître entre autres la fenêtre responsable de l’erreur.
Ce rapport peut être imprimé avec ou sans la capture d’écran en suivant la même
technique décrite dans la partie 2.1.2.
Le rapport est envoyé par courrier électronique grâce à une librairie personnelle
de la société.
2. L’appel du rapport d’erreur
L’appel du rapport d’erreur se fait dans les évènements de l’application. La
fenêtre du rapport d’erreur est affichée dans l’événement appelé lorsque le système
récupère une exception non gérée.
Un exemplaire d’un rapport d’erreur est proposé Annexe 3.
II. Réalisation d’un contrôle d’aperçu multi documents
Dans une application gérant plusieurs types de fichiers il est agréable de pouvoir
visualiser un document sans avoir à l’ouvrir dans une application externe. La
visualisation doit au contraire de l’application limiter l’édition du document, et en aucun
cas permettre la modification de celui-ci.
Il a été trouvé une solution pour pouvoir afficher tout type de fichier dans un
même contrôle, toujours en partant du principe annoncé dans les parties précédentes,
c'est-à-dire en utiliser des composants du .net Framework ou gratuits et pouvant être
pilotés.
Il pourra être ouvert des documents de type texte, Html, Xml, image, Office
(Word, Excel, Visio, Power Point, Project) et Pdf.
1. Visualisation des images
Les images seront ouvertes par la visionneuse réalisée dans la partie 1.
2. Visualisation des documents pdf et textuels
Le contrôle WebBrowser du .net Framework possédant les propriétés du
navigateur internet de Microsoft (internet explorer) installé sur le poste courant permet
cela. Une application sera gérée par une instance ActiveX du contrôle (application
permettant de dialoguer entre deux applications), cette application sera lancée en fond
(visible dans la liste des processus) et pourra être pilotée.
Ce contrôle sera utilisé dans le cas d’un document texte (.txt), html, xml. Ces
documents étant interprétés en langage html pour être affichés ne seront donc pas
éditables. Et pdf qui sera ouvert par une ActiveX d’Adobe Acrobat, ou d’Adobe Reader
et sera également non modifiable.
44
3. Visualisation des documents Offices
La commande ActiveXInstance du contrôle WebBrowser permet d’obtenir la
référence du document ouvert (objet Document pour Word, et Visio ; objet WorkBook
pour Excel).
Néanmoins, cette référence n’est pas assez pilotable pour pouvoir utiliser
correctement et proprement le contrôle WebBrowser.
Principalement il n’est pas possible d’ouvrir ou de fermer d’autres documents à
partir de cette référence. De telles opérations sont normalement réalisables à partir de
l’objet Application situé au dessus de la référence du document mais celui-ci n’est pas
réellement présent ici. Ainsi piloter l’ouverture (ouverture en lecture seule), ou la
fermeture (permettant la bonne destruction mémoire des processus des applications
lanceuses) est un problème.
Ainsi pour les applications Microsoft Office essentiellement Word, Excel, Visio,
il sera utilisé un contrôle pilotant également un WebBrowser mais étant beaucoup plus
propre, offrant ses propres outils de pilotage (ouverture et fermeture de document,
masquage/affichage simple des barres, gestion des évènements d’enregistrement,
impression…) et pouvant être piloté de la même manière que le contrôle WebBrowser.
Ce contrôle est fourni par Microsoft réalisé pour Visual C++, mais pilotable par
langage VB et VB.net. Il est fourni par une Ocx devant être enregistrée (regsvr32)
« Dsoframer.ocx » [08].
4. Conclusion au contrôle
Pour conclure, les documents images seront ouverts par le contrôle GED en
mode « lecture seule », les fichiers Office par le contrôle Microsoft « DsoFramer » sans
ces barres d’outils, de menus et de titres, et avec ses documents protégés contre
l’édition. Les types pdf, texte et html par le contrôle WebBrowser du .net Framework
sans autoriser la navigation et les raccourcis claviers.
Un contrôle unique regroupant ces trois types de contrôle appellera le bon
suivant la nature du document à ouvrir.
45
III. La localisation
La localisation est une étape dans le développement d’un projet consistant à
définir une application dans plusieurs langues. Une même application pouvant être
localisable dans une infinité de langages à la fois.
Dans notre cas, la société fournit bien sûr une version française mais également
anglaise.
Sous Visual studio 2005 la localisation d’un langage consiste à définir les
différences situées entres les différentes versions d’applications dans les ressources de
l’application, fichiers définissant les images, les chaînes de caractères propres à chaque
classe. Chaque langage devant posséder son fichier ressource propre.
Pour la localisation des interfaces, les différentes ressources sont créées
automatiquement : il ne reste alors plus qu’à les traduire.
Dans le cas de chaines écrites en dur dans le programme il faut définir une
ressource pour chaque expression, dans chaque fichier ressource de chacun des langages
souhaités. L’accès à la chaine se fera alors par la ressource du projet, qui utilisera
automatiquement le bon fichier ressource suivant le langage souhaité.
46
IV. Les commentaires L’explication d’un code par l’ajout de commentaires permet sa compréhension
ce qui va ainsi rendre possible son entretien et son amélioration.
En Visual Basic il est possible de générer automatiquement un fichier XML
d’aide, décrivant les membres et les types d’une classe, ce qui va permettre de concevoir
facilement un petit manuel de la classe.
Ces commentaires sont également utilisés par le compilateur et par
l’IntelliSense. Le compilateur va vérifier la cohérence entre les méthodes et paramètres
déclarés en commentaire et ceux réellement présents. L’IntelliSense va utiliser ces
commentaires, pour résumer la fonctionnalité d’une méthode, décrire les paramètres de
cette méthode, décrire une classe… (cf. introduction).
Pour déclarer un commentaire à mettre dans le fichier XML, il suffit de le mettre
entre balises (n’importe lesquelles) sur la ligne du dessus du membre voulant être
commenté et de précéder ces balises par 3 cotes simples.
Le fichier XML sera alors créé lors de la compilation du projet, il possédera le même
nom que le projet mais avec l’extension ‘.xml’
Afin que l’IntelliSense utilise ces commentaires, les balises doivent être
spécifiques. La balise <summary> décrira le membre commenté, les balises <param>
déclareront et énonceront un paramètre du membre et obligera le compilateur à vérifier
que le paramètre décrit existe bien…
(a)
(b)
Exemples 3.4.1 : le cartouche de la fonction OuvrirImage (a), et son aide compilée(b)
47
V. Le déploiement
Le déploiement d’une application consiste à créer un automate capable
d’installer, et de désinstaller correctement une application ainsi que ses dépendances.
Les dépendances étant toutes les bibliothèques, ou encore fichiers nécessaires à son
utilisation.
Dans le cas de la visionneuse il faut installer les polices de caractères aidant à
générer les images codes barres, la librairie de numérisation « WiaAut.dll » (permettant
la numérisation) n’étant présente d’origine que sur les systèmes Vista, la librairie
« Modi.dll » (permettant la reconnaissance optique de caractères) si la suite office 11 est
installée sur le poste, les 2 librairies précédentes interprétées pour qu’elles deviennent
compatibles suivant n’importe quel systèmes d’exploitation, le .net Framework s’il n’est
pas déjà installé, et enfin la librairie contenant la classe définissant la visionneuse.
L’emplacement des dépendances doit être spécifié, les librairies directement
utilisées dans le programme doivent être en général dans le même répertoire que
l’exécutable concerné. Les librairies dépendantes au système d’exploitation doivent être
enregistrées dans la base de registre et insérées dans le dossier ‘système’ du système
d’exploitation, les polices de caractères doivent être enregistrées dans le dossier ‘font‘
du système d’exploitation…
Le déploiement avec Visual Studio 2005 permet de détecter automatiquement
les dépendances aux librairies interprétées, de déterminer les fichiers de sorties et le
niveau d’enregistrement pour chaque fichier, et d’instaurer des conditions au
déploiement. L’exécutable d’installation est sorti en .MSI, il permet en plus de
l’installation et de la suppression automatique de pourvoir réparer l’application.
Cette automatisation de l’installation est un point très important. Il limite les
problèmes à l’installation et ainsi réduit les difficultés et le temps du déploiement et à la
maintenance.
Conclusion Les trois dernières étapes décrites dans les points précédents sont extrêmement
importantes. Une application ne pouvant être maintenue est destinée à disparaître, une
autre ne pouvant être déployée ne pourra pas naître. Un développement représente un
gros investissement en temps et en argent, de tels destins ne sont pas permis.
C’est pourquoi les différents travaux décrits dans ces parties ont été implémentés
dans le but d’être utilisés.
48
BILAN
Un bon moyen de dresser un bilan est de voir comment les travaux réalisés ont
été utilisés par la société. Cela traduit alors l’accomplissement de l’implémentation du
projet.
I. L’intégration
1. Le module courrier
Le module Courrier est une application de gestion de document courrier
numérique multicanaux (départ, arrivée, interne). Il a pour but de faciliter les procédures
de distribution et de traitement des courriers.
Il permet entre autres la visualisation, la diffusion, le suivi et l’acquisition de
courriers. La recherche de documents se fera par date de créations, rédacteur du
courrier, type d’acquisition, et chrono.
La visionneuse GED intervient dans la partie visualisation et acquisition de
documents image. La visualisation se fait en « lecture seule » afin de ne pas pouvoir
éditer et modifier le document qui dans le cas contraire perd sa valeur de document
original. Les fonctions sont alors le zoom, la navigation, et la rotation de l’image (les
changements ne sont pas enregistrés à la fermeture). La visualisation des documents est
possible soit par une fenêtre indépendante qui sera ouverte à cet effet ou bien dans une
fenêtre d’aperçu intégrée dans la fenêtre principale. L’aperçu se fait par le contrôle de
visualisation multi documents décrit dans la partie précédente.
L’acquisition permet de numériser un document image, puis de le modifier. Lors
de la validation de la création du document, une reconnaissance optique de caractères
est faite afin de créer un fichier texte contenant les informations de l’image et allant lui
être associé.
2. Le module AcroGed
Ce module est destiné à la gestion des documents, il propose la saisie de
documents, la reconnaissance optique de caractères, l’indexation automatique et le
recherche intégrale.
Il propose la visualisation, la saisie de documents, et la recherche de fichiers par
sélections de descripteurs.
L’utilisation de la visionneuse GED et du contrôle d’aperçu multi documents est
la même que pour le module Courrier. A la différence qu’à la fin de l’acquisition du
document, le contenu de l’image est indexé dans un thésaurus spécifique à la nature du
document.
49
3. Conclusion à l’intégration
La visionneuse a été intégrée à deux modules, dont un allant être commercialisé
dans le mois de février. Le contrôle multi documents va lui aussi être intégré dans le
module distribué. Enfin le formulaire de rapport d’erreur sera fourni dans toutes les
applications « .net » de la société.
A moyen terme la visionneuse GED devra dans la version 4 d’Acropolis
remplacer la fenêtre GED actuelle.
II. Conclusion au travail
Les travaux réalisés lors de ce stage portaient généralement sur la gestion des
documents. L’acquisition, la visualisation, l’impression, l’indexation et la recherche ont
été réalisées, ce qui pourrait permettre de constituer la couche haute d’une petite
application de gestion électronique de documents, et plus particulièrement de
documents image.
Ces modules sont capables d’être déployés et ne requièrent généralement que le
.Net Framework et l’enregistrement de composants COM gratuits. La visionneuse
(parties 1 et 2) est exploitable dans une DLL « GedLib » et peut être installée facilement
par un « .MSI ». Enfin les implémentations ont été commentées le mieux possible.
Néanmoins les points développés précédemment pourraient être améliorés.
La numérisation se limite aux protocoles WIA, et STI ce qui est très suffisant
pour les périphériques récents, mais pose problème pour modèles ne proposant que des
drivers Twain ou ISIS.
La reconnaissance de l’image ne se fait que pour les caractères dactylographiés,
il serait intéressant de développer des modules de traitement d’images, et ainsi
reconnaître les caractères manuscrits ou encore les formes, ce qui permettrait de pouvoir
lire des codes barres ou reconnaître si une case d’un formulaire a été cochée…
L’équilibrage des arbres binaires utilisés pour l’indexation pourrait être optimisé
en utilisant des rotations d’arbres.
Enfin la recherche intégrale n’est disponible que sur les systèmes SQL serveur.
50
Conclusions
Ce stage réalisé dans une petite infrastructure m’a permis de découvrir les
réunions, les contraintes les avantages et le travail dans une équipe technique, de
percevoir les responsabilités que pouvait avoir le développeur, le chef de projets,
l’analyste programmeur, l’ingénieur, les commerciaux ou encore le directeur technique.
De plus l’entreprise étant partenaire gold de la multinational Microsoft, cela m’a
permis de découvrir leurs outils que j’ai trouvé simples et performants. J’ai ainsi pu
apprendre à utiliser Visual Basic 2005, le .net Framework, Visual Studio et un
contrôleur de code « source Team Foundation Server », qui sont des compétences
techniques de plus en plus recherchées par les entreprises.
Le travail réalisé n’était pas simple car hormis le concept d’évènementiel et mes
notions de programmations, je ne connaissais rien du langage, des librairies et modèles
objet utilisés, ni même comment les utiliser.
J’ai alors compris la difficulté et la puissance de la gestion du travail en équipe,
sur des projets distincts, et des solutions finales séparées, la complexité et l’importance
du déploiement, du suivi, de l’assistance, et de la maintenance d’un produit.
J’ai du faire de nombreuses recherches essentiellement sur internet. Très peu de sources
traitaient de mes problèmes et elles étaient souvent incomplètes. Il a alors fallu
rechercher des solutions par moi-même, comprendre leurs fonctionnements, puis les
tester et souvent recommencer. J’ai trouvé cela passionnant, cela m’a permis
d’apprendre et m’a fait prendre conscience du métier de développeur.
Ces travaux m’ont réellement donné envie de pouvoir conduire mes propres
projets, de développer des solutions, et de répondre à des attentes.
Ils m’ont donné envie de poursuivre dans la voix du développement, peut être pas
spécifiquement dans le domaine de la gestion et la base de données, mais au moins de
m’y intéresser.
51
Bibliographie
[01] Cencini Andrew, « Fonction de recherche en texte intégral SQL Server 2005 :
Description et améliorations apportées », Microsoft Corporation, Décembre 2003.
[02] Laudat Jerry, « Can you use WIA instead of Twain? »,
http://www.eggheadcafe.com/, 23 octobre 2006.
Mélantois Frédéric, « Traitement d’images sous .NET, partie 1 », .NET passionnément,
tout simplement, novembre 2005.
Mélantois Frédéric, « Traitement d’images sous .NET, partie 2», .NET passionnément,
tout simplement, 7 février 2006.
[03] Monteix Christian, Le format tiff et ses modes de compression , Eyrolles.
[04] Morand Louis-Guillaume, « Utilisation des expressions régulières en .Net », 08
mars 2005.
Powell Bob, «La FAQ de Bob Powell.net», http://www.bobpowell.net/.
Richard Clark, Au cœur de Microsoft Visual Basic .Net , Microsoft Press.
[05] Richard Clark, « Imprime moi un mouton », Au cœur de Microsoft Visual Basic
.Net , p 174-183, Microsoft Press.
Richard Clark, « c2i.fr – Le premier portail.net », http://www.c2i.fr/.
Richtern Jeffry, .Net Framework, Microsoft Press.
Sempf Bill, Visual Basic 2005 pour les nuls, first interactive.
Sorel Nicolas, « VBfrance.com», http://www.vbfrance.com/.
[06] Welker Martin, « OCR with Microsoft Office», codeproject.com,
http://www.codeproject.com/csharp/modi.asp , 29 septembre 2006.
ImageControls3, programmer’s guide, kofax.
[07] L’équipe d’Odyssée Ingénierie, Guide de l’utilisateur, Odyssée Ingénierie, janvier
2002.
[08] « Visual C++ ActiveX Control for hosting Office documents in Visual Basic or
HTML», Microsoft Corporation, 23 novembre 2006.
[09] « MSDN», http://msdn.microsoft.com/, Microsoft Corporation..
[10] «WIA Automation», http://www.microsoft.com/downloads, Microsoft
Corporation, 2002.
1
Annexes
Annexe 1 : Les threads
1. Définition
Le concept de thread parait souvent abstrait au programmeur débutant, pourtant
les threads sont utilisés partout dans nos ordinateurs. Cet outil peut être considéré
comme un petit processus lancé par un processus principal (étant lui aussi un thread du
Système d’exploitation en quelque sorte), et exécuté parallèlement à ce dernier.
Ainsi lorsque le système d’exploitation et la machine supportent ce concept,
l’ordinateur traitera à tour de rôle les threads ce qui permettra qu’aucun ne soit bloqué.
Dans notre cas un thread parallèle, au thread de l’application principale, est
utilisé lorsque le programme doit exécuter une opération si couteuse en temps de calcul
qu’elle va rendre inutilisable l’application principale, ce qui va donner au programme
l’impression qu’il a bloqué, alors que celui-ci travaille.
2. Les priorités
En VB un thread peut avoir différents niveaux de priorité pour ainsi favoriser
certaines applications essentielles, et en défavorisant d’autres plus secondaires.
Un thread possédant une haute priorité sera appelé plus souvent et traité plus longtemps
qu’un thread de basse priorité.
Visual Basic 2005 possède 5 niveaux de priorité défini dans le paramètre
Priority de l’objet thread, en allant de la plus haute à la plus basse valeur de priorité :
Highest
AboveNormal
Normal
BelowNormal
Lowest
3. La destruction
La destruction d’un thread n’est permise que si le thread devant être détuit est en
cours d’exécution ou actif (isAlive). Elle est réalisée soit par la procédure de l’objet
thread Abort (qui déclenche une exception de type ThreadAbordException sur le thread
appelant pour commencer le processus d'arrêt du thread), soit automatiquement lorsque
les taches qui lui ont été assignées ont été réalisées.
Néanmoins il faut faire attention à ce que les threads soient bien détruits lorsque
le programme principal est fermé, dans le cas contraire une exception sera soulevée.
2
Annexe 2 : Exemple de traitement par Reconnaissance optique de caractères
(figure 2) par la librairie MODI de l’image normesSynthaxique.tif (figure 1).
Figure 1 : Image normesSynthaxique.tif (2500x3400 1bit/pixel)
3
Normes syntaxiques du code
Définition de la charte syntaxique à adopter pour tout développement (.NET) à venir.
Les minuscules / majuscules ont leur importance. Il est important de commencer à
respecter ces règles car nous allons mettre en place par la suite une analyse syntaxique
automatique.
Les accents dans les noms de variables, de classes ou de fonctions sont à proscrire.
Syntaxe des Attributs et Propriétés
Locales à une fonction nom Variable
Attribut privé
Attribut protected
Attribut public
Property
nomAttribut ou pNomAttribut
nomAttribut ou pNomAttribut
NomAttribut (Ne devrait pas exister car ilfaut
preférer les attributs privés exposés par une
property publique)
NomPropriété
Syntaxe des Fonctions
Fonction d’une classe NomFonction
Paramètre d’une fonction nomParamètre
Syntaxe des Contrôles
Textbox
Txt + Nom Contrôle
Label
Lbl + Nom Contrôle
Bouton
Btn + Nom Contrôle
CheckBox
Chk + Nom Contrôle
RadioButton
Rdo + NomContrôle
ListBox
Lst + Nom Contrôle
Menu
Mmi + Nom Contrôle
ComboBox
Cmb + Nom Contrôle
Timer
Tmr + Nom Cont rôle
ProgressBar
Prg + Nom Cont rôle
StatusBar
Sta + NomContrôle
ToolBar
Tlb + NomContrôle
DataGrid
Dg + NomContrôle
Figure2 : Texte de l’image normesSynthaxique.tif reconnu par OCR
4
Annexe 3 : Exemple de compte rendu de rapport d’erreur.
Figure 1 : Page 1 du rapport d’erreur
5
Figure 2 : Page 2 du rapport d’erreur contenant la capture d’écran
6
Annexe 4 : Diagramme de classe simplifié de la visionneuse d’images
Figure 1 : Diagramme de classe simplifié de la visionneuse d’images
7
Annexe 5 : Aperçu de la visionneuse d’image.
Figure 1 : fenêtre de la visionneuse, avec chemin de fer vertical et moyennes
miniatures.
Résumé
Le stage a eu lieu dans le Rhône (69), dans la société Odyssée Ingénierie,
productrice de progiciels et de solutions de services informatiques, essentiellement
portés sur la gestion de la production administrative électronique.
Le travail consistait en la réalisation de plusieurs projets tous réalisés en langage
Visual Basic 2005 couplé au .net Framework 2.0.
Il a été réalisé dans un premier temps, une visionneuse de documents image
(essentiellement du TIFF multi page) prenant comme fonctionnalités (en dehors de la
visualisation et des manipulations de base de l’image) : la possibilité d’impression, un
outil d’acquisition par librairie WIA, de reconnaissance optique de caractères par
librairie MODI, d’indexation et de recherche "fulltext" de documents.
Puis dans un deuxième temps, il a été implémenté un rapport d’erreurs et
plusieurs contrôles permettant la visualisation et l’ouverture de tous types de
documents.
Mot clé BRANCHE
D’ACTIVITE
ECONOMIQUE
Mot clé METIERS Mot clé DOMAINE
TECHNOLOGIQUE
Mot clé APPLICATION
PHYSIQUE DIRECTE
18- SSII / Services
informatique
15- Etude et
Conseil
05- Informatique
02-Algorithmes
11- Développements
logiciels
04-Logiciel- de
gestion