При создании документов в РКК со сканера заметил, что размер файла громадный -- 3 мб для одностраничного текстового документа. Стал разбираться и вот, что нашел: документ сканируется сканером в tiff, который сохраняется во временной папке. Затем этот документ подхватывается программой обработки директума и преобразуется в пдф, который и регистрируется в системе, но размер исходного (tiff) и конечного (pdf) файла при этом отличается всего, примерно, на 10%, т.е. 3 МБ и 2,7 МБ.
В техподдержке посоветовали посмотреть в сторону twain-драйвера для сканера, но перехватив промежуточный документ (tif) я попробовал его сохранить стандартным принтером win10: "Microsoft Print to PDF" и увидел, что размер файла pdf уменьшился, почти, в 10 раз! 300 КБ - приемлемый размер для документа.
Возникло предположение , что дело в настройках конвертера directum, но установки качества в центре администрирования не привели вообще ни к какому результату.
Для устранения проблемы решили использовать стороннее приложение.
Для этого был выбран ImageMagick. Эта программа позволяет производить операции над графическими файлами в неинтерактивном режиме и совершенно бесплатна.
Полученный от сканера файл кодирую в jpeg (эта кодировка дала наилучший результат) и сохраняю в pdf. Причем в случае многостраничного документа исходник автоматически разбивается на несколько файлов, которые затем сами собираются в один файл). Результат превзошел ожидания: размер тестового файла уменьшился с 3 МБ до 360 КБ (без видимых потерь в качестве), скорость преобразования - пара секунд для пятистраничного файла, с нативным занимало более 10 секунд.
Скачал портативную версию программы ImageMagick с сайта и положил в общедоступную папку на сервере директума (расположение может быть любым, главное, чтобы была открыта для чтения внутри сети), путь к которой поместил в константу. Это было сделано для того, чтобы обеспечить доступ любого клиента внутри сети к этой программе без необходимости устанавливать ее на каждом компьютере. Создал функцию(описание из созданной справки):
Функция предназначена для конвертирования файлов в pdf.
Группа:
ОДК
Синтаксис:
ODK_ConvertFileToPDF(
InputFileName: Строка;
OutputFileName: Строка;
[compressType: Строка = 'JPEG'];
[qualityPercent: Целое число = 80])
Параметры:
InputFileName - Имя исходного файла
OutputFileName - Имя выходного файла
compressType - Тип сжатия
qualityPercent - Качество выходного файла в процентах.
Возвращаемое значение:
В случае успешного завершения возвращается 0.
При возникновении ислючения возвращается -1.
При возникновении ошибки конвертирования возвращается значение >0.
Описание:
Альтернатива стандартного преобразования, но с увеличенной скоростью работы и возможностью способов сжатия. В качестве конвертера исопльзуется imagemagick.
Подробнее:
https://www.imagemagick.org
Типы сжатия:
https://www.imagemagick.org/script/command-line-options.php#compress
Качество картинки:
https://www.imagemagick.org/script/command-line-options.php#quality
Текст функции:
//проверяем параметры
CheckParam('InputFileName'; InputFileName)
CheckParam('OutputFileName'; OutputFileName)
//получаем путь к конвертеру(общедоступная папка)
converterPath = GetConstant('ODK_ConverterToPDFPath')
//формируем командную строку
command = format( '"%s" "%s" -compress %s -quality %s "%s"'; arrayof(converterPath; InputFileName; compressType; qualityPercent; OutputFileName))
//запускаем с заданными параметрами
try
Shell = CreateObject("WScript.Shell")
Result = Shell.Run(command; 0; True)
except
Result = -1
endexcept
Далее, вызов функции поместил в начало стандартной функции по преобразованию файла в PDF(DCTSConvertFileToPDF) таким образом, чтобы в случае неудачной обработки нашей функции запускалась стандартная(нативная).
// Объявление констант
ADO_BINARY_TYPE = 1 // adTypeBinary
ADO_READ_ALL = -1 // adReadAll
ADO_SAVE_CREATE_OVERWRITE = 2 // adSaveCreateOverWrite
EXTENSION_MASK = "E"
FIRST_AVAILABLE_TRANSFORMATION_INDEX = 0
// Проверить входные параметры
CheckParam("WSDLFileName"; WSDLFileName; "")
CheckParam("InputFileName"; InputFileName; "")
CheckParam("OutputFileName"; OutputFileName; "")
//исправляем громадный размер файла за счет преобразования в сторонней программе imagemagick
imagemagickResult = ODK_ConvertFileToPDF(InputFileName; OutputFileName)
if imagemagickResult <> 0
//стандартное преобразование
// Инициализация подключения к сервису
SoapClient = CreateObject("MSSOAP.SoapClient30")
//...
//...
//...
ADOStream.Close()
endif
Проверено для версии 5.3 По умолчанию выставлена степень сжатия 80% JPEG
Состав команды: 1 человек.
Обсудите реализацию с экспертом Directum
Комментарии (3)
Ставить imagemagick надо на каждый комп с которого будет идти преобразование?
Владимир, нет. В нашем случае портативную версию программы поставили на сервер директума в общедоступную папку.
Проверили. Работает на 5.5.
Спасибо
Авторизуйтесь, чтобы написать комментарий