【问题标题】:Getting a CGImage out of a PDF file从 PDF 文件中获取 CGImage
【发布时间】:2010-10-01 11:36:04
【问题描述】:

我有一个 PDF 文件,其中每一页都是 (LZW) TIFF 文件。我知道这一点,因为我创造了它。我希望能够加载它并将其保存为一堆 TIFF 文件。

我可以使用 CGPDFDocumentCreateWithURL 打开 PDF 文件,并获得一个页面。我什至可以将页面绘制到屏幕上。

我想做的是将页面绘制到 bitmapContext 中,这样我就可以使用 CGBitmapContextCreateImage 将图像放入 CGImageRef 中。但是,为了创建位图上下文,我需要知道图像的大小和分辨率。我似乎不知道如何获取 CGPDFDocument 或 CGPDFPage 来告诉我该页面上图像对象的分辨率。

有没有我没有意识到的更简单的方法?

谢谢。

【问题讨论】:

    标签: c macos pdf quartz-graphics


    【解决方案1】:

    Ghostscript 将在这里为您工作:

    gs -sDEVICE=tiff32nc -sOutputFile=foo-Page%d.tif foo.pdf

    对于 2 页文档 foo.pdf,您应该得到:

    • foo-Page1.tif
    • foo-Page2.tif

    从内存我认为 GS 的输出分辨率是包含页面的分辨率,不一定是嵌入文件的分辨率(除非它们一开始就相同)。

    如果是这种情况,并且您希望恢复图像原来的分辨率,您可以使用iText (java) 或iTextSharp(.net) 到get to the image 内容流(即字节) 并在将内容流转换为 PdfImage iirc 后,以您选择的格式将它们写入磁盘。

    希望 ghostscript 选项适用于节省编写另一个实用程序...

    【讨论】:

    • 我会使用 pdfimages 命令(来自 poppler-utils)以原始分辨率提取图像,而不是让 gs 渲染它。但是,是的,您可以使用一些库以编程方式进行操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2021-02-27
    • 2022-11-29
    • 2011-08-29
    相关资源
    最近更新 更多