【问题标题】:TCPDF QR Code is different all the timeTCPDF QR Code 一直不一样
【发布时间】:2011-04-04 00:48:55
【问题描述】:

我在 CakePHP 1.3 中安装了 TCPDF,并正在使用它来生成一个二维码的 PDF。这是一个非常简单的函数,可以创建一个 A9 大小的页面、两个字符串和一个 QR 码。二维码是一个简单的网址(即'example.com/12345')。

我可以在浏览器中加载页面(Safari 使用它内置的 PDF 阅读器。)每次重新加载时,QR 码都会略有变化。模块尺寸相同,但数据元素发生显着变化。我正在使用“L”数据冗余设置。每次调用的字符串都完全相同,但 QR 会发生变化。在观看了多次重新加载后,我相信它只循环了 3 或 4 种变化。

现在这是真正很棒的部分,它可以正确扫描。 QR 的每个排列都会在 QR 阅读器中产生完全相同的 url(iPhone4 上的 i-Nigma)

有什么想法吗?我是在做还是错过了一些非常愚蠢和明显的事情?提前致谢!

【问题讨论】:

  • 更新:它托管在运行 PHP 5.2.5 的 Win 2K3 系统上。我开始怀疑这可能与此有关。我在 TCPDF 支持论坛上发现了另一个类似的内容。他们在他们的服务器上运行了演示脚本,它提供了相同的不断变化的 QR 模式。但是在许多其他服务器上运行的相同代码运行良好。

标签: cakephp pdf qr-code tcpdf


【解决方案1】:

似乎 TCPDF 使用的 QR 码生成库使用了一种稍微“懒惰”的方法来创建 QR 码。它从 8 个“掩码”模式中随机选择一个,看看它是否能让代码变得更好。如果它满足某个标准,它会使用随机选择的掩码。这导致每次可能产生不同的二维码。

显然 Google 使用了更好的算法来选择掩码。可能会检查所有口罩并选择最好的口罩。这将产生可预测的结果,而不是随机选择的结果。

我将调用 Google Chart API 来检索 PNG,然后将其放入我的 PDF 中,而不是使用内置的 QR 生成器。

【讨论】:

  • 我不确定 TcPDF,但是您应该能够改变这种行为。生成器内部的最佳实践是生成所有八个二维码,并根据最终罚分(在 ISO 标准中定义)决定哪个是最好的。如果 TcPDF 无法做到这一点,您可以使用 PHP QR 码 (phpqrcode.sourceforge.net) 并使用那里的绑定来使用 TcPDF 中的绑定。
  • 万一你不想依赖谷歌的愿望和心血来潮。
【解决方案2】:

在 tcpdf 版本 6.2.26 上,运行正常的一种解决方案是更改文件“include/barcodes/qrcode.php”的第 239 行: 定义('QR_FIND_FROM_RANDOM', 2);

然后用下一个替换: 定义('QR_FIND_FROM_RANDOM', none);

【讨论】:

  • 或者更好的是,在同一个文件中将 QR_FIND_BEST_MASK 设置为 false!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
相关资源
最近更新 更多