티스토리 뷰

IOS

PDF 파일 생성 및 저장(UIView를 이용)

Vincent.seo 2018. 3. 29. 09:10

1. UIView(xib)파일 만들기

먼저 xib 파일을 하나 만든다.
Attributes inspector 에서 Simulated Metrics - Size 를 Inferred 에서 Freeform 으로 바꾼다.
그리고 Size inspetor 에서 Width와 Height를 A4용지의 크기에 맞게 조절을 한다.
UIView를 상속받는 클래스를 생성하고 위에서 만든 xib파일의 File's Owner과 연결한다.

2. UIView를 PDF 로 저장

위에서 만든 UIView오브젝트를 로드하기 위해서는 아래와 같이 먼저 uiView오브젝트를 생성하여야 된다.

UIView *rootView = [[[NSBundle mainBundle] loadNibNamed:@"SampleUIView" owner:self options:nil] objectAtIndex:0];

생성된 UIView 오브젝트는 PDFCreate클래스를 이용하여 PDF파일로 변환후 (현재로서는 Documents)폴더에 저장하게 된다.  createPDFformUIView는 두개의 파라미터를 받는데 하나는 PDF로 생성될 UIView 이고 다른 하나는 저장될 파일명 이다.

-(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename


createPDFfrom메소드에 대한 내용설명

// byte arry를 저장하기 위한 배열선언
NSMutableData *pdfData = [NSMutableData data];

// UIGraphics에 위에서 생성산 어레이와 변환될 UIview의 주소를 전달한다.
UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
// 다음페이시 생성시 한번 더 호출
UIGraphicsBeginPDFPage();
// 모든페이지 생성완료 후 호출
UIGraphicsEndPDFContext();
// 파일이 저장될 경로를 가져온다
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];

// 저장된 경로로 파일을 저장한다.
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);

3. 저장된 PDF를 다른프로그램으로 보내기

IOS에서 생성된 PDF파일은 자신의 도메인의 폴더에 저장된다. 안드로이드와 다르게 프로그램에서 생성되어 저장된 파일은 샌드박스의 보호를 받으며 다른 프로그램(File explore)에서 접근 불 가능하다. 그러므로 저장된 파일을 보기위해서는 UIDocumentInteractionController를 이용하여 파일은 다른 앱으로 전송하여 저장 하여야 한다.

위에서 생성하여 저장된 파일을 다른 프로그램으로 보내기위해서는 UIDocumentInteractionController를 활용하며 생성자 파라미터로 저장된 파일의 경로를 보내주면 된다.

UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:documentDirectoryFilename]];
docController.delegate = self;
[docController presentPreviewAnimated:YES];









'IOS' 카테고리의 다른 글

레이아웃 - 스크롤뷰의 컨텐츠 추가 삭제 하기  (0) 2018.08.28
IOS 스레드 제어  (0) 2018.08.28
Property  (0) 2018.03.14
클래스 오브젝트 초기화  (0) 2017.03.29
@Property, @Synthesize, @Dynamic  (0) 2017.03.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함