2014-02-12 85 views
0

我有一些舊代碼,我從.xib創建PDF文件。當我通過電子郵件發送從xib生成的PDF文件時,我可以在郵件窗口中預覽PDF。在Mailer中預覽PDF

使用下面的代碼,我可以從一個PDF組生成一個PDF文件,我可以通過電子郵件發送它,但不會顯示PDF頁面的預覽,這是我試圖實現的目標。

我在有關此文檔中找不到任何內容。有沒有辦法顯示我發送的PDF預覽?

我不想在Web視圖中預覽PDF,預覽應該在呈現時在郵件視圖控制器中顯示。我可以使用PDF文件在郵件視圖控制器中預覽,但該功能(出於某種原因)停止與我編寫的代碼塊一起工作。

//wrap all PDF files together into one PDF file 
    //************************************************************* 


    NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *oldFilePath=[documentsDirectory stringByAppendingPathComponent:@"myPDF.pdf"]; 
    NSURL  *oldFileUrl = [NSURL fileURLWithPath:oldFilePath]; 

    CGContextRef context = CGPDFContextCreateWithURL((__bridge_retained CFURLRef)oldFileUrl, NULL, NULL); 


    for (OBJreport in pages) 
    { 

     // Get the first page from each source document 
     NSString   *pdfPath  = OBJreport.rep_filePath; 
     NSURL    *pdfUrl   = [NSURL fileURLWithPath:pdfPath]; 
     CGPDFDocumentRef pdfDoc   = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfUrl); 
     CGPDFPageRef  pdfPage   = CGPDFDocumentGetPage(pdfDoc, 1); 
     CGRect    pdfCropBoxRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox); 

     // Copy the page to the new document 
     CGContextBeginPage(context, &pdfCropBoxRect); 
     CGContextDrawPDFPage(context, pdfPage); 

     // Close the source files 
     CGContextEndPage(context); 
     CGPDFDocumentRelease(pdfDoc); 
    } 


    // Cleanup 
    //************************************************************* 
    CGContextRelease(context); 


    //add the final output file to the pages array for cleanup 
    //************************************************************* 
    OBJ_report *cleanUpOBJreport = [OBJ_report new]; 


    cleanUpOBJreport.rep_filePath = [oldFileUrl path]; 
    cleanUpOBJreport.rep_mimiType = @"application/pdf"; 
    cleanUpOBJreport.rep_data  = [NSData dataWithContentsOfURL:oldFileUrl]; 
    cleanUpOBJreport.rep_fileName = @"myPDF.pdf"; 

    [pages addObject:cleanUpOBJreport]; 




    //mail 
    //************************************************************* 

    MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; 

    [mailer setMailComposeDelegate:self]; 
    [mailer setSubject:@"File Attached"]; 
    [mailer setMessageBody:defaultEmailCoverLetter isHTML:NO]; 

    //add all pages 
    [mailer addAttachmentData:cleanUpOBJreport.rep_data mimeType:@"application/pdf" fileName:@"myPDF.pdf"]; 
    [self presentViewController:mailer animated:YES completion:nil]; 


    //cleanup files 
    //************************************************************* 
    OBJ_report *clean_OBJreport = [OBJ_report new]; 
    for (clean_OBJreport in pages) 
    { 
     NSError *error = nil; 
     [[NSFileManager defaultManager] removeItemAtPath:clean_OBJreport.rep_filePath error:&error]; 
    } 

回答

0

顯示PDF預覽非常簡單。您只需將UIWebView添加到您的視圖中,並讓它爲您加載PDF預覽。

在你的情況下,可以說已添加一個UIWebView到您mailer視圖控制器的視圖(或優選的任何其它視圖)和連接,使得在視圖控制器一個出口屬性previewerWebview。從您的代碼看來,您的PDF文件正在您的類中由oldFileUrl變量指向的url生成。因此,您可以使用兩行簡單的代碼加載PDF預覽:

NSURLRequest *request = [NSURLRequest requestWithURL:oldFileUrl]; 
[self.previewerWebview loadRequest:request]; 

而且應該顯示您生成的PDF的預覽。

+0

我不想在Web視圖中預覽PDF,預覽應該在呈現時位於郵件視圖控制器中。我可以使用PDF文件在郵件視圖控制器中預覽,但該功能(出於某種原因)停止與我編寫的代碼塊一起工作。 – user2228755

+0

我不確定你的郵件視圖控制器是什麼意思。如果這是從'UIViewConttroller'派生的自定義視圖控制器,則可以隨時在其視圖中添加'UIWebView'並讓它作爲預覽器工作。如果你已經有一個量身定製的但功能不佳的預覽器,爲什麼不分享它的代碼,以便我們可以決定它爲什麼不起作用? –

+0

我的意思是在調用時顯示的默認視圖[self presentViewController:mailer animated:YES completion:nil];感謝您的幫助。 – user2228755

0

PDF的,當多個頁面,將顯示爲一個圖標,而不是預覽整個文檔。這是默認行爲。