Taking Advantage of PDF Kit in Your Cocoa Application

OSXDEV

Jump to: navigation, 찾기

목차

[편집] 코코아 어플리케이션에서 PDF Kit 사용하기

요즘 대부분의 사람들은 어도비사에서 만든 PDF(Portable Document Format)파일과 친근하며, 애플은 Mac OS X의 기본 부분으로 만들었다. PDF 파일 포맷이 이렇게 큰 성공을 거둔 이유를 들자면, 이미 검증이 이루어진 포맷이며, 세부내용이 공개되어 있어 플래폼에 구애받지 않으며, PDF 파일은 파일크기도 작고 보안에 강하다. 간단히 말해서, PDF 파일 포맷은 사용자가 만들기도 쉽고 배포하기도 쉽고, 파일을 보기도 쉽기 때문에 이미 사실상 표준이라고 할 수 있겠다.

이제 PDF Kit을 사용하면 PDF 파일을 코코아 프로그램에서 만드는 것도 쉽게 되었다. Mac OS X 10.4 Tiger 에서는 파일 처리 코드를 직접 작성하지 않아도, PDF Kit 을 이용하여 PDF 문서를 보여주고 다룰수 있게 되었다. PDF Kit 에서는 어도비가 정의한 대부분의 PDF 문서 규격을 이미 구현해 놓았기 때문에, 손쉽게 가져다 쓸 수 있게 되었다. 사파리나 미리보기 같은 프로그램도 이 PDF Kit을 이용하고 있다.

이 문서에서는 PDF Kit에 관해 간략히 살펴보고, 사용상 이점에 대해 알아보고, 어렵지 않게 시작할 수 있도록 도와줄 것이다.

PDF Kit 의 뛰어난 점으로는 단순히 PDF 문서를 보여주는 것 뿐만 아니라, 페이지 둘러보기, 주석달기, 문서 검색과 같은 기능을 이용할 수 있게 해준다. PDF 문서에 미리보기 정보가 있다면 쉽게 보여줄 수 있다. 이 문서에서는 몇가지 기능만 강조할 것이지만, 모든 기능을 확인하려면, 이 문서의 맨 아래에 열거되어 있는 참조 문서를 꼼꼼히 확인해 보기 바란다.

[편집] PDF Kit 이란

PDF Kit 이란 PDF 문서를 다루기 위한 관련 Objective C 언어로 구성된 관련 라이브러리를 묶은 코코아 프레임워크이다. 문서를 보여주는 부분은 PDFView 클래스가 담당하고, 인터페이스 빌더에서 위젯으로도 등록되어 있다. PDFDocument 클래스는 문서 그 자체를 표현한다. 문서에 관한 기본적인 초기화 작업, 검색, 기타 관련 기능을 제공한다. 다른 클래스들은 페이지, 미리보기, 선택영역, 주석 등을 다룬다. PDF Kit 참고 문서를 보면 각각의 클래스에 관해 아주 자세히 나와 있다.

[편집] 시작하기

시작하기 전에 갖추어야 할 도구들이 있다. Xcode 최신판이 설치되어 있는지 확인해 보자. Mac OS X v10.4 Tiger 설치 시디에 같기 포함되어 있고, 다운로드 사이트에서 다운로드를 받을 수도 있다. 여기서는 PDF Kit을 Xcode 코코아 프로젝트에 추가시키는 부분에 대해 알아볼 것이다. PDFView를 인터페이스 빌더에서 사용하게 해 주는 위젯도 포함되어 있다.

[편집] Xcode

PDFView와 관련된 클래스를 사용하려면, PDF Kit을 코코아 프로젝트에 포함시켜야 한다. PDF Kit은 Quartz 엄블렐러(우산) 프레임워크 하부에 포함되어 있다. 엄블렐러 프레임워크를 프로젝트에 추가시키는 것은 간단하다. Project > Add to Project... 메뉴를 선택한 다음, /System/Library/Frameworks/Quartz.framework 을 위치한 다음, Add 버튼을 누르면 아래 그림1과 같이 포함이 된다.

그림:a_cocoa_pdfkit_addQuartz.jpg

그림1 프로젝트에 Quartz 프레임워크 포함시키기

프로젝트에서 Quartz.framework 를 열면, 그림2와 같이 PDFKit.framework가 들어 있는 것을 볼 수 있다.

그림:a_cocoa_pdfkit_WithPDFKit.jpg

그림2 Quartz 엄블렐러 프레임워크내에 있는 PDF Kit 하부 프레임워크

알림 : 샘플 코드는 이미 Quartz.framework가 포함되어 있다. PDFKitViewer나 PDFKitLinker2 같은 예제에서는 이 프레임워크를 추가시킬 필요는 없다.

[편집] Interface Builder

인터페이스 빌더에서 PDF문서를 보여주는 PDF View 위젯은 팔레트라고 하는 특수한 형태의 번들 파일로 제공이 된다. 여기서는 인터페이스 빌더내의 기본 팔레트 세트에 PDF Kit 팔레트를 추가하는 방법에 대해서 알아본다.

인터페이스 빌더에서, Interface Builder > Preferences... 를 선택하면, 환경설정 창이 뜬다. Palettes 탭을 선택하면 기본적인 혹은 이전에 추가해 놓은 팰레트 목록이 이름 순서대로 나온다. 그림 3에서 보는 바와 같이 PDF Kit 팔레트는 기본적으로 포함되어 있지 않다. 전체 리스트를 다 볼려면 스크롤이 필요하다.

그림:a_cocoa_pdfkit_IB_AddPDFView.2.jpg

그림 3 PDF Kit 팔레트는 없다

팔레트 탭 내에서, Add... 버튼을 누른 다음, 팔레트 선택을 위한 파일 선택 창이 나오면, 그림4와 같이 /Developer/Extras/Palettes 디렉토리로 이동한 다음 PDFKit.palette를 선택한 다음 Open 버튼을 눌러준다.

그림:a_cocoa_pdfkit_IB_AddPDFView.3.jpg

그림4 PDF Kit 팔레트 추가

PDFKit.palette 이 이제, 팔레트 목록에 추가된 것이 확인 될 것이다 (그림 5) PDFKit.palette 찾으려면, 스크롤해서 보아야 할 것이다.

그림:a_cocoa_pdfkit_IB_AddPDFView.4.jpg

그림5 PDF Kit 팔레트를 추가한 다음 팔레트 목록

이제 PDF View 위젯을 사용할 수 있다. 그리고 이제부터 만드는 프로젝트에서는 항상 사용할 수 있도록 준비되어 있을 것이다.

그림:a_cocoa_pdfkit_IB.finished.jpg

그림 6 PDF View 위젯이 인터페이스 빌더에서 사용가능해 졌다.

[편집] PDFKit 직접 사용하기

여기서는 PDF Kit의 몇가지 기능해 대해 알아보고, 두가지 샘플 프로젝트를 살펴볼 것이다. 두 프로젝트를 실행시켜보고 아래의 내용을 읽어보면 도움이 될 것이다. /Developer/Examples/Quartz/PDFKit/PDFKitViewer 샘플을 통해서 PDF 문서를 디스플레이 하는 방법을 알아 볼 것이다. Mac OS X v10.4 Tiger에서 개발도구를 설치했 다면, 이 샘플도 설치되어 있을 것이다. 그 다음으로는 PDFKitLinker2 샘플 코드를 ADC 사이트에서 다운로드 받아서 주석을 처리하는 부분에 대해서 알아볼 것이다. 그리고 PDF 문서 검색에 대해 알아보면서 마칠 것이다.

[편집] 화면표시

PDF 문서를 화면에 표시하는 것은 PDFView 클래스가 담당한다. PDFKitViewer 샘플 프로젝트를 실행시켜, PDF 파일을 선택하면, PDFView 객체에 문서가 표시되는 것을 볼 수 있다. 그림7은 실제 실행중인 프로그램이다.

그림:a_cocoa_pdfkit_ViewerFeatures.jpg

그림7 PDFKit Viewer에서 PDF문서를 보여주고 있다.

/Developer/Examples/Quartz/PDFKit/PDFKitViewer/PDFKitViewer.xcode 에서 Xcode 프로젝트를 연 다음, 프로그램을 빌드하고 실행을 시킨다. PDFView를 생성시키고 메뉴를 다루는 부분이 구현되어 있다.

위 그림에서도 볼 수 있듯이, PDFKitViewer는 다음과 같은 기능이 있다. - 한 페이지, 두 페이지 보이기 - 미리보기 보이기 - 검색 도구 무엇보다도, 샘플코드를 통해서 이 모든 기능을 구현하는 방법을 알 수있고, 직접 만든 코코아 프로그램에 가져다 쓸 수 있을 것이다. 그림 8에 PDFKitViewer에서 대부분의 역할을 담당하는 MyPDFDocument 의 인터페이스 선언 부분이 나와 있다. MyPDFDocument는 NSDocument로 부터 상속을 받고있다. 서브클래스를 이런식으로 하는 것은 Cocoa 방법론에 적합한 것이다.

그림:a_cocoa_pdfkit_ViewerFunctions.jpg

그림8 MyPDFDocument 함수들

얼마나 쉽게 사용할 수 있는지 보여주기 위해서, 리스트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];
	}
}

[편집] 주석

PDF Kit의 또다른 기능중 하나는 문서에 주석을 첨가하는 것이다. 이 기능을 살펴보기 위해서 PDFKitLinker2 예제를 볼 것이다. 이 프로그램은 링크를 문서에 포함하도록 해서 주석을 달 수 있도록 해 준다. 링크의 목적지는 문서내의 다른 페이지 이거나, 외부 URL일 수 있다.(그림 9 참고)

그림:a_cocoa_pdfkit_Links2.jpg

그림9 링크로 주석 첨가

이 기능을 사용해 볼려면,

  1. 팝업메뉴를 통해서 링크모드를 "Edit Links"로 맞추어 주면, 링크를 변경하거나 추가할 수 있다. 추가를 한번 해보자. 메뉴에서는 Tools > Edit Links 로도 가능하다. 나중에 모드를 "Test Links"로 바꾸어서 만들어본 링크를 확인해 볼 것이다.
  2. 링크될 텍스트를 선택한다. 그림 9에서 보면, "Apple Computer, Inc."라 되어 있다.
  3. Tools > New Link 를 선택하거나, Command-N. 링크가 될 대상을 선택한 것이다.
  4. 링크의 목적지를 알려준다. 창아래 "URL Link"라고 되어 있는 라디오 버튼을 선택해 주면, 링크가 될 URL 주소를 기입할 수 있다. 그림 9에서는 "http://www.apple.com" 으로 되어 있다.
  5. 링크 모드를 "Test Links"로 한다. 마우스를 움직여서 "Apple Computer, Inc." 글자위로 가져가 본다. 마우스 포인터가 손가락 모양으로 바뀌면서 하이퍼링크임을 나타내 준다. 글자를 클릭하면, 브라우저 창이 하나 뜨면서 애플 홈페이지도 이동할 것이다.

Destination Link 라디오 버튼은 문서내 특정 페이지로 이동하게 해 준다. 이 기능을 이용하면, 페이지 내의 에서 이동이 가능한 목차 페이지를 만들 수 있다. 간단히 방법을 알려주면,

  1. 팝업메뉴에서 "Edit Links"를 선택한 다음
  2. 링크될 글자를 선택하고,
  3. Tools > New Link, 혹은 Command-N
  4. 문서 내에서 이동될 페이지로 이동한다. 아무것도 선택하지 말고, 단지 페이지만 이동한다. 창의 맨 위쪽의 왼쪽 모서리가 이동할 위치를 나타내게 된다.
  5. 창 맨 아래에 있는 Set Destination... 버튼을 눌러준다.
  6. 링크 모드를 "Test Links"로 바꾸어 준다. 2번째 스텝에서 선택한 텍스트를 클릭해 주면 아까 선택해 주었던 문서의 위치로 이동할 것이다.

MyWindowController.m에 보면 어떻게 구현이 되어 있는지 알 수 있다. 리스트2를 보면 MyWindowController.h에 선언되어 있는 메소드들을 볼 수 있다.

리스트2 MyWindowController.h에 선언되어 있는 링크와 관련된 메소드 선언

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

[편집] 검색

PDFKitView 예제에서 검색 결과 화면에서 문서간 이동을 하는 것을 보았는데, 검색은 어떻게 하는 것일까?

PDFKit은 문서내 검색에 관해 2가지 방법을 제공한다. 첫번째는 찾기, 다음찾기를 구현할 수 있는, 글자 단위로 검색하는 것이다.PDFDocument:findString:fromSelection:withOptions 를 이용해서 검색을 할 수 있다. options에는 대소문자 구분, 방향설정 등을 지정할 수 있다. setCurrentSelection와 scrollSelectionToVisible를 PDFView에 호출을 하면, 검색후 선택된 영역을 보여 주고, 그 영역으로 스크롤 하게 된다.

두번째 방법의 검색으로는 문서내에서 단어가 나타난 위치의 목록을 반환하는 것이다. 비동기적 검색에서는 프로그램에서는 검색에 대한 결과의 알림(notification)을 받고, 진행상태 막대를 적절히 표시하고, 중간 결과를 화면에 보여주게 할 수 있다.

이 두가지 검색 방법은 이 문서 맨 아래에 링크되어 있는 PDF Kit 프로그래밍 안내서에 아주 상세히 다루고 있다. 샘플 코드에서도 검색 기능이 모두 구현이 되어 있다.

[편집] 더 많은 정보

이 문서의 내용을 바탕으로, 직접 만든 코코아 프로그램에 PDF 지원을 추가할 수 있다. 더 자세한 정보는 ADC 참조 문서를 통해 알 수 있다.

위의 참조 문서 외에도, WWDC 2005년 세션 213 "PDF의 강력한 힘을 활용하자(등록된 ADC 멤버에게만 허용)"도 참조 하기 바란다.ADC 온라인 계정이 필요하고, 로그인 한 다음 WWDC 세션 메뉴를 찾아 들어가면 세션 동영상을 볼 수 있고 관련 슬라이드를 다운로드 받을 수 있다.

원본 : http://developer.apple.com/cocoa/pdfkit.html (2006-02-20) 번역 : wangsy (2006-10-05)