使用CGContextDrawPDFPage进行PDF渲染:找不到CropBox

时间:2011-10-29 14:38:53

标签: objective-c ipad pdf core-graphics

我需要显示从Web服务收到的PDF文件的内容。

我的问题是所有PDF框都返回相同的值。你知道我正在使用的文件有什么问题吗?

CGPDFPageRef drawPDFPageRef = CGPDFPageRetain( CGPDFDocumentGetPage(pdf, 1) );
CGRect cropBoxRect = CGPDFPageGetBoxRect(drawPDFPageRef, kCGPDFCropBox);
CGRect mediaBoxRect = CGPDFPageGetBoxRect(drawPDFPageRef, kCGPDFMediaBox);

cropBoxRect =(0,0,595,842) mediaBoxRect =(0,0,595,842)

当我在UIWebView中显示PDF时,内容正常

这是由UIWebView呈现的PDF

enter image description here

这是由CGContextDrawPDFPage

呈现的PDF

enter image description here

感谢您的帮助, 文森特

2 个答案:

答案 0 :(得分:5)

这看起来不像元数据,而是像媒体框用于裁剪PDF而不是裁剪框。在你的代码中你可能有这样的东西:

  CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); 
  CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault); 
  CGContextSetRGBFillColor( ctx, 1.0, 1.0, 1.0, 1.0 );
  CGContextFillRect( ctx, CGContextGetClipBoundingBox( ctx ));

  CGContextTranslateCTM( ctx, 0.0, self.bounds.size.height );
  CGContextScaleCTM( ctx, 1.0, -1.0 );
  CGAffineTransform pdfXfm = CGPDFPageGetDrawingTransform( pdfPage, kCGPDFMediaBox, self.bounds, 0, true );
  CGContextConcatCTM( ctx, pdfXfm );
  CGContextDrawPDFPage( ctx, pdfPage );

尝试在kCGPDFCropBox中使用CGPDFGetPageDrawingTransform,这可能会有所帮助

答案 1 :(得分:1)

我相信这些标记是在可见页面区域之外绘制的。由于您没有在页面边界处剪辑内容,因此会显示页面内容中的所有内容 此代码应该有帮助(在绘制页面之前):

CGContextAddRect(ctx, cropBoxRect);
CGContextClip(ctx);

本文介绍如何在iOS上正确显示PDF页面:http://ipdfdev.com/2011/03/23/display-a-pdf-page-on-the-iphone-and-ipad/