PDF Creator Pilot: Значительные улучшения в emf2pdf конвертере

Многие компании при составлении документов используют в колонтитулах свои логотипы в виде изображений. Такие логотипы, как правило, помещают на каждой странице документа. Когда же возникает необходимость сконвертировать документ в формат PDF, то встает задача уменьшение размера PDF файла за счет ссылок на изображения, вместо встраивания одинаковых изображений на каждую страницу. Благо, PDF формат позволяет это сделать. Аналогичная задача возникает и в тех случаях, когда на странице (-ах) используется несколько одинаковых изображений. В этом случае тоже можно обойтись встраиванием одного изображения в документ, а в остальных местах сделать ссылки на это изображение. За счет этого размер выходного файла будет значительно уменьшен.

Именно таким образом нам удалось оптимизировать работу нашего emf2pdf конвертера в PDF библиотеке. И как следствие размер генерируемого PDF файла уменьшился пропорционально количеству одинаковых изображений, содержащихся в emf файлах. Приведем сравнительные данные, которые были получены в ходе тестирования на реальных emf файлах, присланных нашими пользователями. В присланном документе было 12 страниц. Каждая картинка занимала 160 Кб. До оптимизации работы конвертера получаемый PDF документ имел размер 2,9 Мб, после оптимизации – 0,9 Мб. Таким образом, в результате исключения одинаковых изображений размер файла уменьшился более чем в 3 раза. Так же рекомендуем не забывать ставить сжатие для PDF документы для уменьшения размера файла с помощью свойства Compression. В некоторых случаях это может уменьшить размер файла в 2 и более раз.

Последняя версия библиотеки для загрузки находится здесь.

Всегда актуальная онлайн документация находится по этому адресу.

Примеры использования библиотеки можно посмотреть здесь.

Артём Голубиченко,
Два Пилота
http://www.colorpilot.ru

Последствия округления

Лучше всего сразу начать с иллюстрации того, что было ДО неточного округления чисел с плавающей точкой и как это стало выглядеть ПОСЛЕ того, как ошибка была исправлена.

comparing

Проблема проявилась при конвертировании EMF в PDF (или при рисовании на HDC, полученном из PDF). Проблема была с функциями Polyline(To). На вход функции поступал массив точек, координаты которых не значительно отличались друг от друга. И далее для того, чтобы нарисовать набор линий в PDF, необходимо было преобразовать координаты из HDC в координаты для PDF. Для этой цели мы используем функцию LPtoDP. Но функция возвращает целые значения координат, поэтому, например, для двух координат из EMF (160, 74) и (159, 60) функция преобразует их в (1, 1) и (1, 2). В результате чего набор прямых приобретет вид, который представлен на скриншоте слева. Поэтому в данном случае мы перестали использовать эту функцию и получили правильный результат работы функций Polyline(To).

Артём Голубниченко