2

在 iOS 中有很多关于 PDF 的讨论,我在这里找到了所有问题的答案,除了一个:我有一个包含简单矢量形状的 PDF 文件。是否可以提取该形状的路径数据,以便我可以使用它直接在 Quartz 层上绘制形状?

到目前为止,我能够浏览 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

显然有一个大小为 62x49 的图像和一个大小相同的蒙版(围绕形状,PDF 是透明的)。该图像绝对是矢量图形,我可以将其缩放到各种尺寸而不会造成质量损失。那么路径信息到底在哪里呢?

感谢您提供任何信息!

最好的,本杰明

4

2 回答 2

0

图像嵌入在 PDF 文件本身中。它没有路径——它不是外部文件。相反,它是 PDF 中的对象。您将需要解压缩(“膨胀”)该流对象(根据该 XObject 上的 Filter 值使用“flate”压缩),然后解析它包含的 PDF 绘图/渲染命令并将其转换为等效的 Quartz 调用。这样做绝对不是微不足道的——对不起。(我建议寻找一个为你做这件事的图书馆。)

祝你好运!

于 2013-04-24T21:55:43.747 回答
0

GitHub上有一个小项目,使用CGPDFScannerScan()提取矢量数据:http: //github.com/depth42/PWDynamicPDFImage

于 2017-07-14T17:08:55.133 回答