При этом я сталкиваюсь с проблемой, возникающей при внедрении PDF-файла в iPhone.
Я хочу просто отобразить PDF-файлы. а также предоставление нескольких объектов, таких как увеличение и уменьшение масштаба, навигация по следующей странице, навигация по предыдущей странице и т. д.
Я очень четко читаю PDF-документы, используя url, я также получаю количество страниц и другое свойство, но когда я пытаюсь отобразить его в 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. /////////
Здесь все хорошо !! Я получаю все значения из функций. Теперь я добавил 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 разных способов ни один не привел меня к Результату.