Cocoa Application에서 PDF Kit 사용법

OSXDEV

Jump to: navigation, 찾기

오늘날 많은 사용자들은 어도비사에서 개발한 PDF 포맷에 대해 매우 친숙하다. 특히 PDF는 Mac OS X에 기본으로 포함된 기술이며 PDF가 성공할 수 있었던 큰 이유중의 하나가 바로 플랫폼에 독립적이고 사용, 배포 등 여러 가지 측면에서 편리했기 때문이다. 더욱이 Mac OS X 10.4에서 제공하는 PDF Kit을 사용하면 코코아 애플리케이션에서 PDF 문서를 생성하는 일은 아주 쉽다. PDF Kit의 최대 장점은 별도의 파일 핸들링을 위한 많은 코드를 쓰지 않아도 코코아 애플리케이션내에서 PDF를 표시하고 조작할 수 있으며 개발 시간도 많이 단축이 된다. Safari, Preview처럼 애플의 애플리케이션들도 내부적으로 PDF Kit을 사용해서 PDF로 된 문서 파일들을 표시한다.

이 문서는 PDF Kit을 사용해서 얻을 수 있는 장점 및 개발에 필요한 전반적인 내용을 다루며 어떤 식으로 PDF 문서내의 내용들을 검색하고 어노테이션, 네비게이션을 지원할 수 있는지 또는 화면에 표시할 수 있는 지에 대한 내용을 언급할 예정이며 각 제목별 끝쪽에 나오는 참고 문서를 참고하길 바란다.

목차

[편집] PDF Kit이란?

PDF Kit은 Objective-C 클래스로 이루어진 코코아 프레임웍으로 문서 내부에서 PDF를 표시하거나 조작할 수 있게끔 해준다. 문서에서 PDF를 표시하는 부분은 PDFView라는 클래스를 기반으로 하고 있다. PDFDocument는 PDF 문서 자체를 의미하며 이는 PDF의 초기화, 검색, 기타 문서에 대한 조작 전반적인 부분들을 처리한다. 이외 다른 클래스들은 PDF 페이지, 아웃라인, 선택, 어노테이션들같은 기능들과 연관이 있다. PDF Kit에 관련된 레퍼런스는 이 문서 가장 아래쪽에 링크가 있으니 참고하길 바란다.

[편집] 시작하기

PDF Kit를 가지고 시작하기 전에 몇가지 확인해야 할 내용이 있다. 제일 먼저 최선 버전의 Xcode가 설치되어 있는지를 확인하라. 최신 버전의 Xcode는 Tools Download 페이지에서 다운로드 할 수 있다. 준비가 되었다면 Xcode를 사용해서 PDF Kit을 이용한 간단한 코코아 프로젝트를 만들어 볼 것 이다.

[편집] Xcode

샘플로 만들어 볼 코코아 프로젝트 파일에 PDFView나 다른 클래스들을 사용하기 위해서는 먼저 PDF Kit을 추가해야 한다. PDF Kit은 Quartz 프레임웍 내부에 위치하는 서브 프레임웍으로 간단히 Quartz 프레임웍에 링크를 해주면 된다. Quartz 프레임웍은 /System/Library/Frameworks/Quartz.framework에 위치하며 그림 1처럼 Quartz 프레임웍을 선택하고 "Add"버튼을 클릭하면 된다.

그림:A_cocoa_pdfkit_AddQuartz.jpg‎
<그림 1>

그림 2처럼 프로젝트 파일에서 Quartz.framework을 열어보면 PDFKit.framework을 볼 수 있다.

그림:A_cocoa_pdfkit_WithPDFKit.jpg
<그림 2>

인터페이스 빌더 인터페이스 빌더는 팔레트라고 불리는 특별한 타입의 번들 파일들을 가지고 있다. PDF Kit 역시 인터페이스 빌더를 위한 팔레트 파일을 제공하며 사용자는 손쉽게 PDF를 처리할 수 있는 준비를 할 수 있다. 인터페이스 빌더에서 PDF Kit 팔레트를 추가하기 위해서는 인터페이스 빌더 메뉴에서 Interface Builder > Preferences... 선택한 후 나타나는 윈도우에서 가장 오른쪽에 있는 Palettes 탭을 선택한다. Palettes 탭을를 선택하면 그림 3처럼 현재 추가되어 있는 팔레트 목록들이 나타난다.

그림:A_cocoa_pdfkit_IB_AddPDFView 2.jpg
<그림 3>

그림 3에서 우측 하단에 있는 "Add"버튼을 클릭해서 /Developer/Extras/Palettes/로 이동한 후 그림 4처럼 PDFKit.palette를 선택한다.

그림:A_cocoa_pdfkit_IB_AddPDFView 3.jpg
<그림 4>

그림:A_cocoa_pdfkit_IB_AddPDFView 4.jpg
<그림 5>

그림 5처럼 이제 PDFKit.palette가 인터페이스 팔레트 부분에 추가된 것을 볼 수 있으며 PDF View를 사용할 수 있다.

그림:A_cocoa_pdfkit_IB_finished.jpg
<그림 6>

[편집] PDF Kit 사용하기

이번 부분에서는 여러 가지 PDF Kit의 기능들에 대해서 언급할 예정이며 이해를 돕기 위해서 2가지 샘플 프로젝트를 제공할 것이다. 첫번째 샘플은 PDF 문서를 표시하는 데 중점을 준 프로젝트 파일로 /Developer/Examples/Quartz/PDFKit/PDFKitViewer에 위치하고 있다. 만약 Mac OS X 10.4용 디벨로퍼 툴을 설치했다면 사용자의 디스크 내에서 이 프로젝트 파일을 찾을 수 있다. 그리고 PDFKitViewer 다음으로 설명할 프로젝트는 PDFKitLinker2 sample code 이다. 이 프로젝트 파일은 ADC 사이트에서 다운로드 할 수 있으며 PDF 문서를 어떤 식으로 오노테이션을 하는지를 설명할 것이며 검색 전반적인 부분들에 대해서 언급할 예정이다.

[편집] PDF 표시

PDF 문서를 화면에 나타내주는 메인 클래스는 PDFView 클래스이다. PDFKitViewer 샘플 코드 프로젝트는 PDF 파일을 선택하고 이를 PDFView 오브젝트상에 나타내주는 샘플이다. 그림 7은 PDFKitViewer가 동작하는 모습이다.

그림:A_cocoa_pdfkit_ViewerFeatures.jpg
<그림 7>

먼저 /Developer/Examples/Quartz/PDFKit/PDFKitViewer/PDFKitViewer.xcode 파일을 실행한다. 실행한 후 컴파일을 하고 실행을 해본다. 실행을 해보면 위 그림에서 처럼 PDFViewer에서 아래와 같은 유용한 기능들을 제공한다는 것을 확인할 수 있다.

  • 단일 페이지 또는 다중 페이지 형태로 표시 기능 제공
  • PDF 문서의 아웃라인 표시 기능 제공
  • 드로워에서 검색 기능 제공

그림:A_cocoa_pdfkit_ViewerFunctions.jpg
<그림 8>

그리고 그림 8을 보게되면 MyPDFDocument로 선언된 클래스 파일을 볼 수 있다. 이 클래스는 NSDocument를 서브클래싱을 한 클래스로 PDFView 클래스를 내부적으로 포함하고 있다. 한가지 쉬운 예로 표 1을 보면 검색된 결과에 대해서 문서가 어떤 식으로 스크롤을 하는 지에 대한 간단한 코드를 볼 수 있을 것이다.

<표 1>

- (void) tableViewSelectionDidChange: (NSNotification *) notification
{
	int			rowIndex;
	
	// What was selected.  Skip out if the row has not changed.
	rowIndex = [(NSTableView *)[notification object] selectedRow];
	if (rowIndex >= 0)
	{
		[_pdfView setCurrentSelection: [_searchResults objectAtIndex: rowIndex]];
		[_pdfView centerSelectionInVisibleArea: self];
	}
}

어노테이션 PDFKit의 뛰어난 기능중의 하나는 어노테이션 기능이다. 이 기능에 대해서 알고 싶다면 먼저 PDFKitLinker2 예제를 사용하면 간단하게 알 수 있을 것이다. 이 예제에서 다루는 내용은 사용자가 어떤 식으로 PDF 문서내에 있는 임베딩이 된 링크들을 어노테이션을 하는지에 대해 알 수 있으며 한 문서내에서 다른 페이지간에 링크 또는 외부 링크에 대한 조작 등을 쉽게 파악할 수 있다.

그림:A_cocoa_pdfkit_Links2.jpg
<그림 9>

다음 과정을 따라 위 기능들을 검토해보자. 1. "Link Mode" 팝업 메뉴를 사용해서 "Edit Link"를 선택하면 링크를 추가하거나 수정할 수 있다. 2. 그림 9에서처럼 링크된 문자를 선택한다. 3. 커맨드 + N 또는 "Tools > New Link"를 선택한다. 4. 링크 정보를 입력한다. 만약 "URL Link" 라디오 버튼을 선택했다면 "http://www.apple.com"형태로 URL 정보를 입력하면 된다. 5. "Link Mode" 팝업 메뉴에서 "Test Links"를 선택 한 후 커서를 "Apple Computer, Inc."위로 옮겨본다. 커서가 해당 문자위로 가게되면 커서 모양이 손 모양의 아이콘으로 바뀌면 이를 클릭하면 되면 웹브라우저가 실행되면서 해당 URL로 가게된다.

그리고 "Destination Link" 라디오 버튼은 링크된 텍스트를 문서내에 있는 다른 페이지로 링크를 하는 경우 사용한다. 1. "Link Mode" 팝업 메뉴에서 "Edit Links"를 선택한다. 2. 링크할 문자를 선택한다. 3. 커맨드 + N 또는 "Tools > New Link"를 선택한다. 4. 링크를 할 부분으로 문서를 스크롤해서 이동한다. 단, 문자나 다른 부분을 선택하지 않아야 한다. 5. "Set Destination..." 버튼을 클릭한다. 6. "Link Mode" 팝업 메뉴에서 "Test Links"로 변경해서 2번 과정에서 5번 과정에서 했던 부분들이 정확히 되었는지를 확인한다.

샘플 코드내에서 위 부분에 해당하는 부분들은 MyWindowController.m에서 찾을 수 있으며 표 2는 관련 메소드들을 언급을 해둔 표이다.

<표 2>

// -------- link methods
- (void) newActiveAnnotation: (NSNotification ) notification;
- (void) updateLinkTools;
- (void) linkTypeMatrixHit: (id) sender;
- (void) linkURLEntered: (id) sender;
- (void) linkSetDestinationHit: (id) sender;

검색 PDFKit의 검색을 위해 크게 2가지 방법을 제공한다. 첫번째는 문자를 하나 하나씩 찾아보는 방법으로 PDFDocumentfindString:fromSelection:withOptions를 사용한다. 이는 검색/재검색 판넬을 이용할 수 있으며 대소문자 구분, 방향 등 여러 가지 설정을 허용한다. 이외 검색된 결과를 PDFView내에 있는 setCurrentSelection과 scrollSelectionToVisible를 이용해서 표시할 수 있다.

두번째 방법은 비동기적인 검색 방법이다. 이는 검색을 하는 동안 검색된 결과를 노티피케이션 형태로 받을 수 있으며 검색된 결과를 받을 때 마다 결과값을 업데이트할 수 있다. 이 두가지 방법은 PDF Kit 프로그래밍 가이드에 보다 자세하게 언급이 되어있으며 아래 링크를 통해 자세한 기능을 찾아보길 바란다.

[편집] 추가 정보

코코아 애플리케이션에서 PDF를 지원하기 위해서는 ADC Reference Library 문서를 참고하고 아래 링크 정보에서 참고하길 바란다.

  • PDF Kit Programming Guide
  • PDF Kit Reference
  • PDFKitLinker2 sample code


추가적으로 WWDC 2005 세션 213에서 언급한 "Harnessing the Power of PDF"참고해보길 바란다.(이는 ADC 멤버들에게 제공된다.)