iOS извлекает векторную графику из PDF - PullRequest
2 голосов
/ 03 мая 2011

Было много разговоров о PDF-файлах в iOS, и я нашел здесь все ответы на свои вопросы, кроме одного: у меня есть PDF-файл, который содержит простую векторную форму.Можно ли извлечь данные пути для этой фигуры, чтобы я мог использовать ее для рисования фигур непосредственно на слое кварца?

До сих пор я мог перемещаться по документу PDF, создавая вывод, подобный этому:

Object key Resources type: kCGPDFObjectTypeDictionary
Object key ProcSet type: kCGPDFObjectTypeArray with length 4
    Object key Array Object type: kCGPDFObjectTypeName PDF
    Object key Array Object type: kCGPDFObjectTypeName ImageB
    Object key Array Object type: kCGPDFObjectTypeName ImageC
    Object key Array Object type: kCGPDFObjectTypeName ImageI
Object key ColorSpace type: kCGPDFObjectTypeDictionary
    Object key Cs1 type: kCGPDFObjectTypeArray with length 2
        Object key Array Object type: kCGPDFObjectTypeName ICCBased
        Object key Array Object type: kCGPDFObjectTypeStream
            Object key Length type: kCGPDFObjectTypeInteger 737
            Object key N type: kCGPDFObjectTypeInteger 3
            Object key Alternate type: kCGPDFObjectTypeName DeviceRGB
            Object key Filter type: kCGPDFObjectTypeName FlateDecode
Object key XObject type: kCGPDFObjectTypeDictionary
    Object key Im1 type: kCGPDFObjectTypeStream
        Object key Length type: kCGPDFObjectTypeInteger 125
        Object key Type type: kCGPDFObjectTypeName XObject
        Object key Subtype type: kCGPDFObjectTypeName Image
        Object key Width type: kCGPDFObjectTypeInteger 62
        Object key Height type: kCGPDFObjectTypeInteger 49
        Object key Interpolate type: kCGPDFObjectTypeBoolean 1
        Object key ColorSpace type: kCGPDFObjectTypeArray with length 2
            Object key Array Object type: kCGPDFObjectTypeName ICCBased
            Object key Array Object type: kCGPDFObjectTypeStream
                Object key Length type: kCGPDFObjectTypeInteger 737
                Object key N type: kCGPDFObjectTypeInteger 3
                Object key Alternate type: kCGPDFObjectTypeName DeviceRGB
                Object key Filter type: kCGPDFObjectTypeName FlateDecode
        Object key SMask type: kCGPDFObjectTypeStream
            Object key Length type: kCGPDFObjectTypeInteger 36
            Object key Type type: kCGPDFObjectTypeName XObject
            Object key Subtype type: kCGPDFObjectTypeName Image
            Object key Width type: kCGPDFObjectTypeInteger 62
            Object key Height type: kCGPDFObjectTypeInteger 49
            Object key ColorSpace type: kCGPDFObjectTypeName DeviceGray
            Object key Interpolate type: kCGPDFObjectTypeBoolean 1
            Object key BitsPerComponent type: kCGPDFObjectTypeInteger 8
            Object key Filter type: kCGPDFObjectTypeName FlateDecode
        Object key BitsPerComponent type: kCGPDFObjectTypeInteger 8
        Object key Filter type: kCGPDFObjectTypeName FlateDecode

Очевидно, что есть изображение размером 62х49 и маска того же размера (вокруг фигуры PDF-файл прозрачный).Изображение определенно является векторной графикой, я могу масштабировать его до любого размера без потери качества.Так где же информация о пути?

Спасибо за любую информацию!

Best, Бенджамин

Ответы [ 2 ]

0 голосов
/ 14 июля 2017

Существует небольшой проект на GitHub, который использует CGPDFScannerScan () для извлечения векторных данных: http://github.com/depth42/PWDynamicPDFImage

0 голосов
/ 25 апреля 2013

Изображение встроено в сам файл PDF. К нему нет пути - это не внешний файл. Скорее, это объект stream в PDF. Вам нужно будет распаковать («накачать») этот потоковый объект (который сжимается с использованием «flate» в соответствии со значением фильтра в этом XObject), а затем проанализировать и преобразовать содержащиеся в нем команды рисования / рендеринга PDF в их эквивалентные вызовы Quartz. Делать это, безусловно, не тривиально - извините. (Я бы предложил поискать библиотеку, которая сделает это за вас.)

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...