gpt4 book ai didi

iPhone 某些 PDF 呈现为黑色图像

转载 作者:行者123 更新时间:2023-12-03 18:56:20 26 4
gpt4 key购买 nike

我正在尝试使用下面的代码绘制 PDF 页面。某些 PDF 可以正确渲染,但其他 PDF 则仅显示为全黑图像,或者渲染了部分部分而其余部分为黑色。在比较所发生的情况时,显示“正常”的那些似乎总是包含“常规”文本以及一些图形(图表等),而显示为黑色的通常都是图形(例如一页纸)例如音乐)。谁能指出我在这方面的正确方向?我在新的 3.2 SDK 上构建它。

谢谢!

// PDF page drawing expects a Lower-Left coordinate system, so we flip the coordinate system
// before we start drawing.
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

// Grab the first PDF page
CGPDFPageRef page = CGPDFDocumentGetPage(myPDF, pageNo);
// We're about to modify the context CTM to draw the PDF page where we want it, so save the graphics state in case we want to do more drawing
CGContextSaveGState(context);
// CGPDFPageGetDrawingTransform provides an easy way to get the transform for a PDF page. It will scale down to fit, including any
// base rotations necessary to display the PDF page correctly.
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, self.bounds, 0, true);
// And apply the transform.
CGContextConcatCTM(context, pdfTransform);
// Finally, we draw the page and restore the graphics state for further manipulations!
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);

最佳答案

CGPDFDocumentRef MyGetPDFDocumentRef (const char *文件名) { CFStringRef 路径; CFURL引用网址; CGPDFDocumentRef 文档; 路径 = CFStringCreateWithCString (NULL, 文件名,kCFStringEncodingUTF8); url = CFURLCreateWithFileSystemPath (NULL, 路径, kCFURLPOSIXPathStyle, 0); CFRelease(路径); 文档 = CGPDFDocumentCreateWithURL(url);//2 CFRelease(url); int count = CGPDFDocumentGetNumberOfPages (文档);//3 如果(计数==0){ printf("`%s' 至少需要一页!", 文件名); 返回空值; } 返回文件; }

void MyDisplayPDFPage (CGContextRef myContext,size_t pageNumber,const char *filename) {
CGPDFDocumentRef document;
CGPDFPageRef page;
document = MyGetPDFDocumentRef (filename);// 1
page = CGPDFDocumentGetPage (document, pageNumber);// 2
CGContextDrawPDFPage (myContext, page);// 3
CGContextTranslateCTM(myContext, 0, 20);
CGContextScaleCTM(myContext, 1.0, -1.0);
CGPDFDocumentRelease (document);// 4
}



#import "DashBoard.h"

#import <QuartzCore/QuartzCore.h>

@interface UIImage (WBImage)
// rotate UIImage to any angle
-(UIImage*)rotate:(UIImageOrientation)orient;
@end

@implementation UIImage (WBImage)


static inline CGFloat degreesToRadians(CGFloat degrees)
{
return M_PI * (degrees / 180.0);
}

static inline CGSize swapWidthAndHeight(CGSize size)
{
CGFloat swap = size.width;

size.width = size.height;
size.height = swap;

return size;
}


-(UIImage*)rotate:(UIImageOrientation)orient
{
CGRect bnds = CGRectZero;
UIImage* copy = nil;
CGContextRef ctxt = nil;
CGRect rect = CGRectZero;
CGAffineTransform tran = CGAffineTransformIdentity;

bnds.size = self.size;
rect.size = self.size;

switch (orient)
{
case UIImageOrientationUp:
return self;

case UIImageOrientationUpMirrored:
tran = CGAffineTransformMakeTranslation(rect.size.width, 0.0);
tran = CGAffineTransformScale(tran, -1.0, 1.0);
break;

case UIImageOrientationDown:
tran = CGAffineTransformMakeTranslation(rect.size.width,
rect.size.height);
tran = CGAffineTransformRotate(tran, degreesToRadians(180.0));
break;

case UIImageOrientationDownMirrored:
tran = CGAffineTransformMakeTranslation(0.0, rect.size.height);
tran = CGAffineTransformScale(tran, 1.0, -1.0);
break;

case UIImageOrientationLeft:
bnds.size = swapWidthAndHeight(bnds.size);
tran = CGAffineTransformMakeTranslation(0.0, rect.size.width);
tran = CGAffineTransformRotate(tran, degreesToRadians(-90.0));
break;

case UIImageOrientationLeftMirrored:
bnds.size = swapWidthAndHeight(bnds.size);
tran = CGAffineTransformMakeTranslation(rect.size.height,
rect.size.width);
tran = CGAffineTransformScale(tran, -1.0, 1.0);
tran = CGAffineTransformRotate(tran, degreesToRadians(-90.0));
break;

case UIImageOrientationRight:
bnds.size = swapWidthAndHeight(bnds.size);
tran = CGAffineTransformMakeTranslation(rect.size.height, 0.0);
tran = CGAffineTransformRotate(tran, degreesToRadians(90.0));
break;

case UIImageOrientationRightMirrored:
bnds.size = swapWidthAndHeight(bnds.size);
tran = CGAffineTransformMakeScale(-1.0, 1.0);
tran = CGAffineTransformRotate(tran, degreesToRadians(90.0));
break;

default:
// orientation value supplied is invalid
assert(false);
return nil;
}

UIGraphicsBeginImageContext(bnds.size);
ctxt = UIGraphicsGetCurrentContext();

switch (orient)
{
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
CGContextScaleCTM(ctxt, -1.0, 1.0);
CGContextTranslateCTM(ctxt, -rect.size.height, 0.0);
break;

default:
CGContextScaleCTM(ctxt, 1.0, -1.0);
CGContextTranslateCTM(ctxt, 0.0, -rect.size.height);
break;
}

CGContextConcatCTM(ctxt, tran);
CGContextDrawImage(ctxt, rect, self.CGImage);

copy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return copy;
}


@end




@implementation DashBoard

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
filePath=[[NSString alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"roadie" ofType:@"pdf"]];

// an IBOutlet UIScrollView
[scrMain setContentSize:CGSizeMake(720, 720)];
// an IBOutlet UIImageView
[imgV setFrame:CGRectMake(0, 0, 720, 720)];
UIGraphicsBeginImageContext(CGSizeMake(720, 720));
// initial page is an size_t variable
initialPage=1;
MyDisplayPDFPage(UIGraphicsGetCurrentContext(), initialPage, [filePath UTF8String],myTable,mainString);
imgV.image=UIGraphicsGetImageFromCurrentImageContext();
imgV.image=[imgV.image rotate:UIImageOrientationDownMirrored];
}

只需复制并粘贴上面的代码即可。它会对你有用。

关于iPhone 某些 PDF 呈现为黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com