AIR의 PDF 내용 추가

Adobe AIR 1.0 이상

Adobe® AIR®에서 실행되는 응용 프로그램은 SWF 및 HTML 내용뿐만 아니라 PDF 내용도 렌더링할 수 있습니다. AIR 응용 프로그램은 HTMLLoader 클래스, WebKit 엔진 및 Adobe® Reader® 브라우저 플러그인을 사용하여 PDF 내용을 렌더링합니다. AIR 응용 프로그램에서 PDF 내용은 응용 프로그램의 전체 높이 및 폭에 맞게 확장하거나 인터페이스의 한 부분으로 확장할 수 있습니다. Adobe Reader 브라우저 플러그인은 AIR 응용 프로그램에서 PDF 파일의 표시를 제어합니다. Reader 도구 모음 인터페이스에서 위치, 앵커 및 표시 여부 등에 대한 컨트롤을 수정한 경우 이후 AIR 응용 프로그램 및 브라우저에서 PDF 파일을 볼 때에도 그러한 변경 사항이 지속됩니다.

중요: AIR에서 PDF 내용을 렌더링하려면 Adobe Reader 또는 Adobe® Acrobat® 버전 8.1 이상을 설치해야 합니다.

PDF 기능 검색

Adobe Reader 또는 Adobe Acrobat 8.1 이상이 없으면 PDF 내용이 AIR 응용 프로그램에 표시되지 않습니다. 사용자가 PDF 내용을 렌더링할 수 있는지 여부를 검색하려면 먼저 HTMLLoader.pdfCapability 속성을 확인합니다. 이 속성은 HTMLPDFCapability 클래스의 다음 상수 중 하나로 설정됩니다.

상수

설명

HTMLPDFCapability.STATUS_OK

Adobe Reader의 최신 버전(8.1 이상)이 검색되었으므로 PDF 내용을 HTMLLoader 객체로 로드할 수 있습니다.

HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND

검색된 Adobe Reader 버전이 없습니다. HTMLLoader 객체가 PDF 내용을 표시할 수 없습니다.

HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD

Adobe Reader가 검색되었지만 너무 오래된 버전입니다. HTMLLoader 객체가 PDF 내용을 표시할 수 없습니다.

HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD

Adobe Reader의 최신 버전(8.1 이상)이 검색되었지만 PDF 내용을 처리하도록 설정된 Adobe Reader의 버전이 Reader 8.1보다 이전 버전입니다. HTMLLoader 객체가 PDF 내용을 표시할 수 없습니다.

Windows의 경우 사용자의 시스템에서 Adobe Acrobat 또는 Adobe Reader 버전 7.x 이상이 실행 중이면 로드 중인 PDF를 지원하는 최신 버전이 설치되어 있어도 이 버전이 사용됩니다. 이 경우 pdfCampability 속성의 값이 HTMLPDFCapability.STATUS_OK이면 AIR 응용 프로그램이 PDF 내용을 로드하려고 할 때 이전 버전의 Acrobat 또는 Reader에 경고가 표시됩니다(AIR 응용 프로그램에서는 예외가 발생하지 않음). 최종 사용자에게 이러한 상황이 발생할 수 있는 경우 응용 프로그램을 실행하는 동안 Acrobat을 닫도록 알려 주는 것이 좋습니다. PDF 내용이 허용 가능한 시간 프레임 내에 로드되지 않는 경우 이러한 지침을 표시할 수도 있습니다.

Linux에서 AIR은 사용자가 내보낸 경로(acroread 명령이 포함된 경우)와 /opt/Adobe/Reader 디렉토리에서 Adobe Reader를 찾습니다.

다음 코드에서는 사용자가 AIR 응용 프로그램에서 PDF 내용을 표시할 수 있는지 여부를 검사합니다. 사용자가 PDF를 표시할 수 없으면 코드가 HTMLPDFCapability 오류 객체에 해당하는 오류 코드를 추적합니다.

if(HTMLLoader.pdfCapability == HTMLPDFCapability.STATUS_OK)  
{ 
    trace("PDF content can be displayed"); 
} 
else  
{ 
    trace("PDF cannot be displayed. Error code:", HTMLLoader.pdfCapability); 
} 

PDF 내용 로드

HTMLLoader 인스턴스를 만들고, 해당 크기를 설정하고, PDF 경로를 로드하여 AIR 응용 프로그램에 PDF를 추가할 수 있습니다.

다음 예제에서는 외부 사이트에서 PDF를 로드합니다. URLRequest를 사용 가능한 외부 PDF에 대한 경로로 바꾸십시오.

var request:URLRequest = new URLRequest("http://www.example.com/test.pdf"); 
pdf = new HTMLLoader(); 
pdf.height = 800; 
pdf.width = 600; 
pdf.load(request); 
container.addChild(pdf);

app 및 app-storage와 같은 파일 URL 스킴과 AIR 고유의 URL 스킴에서 내용을 로드할 수도 있습니다. 예를 들어 다음 코드에서는 응용 프로그램 디렉토리의 PDF 하위 디렉토리에 있는 test.pdf 파일을 로드합니다.

app:/js_api_reference.pdf

AIR URL 스킴에 대한 자세한 내용은 URI 스킴을 참조하십시오.

PDF 내용 스크립팅

브라우저의 웹 페이지에서와 마찬가지로 JavaScript를 사용하여 PDF 내용을 제어할 수 있습니다.

Acrobat에 대한 JavaScript 확장을 통해 제공되는 기능의 예는 다음과 같습니다.

  • 페이지 탐색 및 확대/축소율 제어

  • 문서 내 양식 처리

  • 멀티미디어 이벤트 제어

Adobe Acrobat용 JavaScript 확장에 대한 자세한 내용은 Adobe Acrobat Developer Connection(http://www.adobe.com/devnet/acrobat/javascript.html)을 참조하십시오.

HTML-PDF 통신 기본 사항

HTML 페이지의 JavaScript는 PDF 내용을 나타내는 DOM 객체의 postMessage() 메서드를 호출하여 PDF 내용의 JavaScript에 메시지를 보낼 수 있습니다. 예를 들어 다음 포함된 PDF 내용을 살펴봅니다.

<object id="PDFObj" data="test.pdf" type="application/pdf" width="100%" height="100%"/>

포함 HTML 내용의 다음 JavaScript 코드는 PDF 파일의 JavaScript에 메시지를 보냅니다.

pdfObject = document.getElementById("PDFObj"); 
pdfObject.postMessage(["testMsg", "hello"]);

PDF 파일은 이 메시지를 받기 위한 JavaScript를 포함할 수 있습니다. 문서 수준, 폴더 수준, 페이지 수준, 필드 수준, 일괄 처리 수준 컨텍스트 등 일부 컨텍스트에서 PDF 파일에 JavaScript 코드를 추가할 수 있습니다. 여기서는 PDF 문서가 열릴 때 평가되는 스크립트를 정의하는 문서 수준 컨텍스트에 대해서만 설명합니다.

PDF 파일은 hostContainer 객체에 messageHandler 속성을 추가할 수 있습니다. messageHandler 속성은 메시지에 응답하기 위한 핸들러 함수를 정의하는 객체입니다. 예를 들어 다음 코드에서는 PDF 파일이 호스트 컨테이너(PDF 파일을 포함하는 HTML 내용)에서 받은 메시지를 처리하기 위한 함수를 정의합니다.

this.hostContainer.messageHandler = {onMessage: myOnMessage}; 
 
function myOnMessage(aMessage) 
{ 
    if(aMessage[0] == "testMsg") 
    { 
        app.alert("Test message: " + aMessage[1]); 
    } 
    else 
    { 
        app.alert("Error"); 
    } 
}

HTML 페이지의 JavaScript 코드는 페이지에 포함된 PDF 객체의 postMessage() 메서드를 호출할 수 있습니다. 이 메서드를 호출하면 PDF 파일의 문서 수준 JavaScript에 "Hello from HTML"이라는 메시지가 전송됩니다.

<html> 
    <head> 
    <title>PDF Test</title> 
    <script> 
        function init() 
        { 
            pdfObject = document.getElementById("PDFObj"); 
            try { 
                 pdfObject.postMessage(["alert", "Hello from HTML"]); 
            } 
            catch (e) 
            { 
                alert( "Error: \n name = " + e.name + "\n message = " + e.message ); 
            } 
        } 
    </script> 
    </head> 
    <body onload='init()'> 
        <object 
            id="PDFObj" 
            data="test.pdf" 
            type="application/pdf" 
            width="100%" height="100%"/> 
    </body> 
</html>

Acrobat 8을 사용하여 PDF 파일에 JavaScript를 추가하는 방법에 대한 자세한 내용 및 고급 예제는 Adobe AIR에서 PDF 내용 크로스 스크립팅을 참조하십시오.

ActionScript에서 PDF 내용 스크립팅

SWF 내용의 ActionScript 코드는 PDF 내용의 JavaScript와 직접 통신할 수 없습니다. 그러나 ActionScript는 PDF 내용을 로드하는 HTMLLoader 객체에 로드된 HTML 페이지의 JavaScript와 통신할 수 있으며 이 JavaScript 코드는 로드된 PDF 파일의 JavaScript와 통신할 수 있습니다. 자세한 내용은 AIR에서 HTML 및 JavaScript 프로그래밍을 참조하십시오.

AIR의 PDF 내용에 대해 알려진 제한 사항

Adobe AIR의 PDF 내용에는 다음과 같은 제한 사항이 있습니다.

  • PDF 내용은 투명한(transparent 속성이 true로 설정됨) 윈도우(NativeWindow 객체)에서 표시되지 않습니다.

  • PDF 파일의 표시 순서는 AIR 응용 프로그램의 다른 표시 객체와 다르게 작동합니다. PDF 내용은 HTML 표시 순서에 따라 정확하게 고정되더라도 항상 AIR 응용 프로그램의 표시 순서에 따른 내용 위에 배치됩니다.

  • PDF 문서가 포함된 HTMLLoader 객체의 특정 시각적 속성이 변경되면 PDF 문서가 표시되지 않습니다. 이러한 속성에는 filters, alpha, rotationscaling 속성이 있습니다. 이러한 속성을 변경하면 속성이 재설정될 때까지 PDF 내용이 표시되지 않도록 렌더링됩니다. HTMLLoader 객체가 포함된 표시 객체 컨테이너의 이러한 속성을 변경하는 경우에도 PDF 내용이 표시되지 않습니다.

  • PDF 내용이 포함된 NativeWindow 객체의 Stage 객체에 대한 scaleMode 속성을 StageScaleMode.NO_SCALE로 설정해야만 PDF 내용이 표시됩니다. 해당 속성을 다른 값으로 설정하면 PDF 내용이 표시되지 않습니다.

  • PDF 파일 내부에 있는 내용에 대한 링크를 클릭하면 PDF 내용의 스크롤 위치가 업데이트됩니다. PDF 파일 외부에 있는 내용에 대한 링크를 클릭하면 링크의 대상이 새 윈도우인 경우에도 PDF가 포함된 HTMLLoader 객체가 리디렉션됩니다.

  • AIR에서는 PDF 주석 처리 작업 과정이 작동하지 않습니다.