我在iPhone中实现PDF文件时遇到了一个问题。
我想要的只是显示PDF文件。还提供一些设施,如放大和缩小,下一页导航,上一页导航等。
我非常清楚使用url阅读PDF文档,我也获得了页面和其他属性的数量,但是当我尝试在View或WebView中显示它时,我的意思是当我尝试绘制pdf页面时,我没有得到页面,只是简单地看到空白。
要显示页面,我尝试了5种不同的方法,但它们都没有让我成功。因此,我必须接近你们。
我附上了我使用的5种不同方法的代码片段。
请仔细阅读并指导我!欢迎您的建议。
////////////////////////////
- (void)viewDidLoad {
[super viewDidLoad];
const char *file = @"Pdf_first.pdf";
CGPDFDocumentRef myDocument;
CGPDFPageRef page;
CGRect mediaBox;
CFStringRef path;
size_t noOfPages;
CFURLRef url;
CGContextRef pdfContext;
//////// Code to get Path and Url for the dictionary where our PDF file currently stored. /////////
NSFileManager *FileManager = [NSFileManager defaultManager];
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths1 objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"Pdf_first.pdf"];
path = documentsDirectory;
url = CFURLCreateWithFileSystemPath (NULL, path,kCFURLPOSIXPathStyle, 0);
myDocument = CGPDFDocumentCreateWithURL(url);
myDocument = CGPDFDocumentRetain(myDocument);
CFMutableDictionaryRef myDictionary = NULL;
myDictionary = CFDictionaryCreateMutable(NULL, 0,&kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
page = CGPDFDocumentGetPage(myDocument, 1);
noOfPages = CGPDFDocumentGetNumberOfPages(myDocument);
pdfContext = CGPDFContextCreateWithURL(url, NULL, myDictionary);
CGRect pageMediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
//////// Code to get Path and Url for the dictionary where our PDF file currently stored. /////////
每件事都很好!!我从功能中获取所有价值。现在Bellow我已经添加了5种不同的方式 我关注显示或绘制我在iphone中可以看到的页面。
////////////////////////// Way 1 ///////////////////////
CGContextTranslateCTM(pdfContext, 0.0, [webView bounds].size.height);
CGContextScaleCTM(pdfContext, 1.0, -1.0);
CGContextConcatCTM(pdfContext, CGPDFPageGetDrawingTransform(page, kCGPDFCropBox,[webView bounds], 0, true));
CGContextDrawPDFPage(pdfContext, page);
CGContextRestoreGState(pdfContext);
////////////////////////// Way 1 ///////////////////////
////////////////////////// Way 2 ///////////////////////
CGRect bounds = CGRectMake(10, 10, 300, 300);
CGContextSaveGState(pdfContext);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, bounds, 0, true);
CGContextConcatCTM(pdfContext, pdfTransform);
CGContextDrawPDFPage(pdfContext, page);
CGContextRestoreGState(pdfContext);
////////////////////////// Way 2 ///////////////////////
///////////////////////////////////// Way 3 ////////////////////
for(int i = 1; i <= noOfPages; ++i) {
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(myDocument, i);
CGRect pageMediaBox = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
CGContextBeginPage (pdfContext, &pageMediaBox);
CGContextStrokeRect(pdfContext, CGRectMake(50, 50, 500,700));
CGContextShowTextAtPoint (pdfContext, 60, 699, text, strlen(text));
CGContextDrawPDFPage(pdfContext, pdfPage);
CGContextEndPage (pdfContext);
}
///////////////////////////////////// Way 3 ////////////////////
/////////////////////////////// Way 4 ////////////////////////////////
//mediaBox = CGPDFDocumentGetMediaBox(document, 1);
CGPDFBox mediaBox = CGPDFDocumentGetMediaBox(document, 1);
//mediaBox = CGRectMake(10,10,300,300);
// int rotationAngle = CGPDFDocumentGetRotationAngle(document, 1);
int rotationAngle = 30;
//CGContextDrawPDFDocument(UIGraphicsGetCurrentContext(), CGRectMake(25,25,250,250), document, 1);
//CGPDFPageGetDrawingTransform(<#CGPDFPageRef page#>, <#CGPDFBox box#>, <#CGRect rect#>, <#int rotate#>, <#_Bool preserveAspectRatio#>)
CGAffineTransform transform = CGPDFPageGetDrawingTransform(page, mediaBox, CGRectMake(25, 25, 250,250), rotationAngle, TRUE);
/////////////////////////////// Way 4 ////////////////////////////////
///////////////////////// Way 5 /////////////////////////////
CGContextTranslateCTM(pdfContext, 0.0, 320);
CGContextScaleCTM(pdfContext, 1.0, -1.0);
CGContextSaveGState(pdfContext);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, CGRectMake(0, 0, 280, 320), 0, true);
CGContextConcatCTM(pdfContext, pdfTransform);
CGContextDrawPDFPage(pdfContext, page);
CGContextRestoreGState(pdfContext);
///////////////////////// Way 5 /////////////////////////////
在上述5种不同的方式中,没有单一的方式将我引向结果。