2013년 4월 29일 월요일

iOS 프로그래밍 팁 - fastpdfkit 사용하기

ALTIBASE HDB Manual app
https://itunes.apple.com/us/app/altibase-hdb-manual/id597190444?l=ko&ls=1&mt=8

처음 만들때는 QuartzCore 이용해서 pdf를 다루는 API를 직접 이용해서 작성해 보았다.

확대 축소 부 터 해서 제스처에 의한 페이지 컨트롤
모든 게 부 자연스러웠고

인터넷에서 PDF 를 다루는 코드 들을 조합해서 나름 만들었지만 매우 불안정했다.

특히 검색 속도는 너무 느렸다.

http://support.fastpdfkit.com/kb/how-to/three-minutes-implementation-guide

fastpdfkit이라는 라이브러를 이용해서 바로 프로그램을 업데이트 했다.

성능 속도 모든 면에서 우수하다.

단 무료 버전에 경우 로고가 잠시 뜨지만

간단한 PDF를 보여주어야 할 경우에 이를 이용하는 것이 좋은 듯 하다.

위 링크 3분 가이드를 그대로 한다면 어렵지 않게 구현 가능 할 것이다.


실제로 ALTIBASE HDB Manual app에서

ManualViewController.h

ManualViewController.m


#import <UIKit/UIKit.h>
#import <FastPdfKit/FastPdfKit.h>
@class MFDocumentManager;

@interface ManualViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, MFDocumentViewControllerDelegate>
{
    UITableView * tableView_;
    NSArray *keys_;
    NSDictionary * datasource_;
    NSDictionary * filename_;
}

-(void)actionOpenPlainDocument:(NSString *)docName withPage:(NSInteger)pageNum;

@end

ManualViewController.m

테이블 뷰 선택 시 파일이름과 페이지 번호만 넘기면 된다.!!


/테이블 선택
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    
    
//    PDFViewController * pdfviewController = [[[PDFViewController alloc] init]autorelease];
    
    id key = [keys_ objectAtIndex:indexPath.section];
    NSString * filename = [[filename_ objectForKey:key] objectAtIndex:indexPath.row];
    
    //pdfviewController.filename = filename;
    
    //현재 페이지 번호 전달
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    NSInteger pageNum = [userDefault integerForKey:filename];
    if (pageNum == 0) {
        pageNum = 1;
    }
    
    [self actionOpenPlainDocument:filename withPage:pageNum];

    //pdfviewController.currentPage = pageNum;

    //[self.navigationController pushViewController: pdfviewController animated:YES];
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}





-(void)actionOpenPlainDocument:(NSString *)docName withPage:(NSInteger)pageNum{
    /** Set document name */
    NSString *documentName = docName;
    
    /** Get temporary directory to save thumbnails */
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    
    /** Set thumbnails path */
    NSString *thumbnailsPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",documentName]];
    
    /** Get document from the App Bundle */
    NSURL *documentUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:documentName ofType:@"pdf"]];
    
    /** Instancing the documentManager */
    MFDocumentManager *documentManager = [[MFDocumentManager alloc]initWithFileUrl:documentUrl];
    
    
    
    /** Instancing the readerViewController */
    ReaderViewController *pdfViewController = [[ReaderViewController alloc]initWithDocumentManager:documentManager];
    
    /** Set resources folder on the manager */
    documentManager.resourceFolder = thumbnailsPath;
    
    /** Set document id for thumbnail generation */
    pdfViewController.documentId = documentName;
    

    
    pdfViewController.startingPage = pageNum;
    //pdfViewController.page = pageNum;

    
    /** Present the pdf on screen in a modal view */
    //[self presentModalViewController:pdfViewController animated:YES];
    [self.navigationController pushViewController: pdfViewController animated:YES];
    
    //현재 페이지 번호 저장
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    [userDefault setInteger:pdfViewController.page forKey:docName];
    [userDefault synchronize];

    
    /** Release the pdf controller*/
    
    [pdfViewController release];
}


댓글 없음: