使用PHP scipt中的条形码字体压缩MS word docx文档


Compress MS word docx documents using barcode fonts in PHP scipt

使用Tinybutstrong和openTBS,我在PHP中创建了一个脚本,打开多个docx模板,并用数据库中的值替换许多变量。简而言之,客户可以下载他们独特的文件,添加信息和图片,然后再次上传。这非常有效。但如果没有什么问题的话,我不会在这里发帖。

因为有了条形码(我使用条形码字体并将其嵌入Word中,因为在这个过程的稍后会扫描文档),文档变得巨大。他们将轻松获得7MB,而不是平均100KB。这是一个问题,因为每年将扫描大约20000份文件。这是每年额外的+/-130 GB。

这是一个很长的故事,但我们需要docx,所以我们不能简单地用某种效率高得多的PHP/MySQL模板来代替它。

Word可以选择只嵌入用于剪切大小的字体符号。但这不是一个选项,因为主模板需要有所有可用的字符。也不能将字体发送给用户,因为每年都有+/-20000个新字体。

有没有其他解决方案可以减少文件大小或使用压缩。也许是Word、PHP、FTP、Apache?

恐怕无法利用将选项"在文件中嵌入字体"与"仅嵌入文档中使用的字符"结合使用的解决方案。Word女士使用一种特殊的格式保存字体,扩展名为ODTTF(例如,您将其保存在"Word''fonts''font1.ODTTF"中)。但这种格式是二进制的,它似乎记录得很糟糕,因此它仍然是一种专有格式。只有Word女士能够构建这样一个子文件。

由于您没有任何较轻的条形码字体,我能看到的唯一解决方案是使用图像而不是条形码字体:

  • OpenTBS具有一个功能,可以轻松替换DOCX文件中的图片(参数"op=changepic")
  • Barcode2Image工具在PHP中很容易找到。例如:条形码生成器

然后你只需要像这样编码你的过程:

  1. 加载DOCX模板
  2. 创建条形码的临时图像
  3. 更改模板内的图像
  4. 合并模板,然后保存或发送结果
  5. 删除临时图像

只有在模板的最终合并之后才删除临时图像是很重要的,因为OpenTBS实际上只有在调用$tbs->Show()方法时才会插入图像。

每次合并使用不同的临时文件也很重要,因为许多合并可能同时发生。

如果临时文件有前缀或保存到专用目录中,则建议定期清理旧的临时图像。