PDF格式很奇怪,通过webview和CGPDFDocument创建,但不是预览

时间:2012-05-05 18:35:24

标签: ios ipad pdf cgpdfdocument

我已经在iPad应用程序中使用了一些方法已经超过一年了,主要是基于苹果代码available here来很好地显示PDF页面 - 到目前为止它已经适用于许多不同的PDF。我刚收到一堆PDF,看起来它们的颜色在某种程度上变形了。预览/ Adob​​e显示的内容:

What I expected

这就是我所看到的,使用模拟器在iPad UIWebView(指向文件)中基于图层的CGPDFDrawPDFPage()

What I got

我想知道PDF是否在某种奇怪的色彩空间(CMYK?),但这无法解释为什么Preview / Adob​​e Reader可以正常打开它。作为参考,这是UIView子类中使用的显示代码的总和(注意,pdfPage是一个实例变量):

// Draw the CGPDFPageRef into the layer at the correct scale.
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
    // from https://stackoverflow.com/questions/3889634/fast-and-lean-pdf-viewer-for-iphone-ipad-ios-tips-and-hints
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh); 
    CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);

    // First fill the background with white.
    CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f);
    CGContextFillRect(context, self.bounds);

    CGContextSaveGState(context);
    // Flip the context so that the PDF page is rendered
    // right side up (all the PDF routines are built for Mac OS X
    // coordinate systems, where Y is upwards.

    // first move the origin down by the full height
    CGContextTranslateCTM(context, 0.0f, self.bounds.size.height);
    // now invert the Y position (scale by -1)
    CGContextScaleCTM(context, 1.0f, -1.0f);

    // Scale the context so that the PDF page is rendered 
    // at the correct size for the zoom level.
    CGContextScaleCTM(context, myScale, myScale);   
    CGContextDrawPDFPage(context, pdfPage);

    CGContextRestoreGState(context);
}

正如您所看到的,我们也是Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints?

的狂热读者

有关如何诊断我们所看到的内容和/或改变色彩空间的任何建议(或更改PDF文档?我们也有此选项)。

3 个答案:

答案 0 :(得分:4)

我猜你的PDF除了CMYK之外还使用一种或多种专色。似乎iOS上不支持这些 - 据我所知,这在任何地方都没有记录,但这是我的经验。

如果您有Acrobat Pro,可以使用Ink Manager(高级→打印制作→墨水管理器)进行检查。

您还可以使用Acrobat将专色转换为印刷色(高级→打印生产→转换颜色...)。单击颜色转换对话框中的“Ink Manager”按钮,然后激活“将所有点转换为处理”复选框。

答案 1 :(得分:2)

根据我的经验,当将CMYK转换为RGB时,iOS会产生颜色。 Acrobat中有一个很好的工具,可以用来提前将PDF转换为RGB,从而完全回避这个问题:

Tools > Print Production > Convert Colors
Check "Convert Colors to Output Intent"
Set Output Intent to "Apple RGB"
Click OK

答案 2 :(得分:1)

如果您要通过创建操作并转换为sRGB配置文件来转换大量PDF,则可以在Acrobat Pro中简化操作。