2010-08-26 31 views
5

J'ai TCPDF installé dans CakePHP 1.3 et je l'utilise pour générer un PDF d'un code QR. C'est une fonction très simple qui crée une page de taille A9, deux chaînes et un code QR. Le code QR est pour une url simple (ie 'example.com/12345').TCPDF QR Code est différent tout le temps

Je peux charger la page dans un navigateur (Safari en utilisant son lecteur PDF intégré.) Et chaque fois que je le recharge, le code QR change légèrement. Les dimensions du module sont les mêmes mais les éléments de données changent de manière significative. J'utilise le paramètre de redondance des données "L". La chaîne est exactement la même à chaque appel mais le QR change. Après avoir regardé un certain nombre de rechargements, je crois qu'il ne passe que par 3 ou 4 variations.

Maintenant, voici la partie vraiment géniale, elle scanne correctement. Chaque permutation des résultats QR dans exactement le même URL dans le lecteur de QR (i-Nigma sur un iPhone4)

Des idées? Suis-je en train de faire ou de manquer quelque chose de vraiment stupide et évident? Merci d'avance!

+0

Mise à jour: Il est hébergé sur un système Win 2K3 exécutant PHP 5.2.5. Je commence à soupçonner que cela pourrait être lié à cela. J'ai trouvé une autre mention de quelque chose de similaire sur un forum de support TCPDF. Ils avaient le script de démonstration en cours d'exécution sur leur serveur et il donnait les mêmes schémas QR changeants. Mais le même code s'exécutant sur un certain nombre d'autres serveurs fonctionne bien. –

Répondre

4

Il semble que la bibliothèque de génération de code QR utilisée par TCPDF utilise une méthode légèrement «paresseuse» pour créer le code QR. Il choisit au hasard parmi l'un des 8 modèles de 'masques' pour voir s'il améliore le code. S'il répond à un certain critère, il utilise le masque choisi au hasard. Cela se traduit par des codes QR éventuellement différents à chaque fois.

Apparemment, Google utilise un meilleur algorithme pour choisir le masque. Probablement vérifie tous les masques et choisit le meilleur. Cela aboutirait à un résultat prévisible au lieu d'un résultat aléatoire.

Je vais appeler l'API Google Chart pour récupérer un fichier PNG et le placer dans mon PDF au lieu d'utiliser le générateur QR intégré.

+0

Je ne suis pas sûr de TcPDF, mais vous * devriez * pouvoir changer ce comportement. La meilleure pratique interne du générateur est de générer les huit codes QR et de décider lequel est le meilleur, en fonction d'un score final de pénalité (défini dans la norme ISO). Si cela n'est pas possible avec TcPDF, vous pouvez utiliser PHP QR Code (http://phpqrcode.sourceforge.net/) et utiliser la liaison ici pour l'utiliser depuis TcPDF. – Bell

+0

Dans le cas où vous ne voulez pas être dépendant du souhait et des caprices de Google. – Bell