четверг, 24 февраля 2011 г.

Про мега варианты защиты текста в XPS

В связи с STDU Viewer кинули тут замечательный XPS файл. Проблема была в том, что страницы рендерились крайне медленно, т.е. тормозило все жутчайшим образом. Первая мысль была что народ в очередной раз чего-то отсканировал c 600 dpi разрешением и закрутил в xps. Думаю, эко до чего техника дошла, раньше все в djvu и pdf гнали, а теперь значит и до xps добрались. Причем размер у файла был вполне себе достойный, больше 30 метров, что подозрения усиливало.
Но выяснилось, что все намного веселее.
Нас самом деле xps, он как бы сильно похож на pdf, т.е. то же документ с подготовленными к печати страницами, часть данных может быть представлена в векторном виде (причем вроде как тут инструментов у xps даже побогаче), часть в растровом, часть просто как текст, причем и шрифты можно внедрить. Надо сказать, xps видится мне форматом существенно прямее и четче чем pdf, хотя и не без своих заскоков. В pdf например, есть понятие потока и соответственно кодированного потока, ну и есть пяток разных кодеров, типа Deflate, jpeg, CCITT и прочем RLE, причем над данными, которые вы хотите положить в pdf файл, вы можете последовательно надругаться разными кодеками. Понятно, что по-большому счету вот это вот последовательное применение нескольких кодеков над одними и теми же данными нужно крайне редко (т.е. я вообще не припомню, чтобы с таким сталкивался, хотя и допускаю, что кто-то где-то и когда-то этим пользовался и может даже пользуется до сих пор). При этом совершенно очевидно, что ч/б картинки будут кодироваться CCITT или JBIG2, цветные jpeg или jpeg2k ну, а текстовые данные Deflate или LZ77 (вроде LZ77 там тоже есть лезть проверять в спеку лень). Но все как обычно сделано очень обще, при том, что вся эта общность вырождается во вполне конкретную частность в 95% случаев, и еще кучу работы чтобы поддержать оставшиеся 5%. В отличие от pdf в xps все проще и от того приятнее для реализации, причем сильно сомневаюсь, что можно найти pdf не переводимый в xps.
В xps правда есть свои веселые заморочки, типа virtual brush с дикой вложенностью, но в целом формат на мой вкус попрямее, и думаю если микрософт его не забросит, в конечном итоге он должен pdf придушить. Хотя судя по скорости распростронения электронных читалок, есть вполне приличная вероятность, что скоро форматы с четким разбитием на страницы сдохнут уже все скопом, а выживут всякого рода ePub, FB2 и прочие MOBI. А если учесть, что гугл всерьез решил пересканировать всю мировую литературу, перспектива, лично меня, сильно радует.
Возвращаясь к тому файлу xps с которого все началось. Итак, открываю файл начинаю разбираться чего там внутре. Честно говоря, давно я так не удивлялся.
Как известно современные шрифты (да вообщем, и не очень современные тоже, поминая METAFONT Кнута), задают каждую буквовку набором кривых, от чего собственно шрифты и называются векторными. Так вот ребята готовившие документ, не стали внедрять шрифты, а просто перевели весь текст в набор кривых, благо формат xps вполне это повзоляет.
Плюс на мой взгляд только один. Документ по сути разом стал Read Only, т.е. скопировать оттуда текст стало фактически не возможно штатными средствами. Из минусов размер документа раздулся до невозможности, т.е. если его растерезовать с разрешением 600DPI и потом загнать в pdf с JPBIG2 кодеком или в djvu, то этот самый растровый документ будет раз в 10 меньше по объему (а может и в 20). Ну и понятно что скорость рендеренга такого документа резко снизилась, потому что одно дело когда шрифт растеризуется и кешируется, и другое когда кешировать особенно нечего и каждый символ приходиться растеризовать заново.
С одной стороны столь элегантное решение по созданию Read Only документов не может не радовать, с другой плодить энтропию в таких объемах мягко говоря выглядит не экономно.

Комментариев нет: