Précédent   Forum des professionnels en informatique > PHP > Outils
Outils Forum d'entraide sur les outils pour développeurs PHP : EDI, installation, administration... Avant de poster : FAQ outils, toutes les FAQ PHP et les comparatifs
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2006, 12h09   #1
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Par défaut [Configuration] Code barre 128 sur PHP4

Salut,

J'ai besoin d'une solution pour générer un code barre (cod128) depuis un numéro particulier reçu par PHP depuis mySQL.
J'ai trouvé un script compatible PHP5 seulement nous c'est PHP4!! Et on ne peut pas migrer toute de suite.

J'ai entendu parlé de police code barre....

Si vous avez des infos ou un moyen de générer un code barre (sans taxer) depuis PHP4 merci!
J'ai pas mal fouiné sur google....sans succès
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h34   #2
Membre chevronné
 
Avatar de gerald2545
 
Inscription : février 2003
Messages : 643
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 643
Points : 660
Points : 660
bonjour,
qu'est ce que tu veux faire exactement?
tu veux absolument afficher ton code-barres dans le navigateur?
sinon, ce que tu peux faire c'est installer la police 128 sur ton PC (tu es sur quel OS? moi je l'utilise sous windows - pas réussi à installer sous linux FC5 mais je n'ai pas forcé)
tu crées un fichier excel, ou mieux openoffice, dans lequel tu définis une macro qui va généré le code à partir de ton texte en clair : exemple : "Macro CB" devient "ÌMacro CBhÎ", tu formates ta cellule pour que la police soit "code128" pour "ÌMacro CBhÎ" et ho le tout est joué, tu as une succession de barres noires et blanches!!!

je peux te donner ma macro OOo si tu veux.
Une autre solution est d'implémenter directement cette fonction dans ta base de données (OK avec postgresql en tout cas) : SELECT text2code128("Macro CB") va te générer "ÌMacro CBhÎ", après il faut lui appliquer la police code128 via une autre appli.

je t'invite à consulter le site http://grandzebu.net/informatique/codbar/code128.htm qui est une mine d'information.

Si je ne réponds à ton problème avec ce post, peux-tu détailler exactement ce que vous voulez faire?

bon courage
j'espère avoir été clair
gerald2545 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h17   #3
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Par défaut Précision

Merci,

Mais le code barre DOIT etre affiché sur le navigateur car la page en question sera imprimée et ensuite douchée par les transporteurs. Ce sont des Fiches Produits de Service Après-vente qui partent aux caraïbes et seront bippées.

A la base on créer les codes barre avec Windev dans des applications mais maintenant on doit développer pas mal d'appli web pour nos clients (postés un peu partout dans le monde) et celle-ci doit gérer les bons de transport.

En PHP4, je suis mal barré (huhu) avec les codes barre car ce n'est pas géré, et on ne peut migrer notre environnement en PHP5 car ça ferait migrer toutes nos filiales puisqu'on est LE pôle principal.

Donc voilà il me faut générer un code barre pour une présentation web et impression.
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 15h46   #4
Membre chevronné
 
Avatar de gerald2545
 
Inscription : février 2003
Messages : 643
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 643
Points : 660
Points : 660
une solution possible mais je ne sais pas s'il est implémentable, à toi de vérifier :
prérequis : police code128 et openoffice installés sur ton serveur
- créer ta fiche modèle sous openoffice.org (.odt) - met toi un texte style ###code-barres### en police code128 où tu veux placer ton code-barres
- enregistrer
- charger ce fichier .odt sur ton serveur
- dézipper ce fichier .odt dans un repertoire
- faire une appli (php ou autre) qui récupère le code-barres de ta base de données MySQL (qui aura été créé par une fonction que tu auras écrite) et qui l'injecte dans le fichier content.xml à la place de ###code-barres###
- recréer le fichier .odt en zippant le répertoire et en lui donnant l'extension .odt
-générer un ficher .pdf à partir de ton nouveau fichier .odt (plus d"infos sur l'export vers pdf en ligne de commande (je ne suis pas allé au bout du thread mais j'imagine que ceci est largement faisable) ici : http://www.oooforum.org/forum/viewtopic.phtml?t=3772)
- afficher le pdf dans le navigateur

je pense que ça peut être OK

Nous on fonctionne de cette façon pour créer des étiquettes au format Openoffice sur le serveur, les télécharger sur un PC qui est relié à une imprimante code-barres....

bon courage
tiens nous au courant de la solution pour laquelle vous opterez.
ciao
gerald2545 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 17h48   #5
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Bien reçu merci mais ce n'est pas possible!
Notre serveur est énormément sollicité et on ne peut se permettre de modifier sa configuration sous peine de bloquer des saisies faites un peu partout dans le monde.

Je vais de voir recourir à une autre méthode!

a+ et merci!
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 22h05   #6
Membre chevronné
 
Avatar de gerald2545
 
Inscription : février 2003
Messages : 643
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 643
Points : 660
Points : 660
Par défaut php4et 5 en même temps

en fait ton appli va être installée sur d'autres serveurs, c'est ça?
sinon autre possibilité (pas testé) : http://www.ljouanneau.com/blog/2005/...-en-meme-temps
je viens de voir que tu ne voulais pas modifier la config de ton serveur....je sors
gerald2545 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 22h40   #7
Membre chevronné
 
Avatar de gerald2545
 
Inscription : février 2003
Messages : 643
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 643
Points : 660
Points : 660
dsl j'insiste...
vous n'avez pas un second serveur moins sollicité sur lequel vous pourriez installer l'application de création de code-barres sous php5?
si oui, vous pourriez implémenter un service web sur ce second serveur qui aurait pour objectif de générer le code-barres correspondant à la chaîne de caractères que vous lui envoyez à partir de ton appli sur le serveur principal
gerald2545 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 08h19   #8
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Bjr,

Alors oui ce serait une solution que d'installer l'appli sur un autre serveur (qu'on a pas pour le moment), seulement seule cette application parmi toutes les autres est destinée à devoir utiliser un générateur de code barre orienté PHP.
Mais cette appli est doit être installé sur LE serveur web car elle passe par une identification sur le site principal, redirigeant vers telle ou telle application. L'installer sur un autre serveur serait possible mais serait aussi une perte d'efficacité. Il semblerait que l'on va devoir laisser de côté la génération de code barre, donc si ça se trouve je vais pas avoir à chercher plus longtemps.
D'autre part le lourd projet de redéveloppement de ma boite (migration du système principal Informix/4GL vers PHP5/PostgreSql) va surement permettre de réorienter nos appli web vers ce système en extranet et donc de bénéficier des modules du PHP5. A voir...

Merci des conseils en tout cas!

A+
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 11h27   #9
Rédactrice
 
Avatar de xave
 
Inscription : mai 2002
Messages : 860
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mai 2002
Messages : 860
Points : 824
Points : 824
Travaillerions-nous sur le même type d'appli speedev? Il semblerait...

Bref pour résoudre le problème,je génère directement une image à partir du numéro du code barre, ensuite j'ai plus qu'à insérer l'image là où j'en ai besoin et à l'impression, aucun problème, pas besoin d'install supplémentaire si ce n'est qu'il faut que ta librairie gd2 soit activée dans php...

Si cette solution t'intéresse, fais moi signe.
__________________
Les règles du forum
Cours et tutoriels php
Développements web (CSS, (X)HTML,javascript, etc...)
Cours et tutoriels MySQL
Tutoriels Ajax
Initiation à PHP-GTK1


Il n'est point de bonheur sans liberté, ni de liberté sans courage. Péricles
xave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 11h34   #10
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Oui je reste complètement intéressé.
Cela dit, j'ai envisagé la solution gd2, le soucis c'est qu'il me faudrait redévelopper certaines classes php pour qu'elles soient adaptables au PHP4.
Et on m'a déjà mis sur un autre projet en parallèle, donc je manque de temps.

Si tu as des sources exploitables relativement rapidement, ça m'intéresse.

Merci
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 11h50   #11
Rédactrice
 
Avatar de xave
 
Inscription : mai 2002
Messages : 860
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mai 2002
Messages : 860
Points : 824
Points : 824
J'ai ça mais c'est pour du code 39, tu as juste à modifier les codes des lettres pour faire du code 128 et modifier le codage...
C'est un peu lourd mais à mon avis ça reste la solution la plus rapide


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php 
// code barre Code 39 
// Le 27/05/2005 
 
//Chacun des 43 caractères du mode simple se compose d'un motif fixe constitué de 5 barres noires et de 4 barres blanches (espace). 
//Les barres peuvent être fines ou larges (Les larges font 2,2 à 3 fois la largeur des fines) 
//Il y a toujours 3 barres larges parmi les 9 barres. 
//Une barre blanche fine ajoutée à la fin permet l'espacement avec le caractère suivant. 
//Un caractère spécial (Affecté au symbole *) sert de délimiteur de début et de fin. 
//Une clé de contrôle peut être ajoutée; elle est calculée en totalisant les valeurs de chaque caractère tirées du tableau suivant, puis en prenant le reste de la division de cette somme par 43. 
//Dans le tableau suivant les barres noires étroites sont symbolisées par "1", les larges par "111", les barres blanches étroites par "0" et les larges par "000". 
 
//Exemple de clé de contrôle pour : ZB65732 
//35 + 11 + 6 +5 +7 +3 +2 = 69 
//69 / 43 = 1, reste 26 qui correspond à la lettre Q 
//Nouveau code avec la clé : ZB65732Q 
 
// Merci à http://grandzebu.net/informatique/codbar/code39.htm pour l'explication ci-dessus 
 
//il suffit d'appeler le script: codebarre.php?texte=0123456789&h=80&L=2 
DEFINE("USE_LIBRARY_GD2",'auto'); 
if(isset($_GET['texte'])) { 
  $text = $_GET['texte']; 
  function str_split( $str ) { 
    $arr = array(); 
    for ($j = 0; $j < strlen($str); $j++) { 
      $arr[] = substr($str,$j,1); 
    } 
    return $arr; 
  } 
  //echo $text; 
  //putenv('GDFONTPATH=' . realpath($_GET['prof'].'../images/')); 
  //putenv('GDFONTPATH='/home/.sites/143/site40/web/images/'); 
  putenv('GDFONTPATH=' . realpath('.')); 
//echo realpath('.'); 
if(!isset($_GET['h'])) {$barcode_hauteur = 80; } else {$barcode_hauteur = $_GET['h'];} 
$tab['0']=' 101000111011101';    $tab2[0]='0';    $tab3['0']=0;    $tab['F']='101110111000101';    $tab2[15]='F';    $tab3['F']=15;    $tab['U']='111000101010111';    $tab2[30]='U';    $tab3['U']=30; 
$tab['1']=' 111010001010111';    $tab2[1]='1';    $tab3['1']=1;    $tab['G']=' 101010001110111';    $tab2[16]='G';    $tab3['G']=16;    $tab['V']='100011101010111';    $tab2[31]='V';    $tab3['V']=31; 
$tab['2']=' 101110001010111';    $tab2[2]='2';    $tab3['2']=2;    $tab['H']=' 111010100011101';    $tab2[17]='H';    $tab3['H']=17;    $tab['W']='111000111010101';    $tab2[32]='W';    $tab3['W']=32; 
$tab['3']=' 111011100010101';    $tab2[3]='3';    $tab3['3']=3;    $tab['I']=' 101110100011101';    $tab2[18]='I';    $tab3['I']=18;    $tab['X']='100010111010111';    $tab2[33]='X';    $tab3['X']=33; 
$tab['4']=' 101000111010111';    $tab2[4]='4';    $tab3['4']=4;    $tab['J']=' 101011100011101';    $tab2[19]='J';    $tab3['J']=19;    $tab['Y']='111000101110101';    $tab2[34]='Y';    $tab3['Y']=34; 
$tab['5']=' 111010001110101';    $tab2[5]='5';    $tab3['5']=5;    $tab['K']=' 111010101000111';    $tab2[20]='K';    $tab3['K']=20;    $tab['Z']='100011101110101';    $tab2[35]='Z';    $tab3['Z']=35; 
$tab['6']=' 101110001110101';    $tab2[6]='6';    $tab3['6']=6;    $tab['L']=' 101110101000111';    $tab2[21]='L';    $tab3['L']=21;    $tab['-']='100010101110111';    $tab2[36]='-';    $tab3['-']=36; 
$tab['7']='101000101110111';    $tab2[7]='7';    $tab3['7']=7;    $tab['M']=' 111011101010001';    $tab2[22]='M';    $tab3['M']=22;    $tab['.']='111000101011101';    $tab2[37]='.';    $tab3['.']=37; 
$tab['8']=' 111010001011101';    $tab2[8]='8';    $tab3['8']=8;    $tab['N']=' 101011101000111';    $tab2[23]='N';    $tab3['N']=23;    $tab[' ']='100011101011101';    $tab2[38]=' ';    $tab3[' ']=38; 
$tab['9']=' 101110001011101';    $tab2[9]='9';    $tab3['9']=9;    $tab['O']=' 111010111010001';    $tab2[24]='O';    $tab3['O']=24;    $tab['$']='100010001000101';    $tab2[39]='$';    $tab3['$']=39; 
$tab['A']=' 111010100010111';    $tab2[10]='A';    $tab3['A']=10;    $tab['P']=' 101110111010001';    $tab2[25]='P';    $tab3['P']=25;    $tab['/']='100010001010001';    $tab2[40]='/';    $tab3['/']=40; 
$tab['B']='101110100010111';    $tab2[11]='B';    $tab3['B']=11;    $tab['Q']='101010111000111';    $tab2[26]='Q';    $tab3['Q']=26;    $tab['+']='100010100010001';    $tab2[41]='+';    $tab3['+']=41; 
$tab['C']='111011101000101';    $tab2[12]='C';    $tab3['C']=12;    $tab['R']='111010101110001';    $tab2[27]='R';    $tab3['R']=27;    $tab['%']='101000100010001';    $tab2[42]='%';    $tab3['%']=42; 
$tab['D']='101011100010111';    $tab2[13]='D';    $tab3['D']=13;    $tab['S']='101110101110001';    $tab2[28]='S';    $tab3['S']=28; 
$tab['E']='111010111000101';    $tab2[14]='E';    $tab3['E']=14;    $tab['T']='101011101110001';    $tab2[29]='T';    $tab3['T']=29;    $tab['*']='100010111011101'; 
 
$j=0; 
$barcode= $tab['*'].'0'; 
foreach ( str_split( $text ) as $caractere ) { 
$barcode.= $tab[$caractere].'0'; 
$j+=$tab3[$caractere]; 
} 
// calcul du code de contôle 
$taille_police=5; 
$j=fmod($j, 43); 
$barcode.=$tab[$tab2[$j]].'0'; 
$barcode.=$tab['*'].'0'; 
$text='*'.$text.$tab2[$j].'*'; 
//barre détermine le nombre de pixel d'une barre 
  //le coef est la différence de largeur entre les barres fines et les épaisse, il doit être entre 2,2 et 3 
  //mais vu qu'on travail avec de barres de 1 pixels les couples possibles sont 
  // dimension 0 1 2 3 4 5 6 7 8 
  $tab=array( 
"barre"=>array(1, 2, 3, 4, 5, 6, 8, 9, 10), 
"coef"=> array(3, 3, 3, 3, 3, 3, 3, 3, 3)); 
  //dimension permet de sélectionner une taille (largeur) dans le tableau ci-dessus 
  if(!isset($_GET['L'])) {$dimension = 2; } else {$dimension = $_GET['L'];} 
$barre=$tab["barre"][$dimension]; 
$coef=$tab["coef"][$dimension]; 
//le nombre total de barre : 3 barres larges pour 6 fines plus 1 barre fine d'espacement 
  $nbre=(3*$coef+6+1)*$barre; 
  //le nombre de barre d'1 pixel (avec le code de contôle et le "*" à chaque extrémité) 
  $barcode_longueur=strlen($barcode)*$barre; 
  //creation de l'image 
  $im = imagecreate($barcode_longueur,$barcode_hauteur); 
  $white = imagecolorallocate($im, 255,255,255); 
  $black = imagecolorallocate($im, 0,0,0); 
  $font_hauteur = imagefontheight( $taille_police ); 
  $font_largeur = imagefontwidth( $taille_police ); 
  //détermination de la hauteur des barre 
  $barcode_hauteur=$barcode_hauteur-$font_hauteur; 
  //on construit chaque barre 
  $xpos=0; 
  foreach ( str_split($barcode) as $caractere ) { 
    for($a=0; $a<$barre; $a++) { 
      if ( $caractere == 0 ) { 
        imageline( $im, $xpos, 0, $xpos, $barcode_hauteur, $white ); 
      } else { 
        imageline( $im, $xpos, 0, $xpos, $barcode_hauteur, $black ); 
      } 
      $xpos++; 
    } 
  } 
  //on ajoute le texte lisible en dessous 
  imagestring( $im, $taille_police,($barcode_longueur-$font_largeur*strlen($text))/2,$barcode_hauteur,$text,$black); 
  //on finalise l'image 
  header("Content-type: image/png"); 
  imagepng($im); 
  imagedestroy($im); 
} 
?>
__________________
Les règles du forum
Cours et tutoriels php
Développements web (CSS, (X)HTML,javascript, etc...)
Cours et tutoriels MySQL
Tutoriels Ajax
Initiation à PHP-GTK1


Il n'est point de bonheur sans liberté, ni de liberté sans courage. Péricles
xave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 11h53   #12
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
ok nickel merci!
Je vais le tester dès que j'aurai terminé le projet pour FT lol.

Je tiendrai au courant ce post.

a+
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h12   #13
Invité de passage
 
Inscription : février 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 12
Points : 3
Points : 3
bonjour,

comment faites-vous en php pour récupérer le code barre obtenu avec une douchette ? merci
php_newbie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2006, 19h53   #14
Membre chevronné
 
Avatar de gerald2545
 
Inscription : février 2003
Messages : 643
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 643
Points : 660
Points : 660
cela doit faire l'objet d'un nouveau post...merci
gerald2545 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2006, 10h14   #15
Invité de passage
 
Inscription : juillet 2006
Messages : 1
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1
Points : 1
Points : 1
Par défaut voila le lien tres utils puor les generateurs des codes bar

http://www.mribti.com/barcode/
ce petit truc est parfait (ou presque) il est compatible avec php 4 adoptable
je viens de l'utiliser pour creation des etiquettes comme tu voulais speedev.
il est plus rapid que celui de francais (j'imagine que c'est celui la que t'as essayé de faire marcher car il n'est compatible que avc php5)

marche parfaitement avec plusieur type de codage

je lui ai fixé les parametres et donc maintenant en 1 click je récupere mes etiquettes

tu vas rencotré un probleme pour l'impression des etiquettes
c'est en fait la mise en page d'IE qui n'est pas standartisé et donc tu vas avoir les marges differentes celon les pc. impossible de forcer la standartiser et donc il va falloir a mon avis passer par un pdf en sortie
(je peux pas te donner plus de precision car j'en ai pas encore trouvé les resolution)

mais voila!
contacte moi si t'aura des questions (je t'aidrai si je peux mais moi je suis encore debutant en tout ca )
freendk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2006, 14h54   #16
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Ok merci avec du retard.

Le soucis c'est qu'on est sous php4 et sans la librairie GD2 et faudrait recompiler apache pour la mettre. Le soucis second c'est qu'on ne peut pas recompiler apache car cela bloquerait l'accès au site où les clients font leur saisie quotidiennement (non stop...). Donc voilà! Je vais attendre qu'on puisse passer sous PHP5.
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h15.


 
 
 
 
Partenaires

Hébergement Web