【问题标题】:Getting a CGImageRef out of a PDFDocument从 PDFDocument 中获取 CGImageRef
【发布时间】:2010-08-03 14:33:15
【问题描述】:

我有一个 PDFDocument(当然由 PDFPages 组成),我需要一个 CGImageRef 来插入我的 IKImageView。

目前,我从PDFPage中获取datarepresentation,放入NSImage,然后获取NSImage的TIFFRepresentation,放入CGImageSource,再从源中取出CGImage。

这似乎是不必要的复杂,经过两个 NSData 步骤...

但是,当我尝试将 PDF 数据直接放入 CGImageSource 时,即使这似乎可以工作,但当我取出 CGImage 时,它​​始终为 NULL。我应该做些什么来让它发挥作用吗?

【问题讨论】:

    标签: cocoa macos quartz-graphics


    【解决方案1】:

    在雪豹中有一个方法-[NSImage CGImageForProposedRect:context:hints:]。或者您可以将页面绘制到 CGBitmapContext 中并使用CGBitmapContextCreateImage

    【讨论】:

    • 对不起,我忘了说这需要在 10.5 中工作......如果我可以完全避免 NSImage 阶段,那就太好了。 cgbitmapcontext 策略可能效果更好......我会看到它变得多么讨厌。
    【解决方案2】:

    查看我的CGPDFAdditions 代码中的CreatePDFPageImage 函数。我认为这正是您所需要的。

    【讨论】:

    • 有趣。有没有一种从 PDFPage 获取 CGPDFPage 的简单方法?还是来自 PDFDocument 的 CGPDFDocument?如果我必须将 PDFPage 转换为数据,然后创建一个提供程序来获取 CGPDFDocument,然后从中获取页面,我不确定这是否比我当前的 NSImage 解决方案更胜一筹……
    • PDFPage 类的PDFPageInternal 类别中有一个未记录的-(CGPDFPageRef)pageRef; 方法,你可以试试这个。否则,直接使用CGPDFDocumentCreateWithURL()CGPDFDocumentGetPage() 函数即可。
    • 我宁愿不使用未记录的方法,它们很容易消失...而且我不一定有 URL,因为 PDF 可能实际上还不是文件...通常我'正在使用扫描数据直接制作 PDF。
    • 好吧,未记录的方法仅用于测试目的。另一种正式获取 CGPDFDocumentRef 的方法是使用CGPDFDocumentCreateWithProvider() 函数。
    • 太好了,正是我想要的。 +1 谢谢。
    【解决方案3】:

    尝试将 PDF 文档(而不是单页)的数据输入 CGImageSource。来自源的图像应与文档中的页面相对应。

    【讨论】:

    • 我认为 CGImageSource 不支持 PDF。我刚刚尝试在 Snow Leopard 上调用 CFShow( CGImageSourceCopyTypeIdentifiers() );,得到了 39 个 UTI 的列表,但 com.adobe.pdf 不在列表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多