Сжимайте документы MS Word docx, используя шрифты штрих-кода в PHP-скрипте

Используя Tinybutstrong и openTBS, я создал скрипт на PHP, который открывает несколько шаблонов docx. и заменяет множество переменных значениями из базы данных. Короче говоря, клиенты могут загружать свои уникальные файлы, добавлять информацию и изображения и загружать их снова. Это работает отлично. Но, грубо говоря, я бы не писал здесь, если бы не было какой-то проблемы.

Из-за штрих-кодов (я использую шрифты штрих-кодов и встраиваю их в Word, потому что документы будут сканироваться намного позже в процессе), документы становятся огромными. Вместо средних 100 КБ они легко получат 7 МБ. Это проблема, потому что в год будет сканироваться около 20 000 документов. Это дополнительные +/- 130 ГБ в год.

Это длинная история, но нам нужен docx, поэтому мы не можем просто заменить его каким-то шаблоном PHP/MySQL, который был бы намного эффективнее.

Word имеет возможность просто встроить символы шрифта, которые используются для сокращения размера. Но это не вариант, потому что в основном шаблоне должны быть доступны все символы. Также нельзя отправлять шрифт пользователям, так как каждый год появляется +/- 20 000 новых.

Есть ли другое решение, чтобы уменьшить размер файла или использовать сжатие. Возможно, в Word, PHP, FTP, Apache?


person mat    schedule 22.03.2012    source источник
comment
Итак, проблема в том, что шрифт штрих-кода огромен, верно?   -  person Pekka    schedule 22.03.2012
comment
Верно, сам шрифт не такой уж большой, но когда его встраивает Word, получается около 5 МБ (разнится). Я не знаю другого способа встроить все штрих-коды в docx. OpenTBS не поддерживает его, и нам действительно нужны его функции. Я пробовал несколько разных классов, например. PHPWord, PHPdocx и так далее. OpenTBS — самый быстрый, самый гибкий и делает именно то, что нам нужно. Ну, кроме добавления штрих-кодов.   -  person mat    schedule 22.03.2012
comment
Хм. Рассматривали ли вы вместо этого вставку изображений?   -  person Pekka    schedule 22.03.2012
comment
Я сделал, но это было бы довольно сложно. Для каждого документа необходимо создать новое изображение, прикрепить его к документу, сохранить и стереть. Каким-то образом было бы здорово, если бы opentbs понимал, что при создании шаблона шрифт может быть растеризован или будут встроены только используемые символы.   -  person mat    schedule 22.03.2012


Ответы (1)


Я боюсь, что решение с использованием опции «Встроить шрифты в файл» с «Вставлять только символы, используемые в документе» не может быть использовано. Ms Word сохраняет шрифт в специальном формате с расширением ODTTF (например, он у вас есть в "слово\шрифты\font1.odttf"). Но этот формат является бинарным, он плохо документирован и поэтому остается частным форматом. Только Ms Word сможет создать такой подфайл.

Поскольку у вас нет более светлого шрифта для штрих-кода, единственное решение, которое я вижу, - использовать изображение вместо шрифта для вашего штрих-кода:

Тогда вам нужно только закодировать свой процесс следующим образом:

  1. Загрузите шаблон DOCX,
  2. Создайте временное изображение штрих-кода.
  3. Измените изображение внутри шаблона.
  4. Объедините шаблон и сохраните или отправьте результат.
  5. Удалите временное изображение.

Важно удалять временное изображение только после окончательного слияния шаблона, потому что OpenTBS фактически вставляет изображение только при вызове метода $tbs->Show().

Также важно использовать разные временные файлы для каждого слияния, поскольку одновременно может происходить много слияний.

Если временные файлы имеют префикс или сохранены в выделенном каталоге, рекомендуется регулярно очищать старые временные изображения.

person Skrol29    schedule 26.03.2012