2010-08-26 16 views
5

Ich habe TCPDF in CakePHP 1.3 installiert und benutze es, um ein PDF eines QR-Codes zu generieren. Es ist eine sehr einfache Funktion, die eine A9-große Seite, zwei Strings und einen QR-Code erzeugt. Der QR-Code ist für eine einfache URL (dh "example.com/12345").TCPDF QR-Code ist die ganze Zeit anders

Ich kann die Seite in einen Browser laden (Safari mit seinem eingebauten PDF-Reader.) Und jedes Mal, wenn ich es neu lade, ändert sich der QR-Code leicht. Die Moduldimensionen sind gleich, aber die Datenelemente ändern sich signifikant. Ich verwende die Datenredundanzeinstellung "L". Die Zeichenfolge ist bei jedem Anruf genau gleich, aber der QR ändert sich. Nachdem ich eine Anzahl von Reloads gesehen habe, glaube ich, dass es nur 3 oder 4 Variationen durchläuft.

Jetzt ist hier der wirklich tolle Teil, es scannt korrekt. Jede Permutation des QR ergibt genau die gleiche URL im QR Reader (i-Nigma auf einem iPhone4)

Irgendwelche Ideen? Mache oder vermisse ich etwas wirklich dummes und offensichtliches? Danke im Voraus!

+0

Update: Es wird auf einem Win 2K3-System mit PHP 5.2.5 gehostet. Ich fange an zu vermuten, dass es damit zusammenhängen könnte. Ich habe eine andere Erwähnung von etwas Ähnlichem in einem TCPDF-Support-Forum gefunden. Sie hatten das Demo-Skript auf ihrem Server laufen und es gab die gleichen wechselnden QR-Muster. Aber derselbe Code, der auf einer Reihe anderer Server läuft, läuft gut. –

Antwort

4

Scheint, dass die von TCPDF verwendete QR-Codegenerierungsbibliothek eine leicht "faule" Methode zum Erstellen des QR-Codes verwendet. Es wählt zufällig aus einem von 8 'Masken' Mustern aus, um zu sehen, ob es den Code besser macht. Wenn es ein bestimmtes Kriterium erfüllt, verwendet es die zufällig ausgewählte Maske. Das führt jedes Mal zu möglicherweise unterschiedlichen QR-Codes.

Anscheinend verwendet Google einen besseren Algorithmus, um die Maske auszuwählen. Überprüft wahrscheinlich alle Masken und wählt die beste aus. Dies würde zu einem vorhersehbaren Ergebnis anstelle eines zufällig ausgewählten Ergebnisses führen.

Ich werde die Google Chart API aufrufen, um eine PNG abzurufen und diese dann in meine PDF-Datei einfügen, anstatt den integrierten QR-Generator zu verwenden.

+0

Ich bin nicht sicher von TcPDF, aber Sie * sollten * in der Lage sein, dieses Verhalten zu ändern. Das beste Verfahren innerhalb des Generators besteht darin, alle acht QR-Codes zu generieren und basierend auf einem endgültigen Strafpunktzahlwert (definiert in der ISO-Norm) zu entscheiden, welcher der beste ist. Wenn das mit TcPDF nicht möglich ist, können Sie PHP QR Code (http://phpqrcode.sourceforge.net/) verwenden und die Bindung dort verwenden, um diese aus TcPDF zu verwenden. – Bell

+0

Alles für den Fall, dass Sie nicht von Google Wunsch und Launen abhängig sein möchten. – Bell

Verwandte Themen