[UDF] Du code barre dans un PDF

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 12:01
Localisation : 13 & 48
Status : Hors ligne

[UDF] Du code barre dans un PDF

#1

Message par Papytom »

Bonjour à tous
Tout d'abord, comme c'est mon premier post, que les modos n'hésitent pas à recadrer tout ce qui ne va pas, et à déplacer ce post s'il n'est pas au bon endroit.

Donc voilà
j'avais besoin d'écrire du code barre sur un pdf, ce qui à priori (j'ai cherché et je n'ai pas trouvé) semble ne pas avoir été fait.
J'ai donc commencé en réaliser mon PDF grâce à l'UDF de taietel puis j'ai regardé comment il créeait ses polices.
Et en utilisant le tuto "Ajout de polices et encodages" trouvé sur le net et que j'avais déjà utilisé pour ajouter des polices à FPDF pour PHP, j'ai bidouillé l'UDF de taietel.
je n'ai pas tout compris sur le rôle de certains des paramètres de ses polices (j'ai pas vraiment cherché) et lorsque je n'en connaissais pas la valeur, je les ai mis à zéro.

Et ainsi j'ai pu ajouter la police de code barre 3OF9.TTF dont j'avais besoin.
(pour info, je relis les code barre avec une douchette CCD et cela fonctionne bien)

Pour ne pas créer de confusion avec le MPDF_UDF.au3 de Taietel, j'ai renommé son UDF modifié MPDF_UDF_CB.au3.
Les modifications apportées se trouvent lignes :
16
129
1181 et 1182
2920 à 2962

Pour ceux qui veulent tester cette nouvelle police, je vous joins les fichiers suivants
- MPDF_UDF_CB.au3 (l'UDF modifié)
- test codebarre.au3 (fichier exemple)
- 3OF9.TTF (police à rajouter aux polices dans windows) (fichier renommé en txt pour pouvoir être joint au post)

dernier point : je programme sous XP, donc quid? des autres OS ?

CORRECTIF DU 15/07/2014

Mon UDF fonctionne très bien pour une seule impression, mais si on met le script dans une boucle for 1 to 2 par exemple, c'est la panique dans les polices.
Faites l'essai et vous verrez de quoi je parle !!!
D'où cela provient-il ? En vérité je ne sais pas car je n'ai pas étudié de près la constitution des polices écrite par taietel. Mais ce que j'ai remarqué c'est que les polices qui fonctionnaient sans ce bug avaient un tableau de valeurs dont la "$FirstChar" était égale à 32 (chr(32)) alors que mon tableau démarrait à 0 (chr(0)).
J'ai donc mis cette variable à 32 et modifié le nombre de valeurs dans mon tableau (lignes 2920 à 2962) et cela a supprimé le bug, sans savoir exactement pourquoi cela met la panique dans les polices.
Ce bug existait aussi pour la police Symbol qui démarrait au CHR(30). J'en ai profité pour le corriger aussi.
Je vous joins ma nouvelle UDF : MPDF_UDF_CB2.au3 modifiée en conséquence.

Si un jour j'ai le temps, j'essaierai de comprendre le pourquoi de la chose :mrgreen:

CORRECTIF DU 16/12/2014

Je vous propose ma dernière version qui comprend
- la modification de la fonction _ClosePDFFile pour reset des variables avant génération nouvelle page
- la modification de la fonction 'Func _LoadFontTT' pour éditer correctement les caractères accentués
- l'ajout des polices codebarre "3OF9.TTF" et "Code128.TTF"

Cette version rend obsolète les versions MPDF_UDF_CB2.au3 et MPDF_UDF_CB3.au3


CORRECTIF DU 22/12/2014

J'ai constaté que la fonction _Iif() a été supprimée dans l'UDF 'Misc.au3' jointe à la version 3.3.12.0 de Autoit3, ce qui entraîne une erreur dans l'UDF 'MPDF_UDF_CB.au3.
J'ai corrigé cette erreur en rajoutant cette fonction dans mon UDF donc voici la dernière version.
Fichiers joints
MPDF_UDF_CB.au3
(161.82 Kio) Téléchargé 403 fois
test codebarre.au3
(1.73 Kio) Téléchargé 418 fois
code128.ttf.txt
(7.75 Kio) Téléchargé 390 fois
3OF9.TTF.txt
(15.23 Kio) Téléchargé 387 fois
Modifié en dernier par Papytom le lun. 22 déc. 2014 19:22, modifié 2 fois.
http://papytom.free.fr
"Duas habet et bene pendentes"
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#2

Message par orax »

Je crois qu'il en manque un bout ; il y a une fonction qui n'est pas définie :
MPDF_UDF_CB2.au3"(253,54) : error: _Iif(): undefined function.
Est-ce c'est ça : http://www.autoitscript.com/forum/topic ... try1151846 ???
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#3

Message par TommyDDR »

Oui c'est ça, mais _Iif n'a plus de raison d'être avec la dernière version d'AutoIt et l'opérateur ternaire.

Code : Tout sélectionner

$var = _Iif(x, y, z)
peut être remplacé par :

Code : Tout sélectionner

$var = (x) ? y : z
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#4

Message par orax »

En effet, merci. Je viens de le voir dans la partie historique dans la doc.

Papytom a écrit :dernier point : je programme sous XP, donc quid? des autres OS ?
J'ai essayer de le faire marcher sur Windows 7. Je n'ai pas réussi… :oops: Le PDF est généré mais après un caractère « é » par exemple, j'ai un espace vide (des espaces ou tabulation). Je n'ai pas non plus le code barre qui s'affiche. J'ai pourtant bien renommé et installé le fichier de la police. J'ai dû faire une bêtise quelque part !
Mais bon, ce n'est pas important, je n'ai pas besoin de ce script, j'ai juste voulu voir comme tout ça fonctionnait.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 12:01
Localisation : 13 & 48
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#5

Message par Papytom »

TommyDDR a écrit :Oui c'est ça, mais _Iif n'a plus de raison d'être avec la dernière version d'AutoIt et l'opérateur ternaire.

Code : Tout sélectionner

$var = _Iif(x, y, z)
peut être remplacé par :

Code : Tout sélectionner

$var = (x) ? y : z
Bonjour
étant tout neuf dans l'utilisation d'AutoIt, j'utilise la version 3.3.10.2, (à priori la dernière) installée par le pack "Pack_AutoIt-Fr.exe", très pratique.
Je n'ai donc pas eu cette erreur.
http://papytom.free.fr
"Duas habet et bene pendentes"
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#6

Message par mimione »

Bonjour

Merci pour le partage de ce "complément" à l'UDF "MPDF_UDF_CB.au3".
Il fonctionne bien, mais j'ai du bricoler quelque peu pour éliminer les problèmes d'espaces après les caractères accentués. Sans que je comprenne exactement pourquoi, ce problème n'existe plus. (pas trop pris le temps de chercher non plus!).

Je souhaiterais intégrer une police de codes barres "Code 128", mais je ne sais pas comment définir les infos qui se trouvent, par exemple, dans la fonction __Font3OF9($Style = $PDF_FONT_NORMAL).
Je sens bien qu'il s'agit là d'infos sur chaque caractère de la police, et d'infos commune à la police, mais ou trouver ces informations..?

Merci,

M.C.
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 12:01
Localisation : 13 & 48
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#7

Message par Papytom »

Bonjour mimione

"mais j'ai du bricoler quelque peu pour éliminer les problèmes d'espaces après les caractères accentués"
Comment as-tu supprimé ce problème ?
Peux-tu me joindre ta version bricolée de l'UDF.

"comment définir les infos qui se trouvent, par exemple, dans la fonction __Font3OF9($Style = $PDF_FONT_NORMAL)."

lorsque j'ai commencé à programmer en php, je m'étais intéressé à l'écriture de fichiers en pdf, et j'avais trouvé sur le net comment créer les polices dont j'avais besoin, avec cet excellent tuto "Ajout de polices et encodages.doc";
Et pour les fainéants, dans ce tuto il y a l'adresse d'une appli web "http://fpdf.fruit-lab.de/" qui crée directement les fichiers décrits dans le tuto, et notamment un fichier php qui contient toutes les infos qui m'ont permis de créer la fonction __Font3OF9($Style = $PDF_FONT_NORMAL).

Je me suis amusé à rajouter la police Code 128 dans mon UDF, dont la nouvelle version devient MPDF_UDF_CB.au3
voilà tout cela en PJ
(j'ai mis aussi la version de Code128.TTF que j'ai utilisé, renommée en txt pour pouvoir être jointe)
Fichiers joints
code128.ttf.txt
(7.75 Kio) Téléchargé 336 fois
Ajout de polices et encodages.doc
(64.5 Kio) Téléchargé 344 fois
Modifié en dernier par Papytom le lun. 22 déc. 2014 19:30, modifié 3 fois.
http://papytom.free.fr
"Duas habet et bene pendentes"
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#8

Message par mimione »

Bonjour

J'ai réglé le problème en appliquant, "à la hussarde", les recommandations trouvées sur le net. (Voir Txt joint).
Un très grand merci pour l'incorporation de la police Code 128.
Je développe actuellement une application relativement lourde pour une association de cinémas d'Ille et Vilaine et, comme toujours, c'est beaucoup plus compliqué que ce qu'on imaginait au départ. C'est pourquoi j'apprécie au plus haut point ton coup de pouce.
Reste plus qu'à tester...
Fichiers joints
PB Caractères accentués.txt
(2.12 Kio) Téléchargé 355 fois
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 12:01
Localisation : 13 & 48
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#9

Message par Papytom »

Merci mimione

"J'ai réglé le problème en appliquant, "à la hussarde", les recommandations trouvées sur le net. (Voir Txt joint)."

Je me suis empressé de modifier mon UDF à partir des infos que tu m'as fournies.
En fait, Mihai Iancu avait apporté la solution à ce problème, mais je ne l'avais pas vu.
Dans sa fonction _LoadFontTT, la boucle For $j ne testait la variable $Widths que pour les caractères chr(32) à chr(223).
Après la modif :
For $j = $FirstChar To $LastChar remplacé par For $j = $FirstChar To $FirstChar + $LastChar
et Or $j = $LastChar remplacé par Or $j = $FirstChar + $LastChar
tous les caractères sont bien analysés, notamment les caractères accentués qui se trouvent à partir de chr(223).

Il me reste maintenant à corriger tous mes progs dans lesquels je mettais 2 espaces après les caractères accentués pour qu'ils soient correctement édités :mrgreen:
http://papytom.free.fr
"Duas habet et bene pendentes"
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#10

Message par mimione »

En effet: :mrgreen: !!
Je me pose une dernière question: Pour faire du code 128, il ne suffit pas d'écrire un texte avec une police "code barre 128", mais il faut passer par une moulinette qui rajoute avant et après de caractères de contrôle bizarroïdes, calculés d'après le texte proposé.
Par exemple DCFA34C901 devient, après passage dans la fonction: ÌDCFA34C901{Î , DCFA34C912 devient ÌDCFA34C912'Î .

Je me pose la question de savoir si certaines chaines ne vont pas générer des caractères qui ne sont pas dans la "table" de la "métrique" de la police Code 128... Est-ce que tout le jeu de caractères est accessible..?

Je n'ai pas eu de problème jusqu'ici, alors que je procède à du remplacement de texte dans un fichier au format "RTF" (pas de problème autre que de gérer les "\" , "{" et "}" qui sont dans le protocole de formatage du "rtf"). Mais je n'ai pas non plus testé l'ensemble des combinaisons en entrée de la fonction qui génère la chaine de "code 128".

Cette incertitude est un peu délicate à lever, vu qu'il faut passer par l'étape de génération, puis de relecture avec le lecteur de codes barre... Mais il y a peut être une vérification théorique.
Je serre un peu les miches, vu que nous allons mettre en service le programme dans quelques jours, et que un peu plus de 20000 "chèques cinéma" vont se retrouver dans la nature dans les 12 mois à venir, avec des codes barre sur lesquels j'ai encore quelques incertitudes. :roll:

M.C.
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#11

Message par walkson »

Bonsoir,
Tout d'abord, merci pour le partage
J'ai testé votre script sous Win7 avec succés (après quelques rectifs mineures comme _Iif() )
Cependant j'ai une remarque à faire: bien que je ne suis pas un spécialiste des CB je me suis aperçu qu'en fait, vous transcrivez un texte ordinaire en code 128 ou autre, ce qui n'est pas, à proprement parlé, un CB.
Je vous invite à visiter http://grandzebu.net/informatique/codbar/code128.htm (entre autres, il y a plein de choses intéressantes sur ce site) et pour les "amoureux" des CB http://www.dafont.com/fr/theme.php?cat=711&page=1
Mais bon, si votre lecteur de CB s'y retrouve, c'est le principal.
PS: Au fait, nous sommes sous Autoit v3.3.12.0 :wink:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 12:01
Localisation : 13 & 48
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#12

Message par Papytom »

Bonjour Walkson
merci d'avoir testé mon script sous Win7.
Pour ma part, et tant que je n'y suis pas obligé, je reste sous XP
Mais c'est bien de savoir que le script fonctionne sous Win7.

Pour ce qui est du Code128, j'ai simplement voulu savoir si le codebarre s'affichait correctement.
Personnellement je ne l'utilise pas et je ne sais donc pas l'utiliser.
J'utilise un code plus simple, le 3OF9 que je lis parfaitement avec ma douchette.

Et, pour conclure, j'ai découvert Autoit cette année en installant un pack trouvé sur le net, qui contenait la version 3.3.10.2. avec laquelle j'ai appris à connaître ce nouveau langage. Je suis content d'avoir pu écrire une application qui me convient bien et honnêtement, je ne me suis pas inquiété de savoir s'il existait une nouvelle version
Merci pour l'info. Je télécharge cette nouvelle version 3.3.12.0 pour voir ce qu'elle peut m'apporter.

Cdlt
Papytom
http://papytom.free.fr
"Duas habet et bene pendentes"
Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 12:01
Localisation : 13 & 48
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#13

Message par Papytom »

Bonsoir Walkson

J'ai installé la version 3.3.12.0 de Autoit3 et j'ai compris pourquoi vous aviez écrit
(après quelques rectifs mineures comme _Iif() )
en fait cette fonction qui est utilisée par Taitel dans son UDF 'MPDF_UDF.au3' a été supprimée de l'UDF 'Misc.au3' de la version 3.3.12.0 de Autoit3.

Je l'ai simplement rajouté dans mon UDF 'MPDF_UDF_CB.au3' et cela refonctionne correctement

cdlt
Papytom
http://papytom.free.fr
"Duas habet et bene pendentes"
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#14

Message par mimione »

Bonjour
Ci joint l'UDF "barecode.au3" que j'utilise pour les "codes 128".
ça fonctionne au poil.
J'ai rapidement vérifié une série de textes alphanumériques à coder, les caractères de contrôle rajoutés par la fonction ont l'air de rester dans les borne ad'hoc. (la police "code 128" est définie entre 32 et 207). (Je craignais un "loup" dans un coin).

Les auteurs de la fonction sont dans l'en-tête.

Une rapide mise en œuvre permettra de scanner les codes des cadeaux de Noël, pour la revente sur le "bon coin", puisque c'est une détestable habitude qui a l'air de prendre racine dans notre belle époque. (Bon. Évidemment: :lol: )

Bonnes fêtes
M.C.
Fichiers joints
barcode.zip
(3.05 Kio) Téléchargé 355 fois
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF: PB alignement

#15

Message par mimione »

Bonjour et bonne année 2015 aux "AutoIsteurs" ( :oops: )de passage sur ce fil.

Papytom: tu avais gentiment intégré la police "Code barre 128" dans l'UDF.

Après quelques tests sommaires, j'ai intégré ça dans mon usine à gaz, et j'ai observé quelques soucis d'alignement.

J'ai extrait l'essentiel pour mettre en évidence le problème.
avec les 3 scripts ci-joints, on observe les soucis d'alignement (droite/ gauche/ centre) des textes, qui apparaissent de manière différente selon que la police "Code128" est chargée au début, à la fin, ou pas chargée du tout.

Je précise que j'ai réintégré, dans l'UDF "MPDF_UDF_CB3.au3" les modifs qui permettent de récupérer la gestion correcte des caractères accentués.

J'avoue patauger un peu dans l'explication de ce problème... :roll:

Une idée ?
Fichiers joints
Test AlignementsTexte.zip
Les 3 scripts et l'UDF.
(25.63 Kio) Téléchargé 313 fois
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 12:01
Localisation : 13 & 48
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#16

Message par Papytom »

Salut mimione et meilleurs voeux
et meilleurs voeux à ceux qui lisent ce topic.

Je sais comment supprimer l'anomalie, mais je n'ai pas réussi à trouver d'où elle provient.
Je m'explique :
lorsqu'on veut aligner le texte édité par "_DrawText" le programme appelle la fonction "_GetTextLength" pour calculer la longueur du texte à aligner. Cette longueur est déterminée par la largeur des caractères à éditer, c'est la variable $Widths dans la fonction _Fontxxxx de la police utilisée.
Je me suis rendu compte que le bug occasionnant l'anomalie d'alignement est que la fonction "_GetTextLength" ne reçoit pas l'information de changement de police. En fait elle utilise toujours la dernière police chargée par "_LoadFontTT".
Ainsi, dans le programme "Code128 chargé avant", l'alignement des caractères du codebarre est calculé avec les largeurs de caractères de la police arial et inversement dans le programme "Code128 chargé après".
J'arrive à corriger l'anomalie en forçant l'appel de la bonne police avant l'utilisation des "_DrawText"(voir fichiers joints), mais je n'ai pas vraiment trouver l'origine du bug dans l'UDF de Mihai Iancu. J'ai essayé de comprendre comment il utilisait les polices, je me suis perdu dans son usine à gaz.
Si quelqu'un veut s'y coller et trouver la solution, cela me ferait plaisir.
Fichiers joints
Code128 chargé après.au3
(2.06 Kio) Téléchargé 307 fois
Code128 chargé avant.au3
(2.06 Kio) Téléchargé 313 fois
http://papytom.free.fr
"Duas habet et bene pendentes"
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: [UDF] Du code barre dans un PDF

#17

Message par mimione »

Merci d'avoir regardé.
C'est donc un "bug" général, et pas seulement lié à la police "code barre".
Je pense que ça saute aux yeux avec cette police, parce que la largeur des caractères doit être très différente de celle d'une police plus classique.
Effectivement, en "chargeant" avant chaque appel à "draw text", on contourne le problème, mais on surcharge également le pdf produit...

Si j'ai 5 mn, j'enverrai une copie de mon mail à l'auteur.

A+
M.C.
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
Répondre