我附上了用于显示PDF的代码段。以下代码显示PDF,但似乎是使用iPad显示器的全尺寸挤压或不使用,导致页面太小。
如何显示适合iPad显示边界或缩放状态的PDF?我尝试过使用不同的方法(方法2),但是它会产生一个问题,即PDF以90度的角度旋转。
方法-1:
CGContextSaveGState(ctx);
CGContextTranslateCTM(ctx, 0.0, [self.view bounds].size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextConcatCTM(ctx,
CGPDFPageGetDrawingTransform(page, kCGPDFCropBox,
[self.view bounds], 0, true));
CGContextDrawPDFPage(ctx, page);
CGContextRestoreGState(ctx);
方法-2:
CGPDFPageRef page = CGPDFDocumentGetPage(pdfdocument, PageNo+1);
if(page){
CFRetain(page);
}
CGRect pageRect =CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
int angle= CGPDFPageGetRotationAngle(page);
float pdfScale = self.bounds.size.width/pageRect.size.width;
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,self.bounds);
CGContextSaveGState(context);
// Flip the context so that the PDF page is rendered
// right side up.
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// Scale the context so that the PDF page is rendered
// at the correct size for the zoom level.
CGContextScaleCTM(context, pdfScale,pdfScale);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
任何人都可以向我推荐一个解决方案,允许任何大小和任意角度的PDF在两个方向上全屏显示在iPad上吗?如果您能为我提供代码片段或伪代码,那就太好了。 感谢
答案 0 :(得分:1)
希望这会有所帮助。它显示了如何呈现URL引用的PDF的第一页。
此代码是我自己的代码库的片段集合,所以不要只是将其粘贴到1个文件中并期望它构建和运行。我发表了一些评论,以便您了解哪些属于哪里,并且您需要声明一些ivars才能正常工作。
// helper function
CGRect CGRectScaleAspectFit(CGRect sourceRect,CGRect fitRect)
{
if ( sourceRect.size.width > fitRect.size.width)
{
float scale = fitRect.size.width / sourceRect.size.width;
sourceRect.size.width = fitRect.size.width;
sourceRect.size.height = (int)(sourceRect.size.height * scale);
}
if ( sourceRect.size.height > fitRect.size.height)
{
float scale = fitRect.size.height / sourceRect.size.height;
sourceRect.size.height = fitRect.size.height;
sourceRect.size.width = (int)(sourceRect.size.width * scale);
}
return sourceRect;
}
// in your UIView subclass init method
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
pdfPage = CGPDFDocumentGetPage(pdf, 1);
CGRect fitrect = CGRectMake(0, 0, self.frame.size.width,self.frame.size.height);
CGRect pageRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
CGRect f;
f.origin.x=0;
f.origin.y=0;
f.size.height = self.frame.size.height;
f.size.width = self.frame.size.height * pageRect.size.width/pageRect.size.height;
f = CGRectScaleAspectFit(f,fitrect); // this is the actual pdf frame rectangle to fill the screen as much as possible
pdfScale = f.size.height/pageRect.size.height;
// in your UIView subclass drawRect method
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,self.bounds);
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextScaleCTM(context, pdfScale,pdfScale);
CGContextDrawPDFPage(context, pdfPage);
CGContextRestoreGState(context);
答案 1 :(得分:0)
这将显示您的PDF全屏:不确定这是处理PDF的最佳方式
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
//PDF might be transparent, assume white paper - set White Background
[[UIColor whiteColor] set];
CGContextFillRect(ctx, rect);
//Flip coordinates
CGContextGetCTM(ctx);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -rect.size.height);
//PDF File Path
NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"TEST" withExtension:@"pdf"];
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfURL);
CGPDFPageRef page1 = CGPDFDocumentGetPage(pdf, 1);
//Get the rectangle of the cropped inside
CGRect mediaRect = CGPDFPageGetBoxRect(page1, kCGPDFCropBox);
CGContextScaleCTM(ctx, rect.size.width / mediaRect.size.width,
rect.size.height / mediaRect.size.height);
//Draw PDF
CGContextDrawPDFPage(ctx, page1);
CGPDFDocumentRelease(pdf);
}
将要显示的PDF复制到项目库中, 在上面的例子中,PDF文件的名称是“TEST”:你想用你的文件名命名你的
这适用于我在UIView中全屏显示PDF,
我不确定这是你最好的选择:有问题:即你需要处理缩放,如果你这样做,你需要处理平移。方向也是一个很大的混乱(当你将设备翻转到横向模式时)文件失去了它的Aspect Ration(并且被压扁了)
用它玩一轮......
尽管在IOS中加入PDF处理只不过是一种痛苦。 。 。
希望这能帮到你一点