2014-10-28 3 views
2

У меня есть несколько прямоугольников, и все они имеют один и тот же цвет пятна. Есть ли способ объединить/сгруппировать их в один векторный объект, чтобы сгенерированный PDF имел меньший размер?Группировка прямоугольников в iTextSharp

ответ

2

Если вы создаете документ с нуля, тогда ответ тривиален: да!

Достаточно нарисовать все пути прямоугольников, которые имеют один и тот же цвет пятна, а затем использовать оператор, который заполняет, обводят или заполняет &.

Если вы говорите об оптимизации существующего документа PDF, у вас есть какое-то тяжелое программирование. Вам нужно будет анализировать каждый поток контента, ищущий операторов прямоугольника (при условии, что прямоугольники не будут рисоваться с использованием операторов move-to и line-to), проверьте, где эти формы заполнены и/или поглажены, а затем перегруппируйте все эти операторы. Это потребует много размышлений. Я бы знал, с чего начать, но я не могу предсказать, где это закончится. Возможно, окажется, что имеет смысл определить один прямоугольник как объект формы XObject и повторно использовать один внешний объект, возможно, нет. Трудно предсказать.

Кроме того: вы говорите об операторах в потоке. Эти потоки все равно сжаты, поэтому вы можете много работать, чтобы получить лишь небольшое уменьшение размера.

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

Если размер проблемы, могут быть и другие места, где вы «теряете байты», что может привести к более желательному результату. Мне очень любопытно узнать, почему вы считаете, что прямоугольники, использующие спотовые цвета, являются виновниками. Вы являетесь повторного использования экземпляром цвета пятна, не так ли? Если вы создаете новый экземпляр цвета пятна для каждого рисованного прямоугольника, вы нашли настоящего виновника, и вы можете избежать группировки прямоугольников.

Смежные вопросы