Mot exact Résultats par page

Index des mots-clés

AGENDA PERSONNEL
ALBUM PHOTO (Script)
ANTI SPAM
APICULTURE
BAECKEOFFE
BREDELE
BUCHE DE NOEL
C++
CADRE
CASSOULET
CHARLOTTE AUX FRUITS
CODAGE ADRESSES MAIL
CODE 2 DE 5 ENTRELACE
CODE 3 DE 9
CODE 128
CODE PDF417
CODES BARRE
CODE POSTAL
CODES VIDEOTEXT
COLOMBO DE PORC
CONFITURES
CONGOLAIS
CORNICHONS AU VINAIGRE
COUARAIL
CREMES
CRUMBLE
CYBERMUT
DADANT
DATAMATRIX
DDE
DOMBRE
DOUBLE NAT
DYNDNSUPDATE
EAN 13
EAN 128
ELECTRONIQUE
ENVOI DE SMS
ESPACE MEMBRE
EURO
EXEMPLES VB6
FAR
FARCE
FAVORIS
FONCTIONS
FONCTIONS EN C++
GATEAU ROULE
GRATIN LORRAIN
GUACAMOLE
IMPRIMANTES RESEAUX
INSTANCE UNIQUE
KIT VB4
LANGSTROTH
LIQUEUR
MADELEINES
MAISONS
MAQUEREAUX AU VIN BLANC
MAQUEREAUX (Rillettes)
MARINADES
NMEA
NOUGATINE
PAIN
PATE A TARTE
PDF417
PHP
PIC
PLANS DE MAISON
PLANTEUR
POMMES
POULET COCO
PROCEDURES
PROGRAMMATION
RATATOUILLE
RECETTES DE CUISINE
RESSOURCES RESEAUX
RHUBARBE
R.I.B.
RILLETTE DE MAQUEREAUX
ROUTINES
RUCHE
SAUMON EN CROUTE
SCRIPTS
SITES
SLICE
SMS
SOUPE DE COURGE
TABLE PERIODIQUE
TARTE
TATIN (Tarte)
TARTIFLETTE
USB
VIDEOTEXT
VISUAL BASIC
VOIRNOT
WNTIPCFG

Mot exact Résultats par page
I
N
D
E
X

Le code PDF417


English version

Ce code fait partie de la famille des codes à 2 dimensions, c'est en fait un code de plusieurs lignes qui peut encoder jusqu'à 2700 octets d'où son nom de "Portable Document File". L'encodage se fait en deux étapes : tout d'abord les données sont converties en "mots-clé" (Encodage de haut niveau) puis ceux-ci sont convertis en motifs de barres et d'espaces. (Encodage de bas niveau) De plus un système de correction des erreurs à plusieurs niveaux est inclus, il permet de reconstituer des données mal imprimées, effacées, floues ou arrachées. Dans la suite de cet exposé, l'expression "mot-clé" sera abrégée en MC.

La structure générale.

 

 

 

 D

 é

 b

 u

 t

 

 

 G1

 D15

D14

 Dr1

 

 

 

 F

 i

 n

 

 

 

 

 G2

 D13

 D12

 Dr2

 G3

 D11

 D10

 Dr3

 G4

 D9

 D8

 Dr4

 G5

 D7

 D6

 Dr5

 G6

 D5

 D4

 Dr6

 G7

 D3

 D2

 Dr7

 G8

 D1

 D0

 Dr8

 G9

 C3

 C2

 Dr9

G10

C1

C0

Dr10

L'encodage de bas biveau.

L'encodage de haut biveau.

 Valeur 

 Majuscules 

 Minuscules 

 Mixte 

 Ponctuation 

0

A

a

0

;

1

B

b

1

<

2

C

c

2

>

3

D

d

3

@

4

E

e

4

[

5

F

f

5

\

6

G

g

6

]

7

H

h

7

_

8

I

I

8

` (Quote)

9

J

j

9

~

10

K

k

&

!

11

L

l

CR

CR

12

M

m

HT

HT

13

N

n

,

,

14

O

o

:

:

15

P

p

#

LF

16

Q

q

-

-

17

R

r

.

.

18

S

s

$

$

19

T

t

/

/

20

U

u

+

21

V

v

%

|

22

W

w

*

*

23

X

x

=

(

24

Y

y

^

)

25

Z

z

PON

?

26

SP

SP

SP

{

27

MIN

T_MAJ

MIN

}

28

MIX

MIX

MAJ

 ' (Apostrophe)

29

T_PON

T_PON

T_PON

MAJ

La détection et la correction des erreurs.

Niveau

Nombre de MC requis par la correction
dont 2 pour la détection ( 2
niveau + 1)

Nombre maximum de MC de données

0

2

925

1

4

923

2

8

919

3

16

911

4

32

895

5

64

863

6

128

799

7

256

671

8

512

415

Nombre de MC de données

Niveau recommandé

1 à 40

2

41 à 160

3

161 à 320

4

321 à 863

5

La création des codes barres.

Maintenant que nous savons créer le motif d'un code barre, il nous reste à le dessiner à l'écran et à l'imprimer sur papier. Deux approches sont possibles :

Il semble qu'il n'y ait pas de police gratuite pour codes barre PDF417 sur le net. J'ai donc décidé de dessiner entièrement cette police et de la proposer en téléchargement. Le fait qu'il y ait 929 MC avec pour chacun 3 variantes va nous obliger à diviser les 17 bits d'un MC en plusieurs parties. Mais diviser 17 ... hein ... il va falloir ruser. Si l'on considère que le premier bit est toujours "1" et le dernier "0", on peut imaginer un séparateur de forme "01" et il ne reste plus que 15 bits dans chaque MC; on peut alors diviser ces 15 bits en 3 quintets,. Il existera alors 25 = 32 quintets possibles affectés à 32 caractères de la police. Le programme d'encodage sera chargé de transformer les 3 quintets de chaque MC en une chaine de 3 caractères.
La police va donc contenir les caractères suivants :

La chaine de caractère à envoyer à l'imprimante ressemblera donc à quelque chose comme : +*gfA*jhD*BAl*gCt*hjk*- et ceci pour chaque ligne.

La police " pdf417.ttf "

Cette police contient les 35 motifs décrits ci-dessus. Les codes de début de ligne et de fin de ligne intégrent des marges de 2 modules. La hauteur est égale à 3 modules ce qui correspond au cas le plus courant.

Copiez ce fichier
dans le répertoire des
polices, le plus souvent :
C:\WINDOWS\FONTS

Encodage d'un code pdf417

Le programme devra se dérouler en 4 étapes :

Du fait de l'interaction entre les différents modes de compression et les différents sous-modes du mode "texte" il est difficile de faire une optimisation à 100%. Le programme va donc décomposer la chaine en "blocs" de type "numérique", "texte" ou "octet" puis il repassera certains blocs dans un autre mode si la surcharge dûe aux MC de commutation est supérieure au gain de compression. On ne pourra pas tenir compte de tous les paramètres tels les rembourrages, les gains sur les multiples de 6 octets, les commutateurs mono-caractère ou les commutations entres sous-modes du mode "texte" : il faudrait pour cela plusieurs milliers de lignes de programme.
Une autre difficulté vient de la grandeur des nombres manipulés, par exemple l'opération "Modulo 900" appliquée à un nombre de 44 chiffres engendre inévitablement un dépassement de capacité; le programme devra effectuer ce type de calcul par étapes.

Un petit programme pour tester tout ça


Voici un petit programme écrit
en Visual Basic 6 ; le fichier
d'installation copiera le
programme, les dépendances Visual
Basic ainsi que les
fichiers sources et la police.

Fichier d'auto-installation :

Fichier ZIP sans installation :

La fonction PDF417$ fait environ 500 lignes, je ne la reproduis donc pas ici, il suffit de la récuperer dans le fichier "form1.frm" qui se trouve avec le programme ci-dessus ; avec le programme d'auto-installation le fichier "form1.frm" se trouve dans le répertoire du programme, sous-répertoire "sources".
La fonction s'appelle de la manière suivante : resultat$ = pdf417$(Chaine$, Sécu%, NbCol%, CodeErr%)
avec Chaine$ qui doit contenir la chaine à coder, Sécu% pour le niveau de correction (-1 = auto.), NbCol% pour le nombre de colonnes de données par ligne (<1 = auto.) et CodeErr% pour récupérer un éventuel numéro d'erreur. Ces trois derniers paramètres sont optionnels et sont passés par références; au retour ils contiennent les valeurs réellement utilisées. Valeurs de CodeErr% au retour de la fonction :

Il suffit maintenant d'afficher ou d'imprimer la chaine resultat$ avec la police pdf417 par exemple dans un traitement de texte. Les utilisateurs de Word pourront même intégrer la fonction pdf417$ dans une macro afin d'automatiser le traitement. Pour arriver à effectuer tous les traitements dans une unique fonction, j'ai dû utiliser des "Gosub" au lieu de fonctions avec paramètres; j'entends déjà les esthètes de la programmation hurler au sacrilège.

Vous aimez cette page ?

Elle vous est utile ?

Cliquez ici !