2010-08-26 26 views
5

Tengo TCPDF instalado en CakePHP 1.3 y lo estoy usando para generar un PDF de un código QR. Es una función muy simple que crea una página de tamaño A9, dos cadenas y un código QR. El código QR es para una URL simple (es decir, 'example.com/12345').TCPDF Código QR es diferente todo el tiempo

Puedo cargar la página en un navegador (Safari usando su lector de PDF incorporado) y cada vez que lo vuelvo a cargar, el código QR cambia ligeramente. Las dimensiones del módulo son las mismas pero los elementos de datos cambian significativamente. Estoy usando la configuración de redundancia de datos "L". La cadena es exactamente la misma en cada llamada pero el QR cambia. Después de ver una cantidad de recargas, creo que solo cambia en 3 o 4 variaciones.

Ahora esta es la parte realmente buena, escanea correctamente. Cada permutación de los resultados QR en exactamente la misma url en el lector QR (i-Nigma en un iPhone4)

¿Alguna idea? ¿Estoy haciendo o me estoy perdiendo algo realmente tonto y obvio? ¡Gracias por adelantado!

+0

Actualización: Se aloja en un sistema Win 2K3 con PHP 5.2.5. Estoy empezando a sospechar que podría estar relacionado con eso. He encontrado otra mención de algo similar en un foro de soporte de TCPDF. Tenían la secuencia de comandos de demostración ejecutándose en su servidor y le daban los mismos patrones cambiantes de QR. Pero el mismo código que se ejecuta en otros servidores funciona bien. –

Respuesta

4

Parece que la biblioteca de generación de códigos QR utilizada por TCPDF usa un método ligeramente "flojo" para crear el código QR. Elige al azar entre cualquiera de los 8 patrones de 'máscara' para ver si mejora el código. Si cumple ciertos criterios, usa la máscara elegida al azar. Eso da como resultado códigos QR posiblemente diferentes cada vez.

Al parecer, Google utiliza un mejor algoritmo para elegir la máscara. Probablemente verifique todas las máscaras y elija la mejor. Esto daría como resultado un resultado predecible en lugar de uno seleccionado al azar.

Voy a llamar a Google Chart API para recuperar un PNG y luego colocarlo en mi PDF en lugar de usar el generador de QR incorporado.

+0

No estoy seguro de TcPDF, sin embargo, * debería * ser capaz de cambiar este comportamiento. La mejor práctica interna del generador es generar los ocho códigos QR y decidir cuál es el mejor, en función de un puntaje de penalización final (definido en el estándar ISO). Si eso no es posible con TcPDF, puede usar PHP QR Code (http://phpqrcode.sourceforge.net/) y usar el enlace allí para usarlo desde TcPDF. – Bell

+0

Todo en caso de que no desee ser dependiente de los deseos y caprichos de Google. – Bell