大家好我在很多方面尝试根据pdf book的大小打印pdf.i还搜索了许多链接和许多代码,如苹果代码,github和许多此类网站但没有用。这个问题是许多问题和答案的重复,但我仍然没有得到确切的结果。我的代码看起来像这样
(void)drawLayer:(CALayer *)图层inContext:(CGContextRef)ctx
{
if(UIInterfaceOrientationIsPortrait([self interfaceOrientation])){
layer.backgroundColor = [UIColor blackColor];
myPageRef = CGPDFDocumentGetPage(myDocumentRef,c);
CGSize pageSize = [kbDataSource pageSize];
GLogInfo(@"the page ize we are getting in draw layer is %@ ",NSStringFromCGSize(pageSize));
//CGContextSaveGState(ctx);
CGSize aspectFitSize = [self getPageFitSizeOfSize:pageSize inSize:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height- __TOP_BRANDING_BAR_HEIGHT)];
CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx));
GLogDebug(@"aspect fitsize of image to %@", NSStringFromCGSize(aspectFitSize));
NSLog(@"layer bounds are:%@ %@ ",NSStringFromCGSize(layer.bounds.size),NSStringFromCGPoint(layer.bounds.origin));
NSLog(@"page size of the book is:%@",NSStringFromCGSize(pageSize));
CGFloat aspectRatio=pageSize.width/pageSize.height;
CGRect cropBox = CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox);
CGRect targetRect = layer.bounds;
CGFloat xScale = targetRect.size.width / cropBox.size.width;
CGFloat yScale = (targetRect.size.height-41) / cropBox.size.height;
CGFloat scaleToApply = (xScale < yScale) ? xScale : yScale;
CGContextTranslateCTM(ctx, 0.0, -41+layer.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
NSLog(@"the crop box values are %@",NSStringFromCGRect(cropBox));
NSLog(@"the crop box values are %f",cropBox.origin.x);
NSLog(@"the scaleToApply is %f",scaleToApply);
NSLog(@"the view bounds are %@",[self.view description]);
if (scaleToApply == yScale)
CGContextConcatCTM(ctx, CGAffineTransformMakeTranslation(-100, -150));
else
CGContextConcatCTM(ctx, CGAffineTransformMakeTranslation(-180, -260));
CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));
CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(myPageRef, kCGPDFCropBox, layer.bounds, 0, true));
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
CGContextDrawPDFPage(ctx, myPageRef);
}
我粘贴了我在drawlayer中尝试过的所有代码。我提供了许多随机数字以适应整个页面的页面,最后我只获得了八本书(pdf)。
我的目标是使用整个ipad屏幕打印任何pdf。 我的结果只有少数pdfs.can任何人告诉我它发生的确切原因,并告诉我将PDF格式打印到ipad的整个屏幕的确切代码。
谢谢大家。答案 0 :(得分:1)
PDF文件中的页面没有标准尺寸。由于您要计算比例以保持正确的宽高比,因此并非所有PDF文件都会占据整个屏幕。
根据您的上述代码,您可以通过更改
使所有PDF文件适合整个屏幕CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));
到
CGContextConcatCTM(ctx, CGAffineTransformMakeScale(xScale, yScale));
但这会搞砸纵横比。
答案 1 :(得分:0)
为什么不使用UIDocumentInteractionController来显示PDF?那么尝试以你的方式呈现PDF会容易得多吗?我在几个实例上使用了UIDocumentInteractionController来预览PDF,word文档,powerpoint等。
查看HERE.
这可能会为您提供所需(使用PDF填充整个屏幕)。它还允许您打印文档并在需要时在另一个应用程序中打开它...
答案 2 :(得分:0)
有一种简单的方法可以在iPhone / iPad上阅读PDF:1。选择一个UIwebView(名称:pdfView)。 2.给Iboutlet连接到它&amp;将它委托给FilesOwner 3.In Viewdidload
[self.pdfView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@“ObjC”ofType:@“pdf”]]];
4.ObjC.pdf应该在资源文件夹中..现在将不同大小的pdf页面安装到iPad的屏幕上,只需打开相应的.xib文件然后转到UIwebView的检查器,然后再查看Web视图属性和刻度标记缩放页面以适应选项。