Hinzufügen von PDF-Inhalten in AIR

Adobe AIR 1.0 und höher

In Adobe® AIR® ausgeführte Dateien rendern nicht nur SWF- und HTML-Inhalt, sondern auch PDF-Inhalt. AIR-Anwendungen rendern PDF-Inhalt mit der HTMLLoader-Klasse, der WebKit-Engine und dem Browser-Plug-In für Adobe® Reader®. In einer AIR-Anwendung kann PDF-Inhalt die volle Höhe und Breite der Anwendung oder einen Teil der Benutzeroberfläche einnehmen. Das Browser-Plugin für Adobe Reader steuert die Anzeige von PDF-Dateien in einer AIR-Anwendung. Änderungen an der Reader-Symbolleiste (wie Positionssteuerung, Verankerung, Sichtbarkeit) werden bei der weiteren Anzeige von PDF-Dateien in AIR-Anwendungen und im Browser übernommen.

Wichtig: Damit PDF-Inhalt in AIR gerendert werden kann, muss Adobe Reader oder Adobe® Acrobat® Version 8.1 oder höher auf dem Benutzersystem installiert sein.

Erkennen der PDF-Funktionalität

Wenn der Benutzer Adobe Reader oder Adobe Acrobat 8.1 oder höher nicht installiert hat, wird in einer AIR-Anwendung kein PDF-Inhalt angezeigt. Um herauszufinden, ob ein Benutzer PDF-Inhalt rendern kann, prüfen Sie zunächst die HTMLLoader.pdfCapability -Eigenschaft. Für diese Eigenschaft ist eine der folgenden Konstanten der HTMLPDFCapability-Klasse festgelegt:

Konstante

Beschreibung

HTMLPDFCapability.STATUS_OK

Eine ausreichende Version (8.1 oder höher) von Adobe Reader wurde erkannt. PDF-Inhalt kann in ein HTMLLoader-Objekt geladen werden.

HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND

Es wurde keine Version von Adobe Reader erkannt. Ein HTMLLoader-Objekt kann PDF-Inhalt nicht anzeigen.

HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD

Adobe Reader wurde erkannt, die Version ist jedoch zu alt. Ein HTMLLoader-Objekt kann PDF-Inhalt nicht anzeigen.

HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD

Eine ausreichende Version (8.1 oder höher) von Adobe Reader wurde erkannt; die Version von Adobe Reader, die zum Verarbeiten von PDF-Inhalt eingerichtet wurde, ist jedoch älter als Reader 8.1. Ein HTMLLoader-Objekt kann PDF-Inhalt nicht anzeigen.

Wenn unter Windows Adobe Acrobat oder Adobe Reader Version 7.x oder höher installiert ist und auf dem System des Benutzers ausgeführt wird, wird diese Version verwendet, auch wenn eine höhere Version installiert ist, die das Laden von PDF-Dateien unterstützt. Hat die pdfCapability -Eigenschaft den Wert HTMLPDFCapability.STATUS_OK , zeigt in diesem Fall die alte Version von Acrobat oder Reader einen Warnhinweis an, wenn eine AIR-Anwendung versucht, PDF-Inhalt zu laden (in der AIR-Anwendung wird keine Ausnahme ausgelöst). Wenn diese Situation für die Endbenutzer auftreten kann, sollten Sie Anweisungen zum Schließen von Acrobat in Erwägung ziehen, die beim Ausführen der Anwendung angezeigt werden. Die Anzeige dieser Anweisungen sollte möglicherweise dann erfolgen, wenn der PDF-Inhalt nicht innerhalb eines akzeptablen Zeitraums geladen wird.

Unter Linux sucht AIR im vom Benutzer exportierten PATH nach Adobe Reader (falls dieser den acroread-Befehl enthält) und im Verzeichnis „/opt/Adobe/Reader“.

Mit dem folgenden Code wird festgestellt, ob der Benutzer PDF-Inhalt in einer AIR-Anwendung anzeigen kann. Wenn der Benutzer keinen PDF-Inhalt anzeigen kann, erfasst der Code den Fehlercode, der dem HTMLPDFCapability-Fehlerobjekt entspricht:

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

Laden von PDF-Inhalten

Sie können einer AIR-Anwendung durch Erstellen einer HTMLLoader-Instanz, Festlegen ihrer Dimensionen und Laden des Pfades einer PDF-Datei PDF-Inhalt hinzufügen.

Das folgende Beispiel lädt eine PDF-Datei aus einer externen Site. Ersetzen Sie das URLRequest durch den Pfad zu einer verfügbaren externen 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);

Sie können Inhalt ferner aus Datei-URLs und AIR-spezifischen URL-Schemas wie app und app-storage laden. Der folgende Code lädt die Datei „test.pdf“ im Unterverzeichnis „PDFs“ des Anwendungsverzeichnisses:

app:/js_api_reference.pdf

Weitere Informationen zu AIR-URL-Schemas finden Sie unter URI-Schemas .

Skripterstellung für PDF-Inhalte

Mit JavaScript können Sie PDF-Inhalt genau wie in einer Webseite in einem Browser steuern.

JavaScript-Erweiterungen für Acrobat bieten unter anderem folgende Funktionen:

  • Steuern der Seitennavigation und -vergrößerung

  • Verarbeiten von Formularen im Dokument

  • Steuern von Multimediaereignissen

Ausführliche Informationen zu JavaScript-Erweiterungen für Adobe Acrobat finden Sie in der Adobe Acrobat Developer Connection unter http://www.adobe.com/devnet/acrobat/javascript.html .

Grundlagen der HTML-PDF-Kommunikation

JavaScript in einer HTML-Seite kann durch Aufrufen der postMessage() -Methode des DOM-Objekts, das den PDF-Inhalt repräsentiert, eine Nachricht an JavaScript in PDF-Inhalt senden. Betrachten Sie beispielsweise den folgenden eingebetteten PDF-Inhalt:

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

Der folgende JavaScript-Code im enthaltenden HTML-Inhalt sendet eine Nachricht an das JavaScript in der PDF-Datei:

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

Die PDF-Datei kann JavaScript zum Empfangen dieser Nachricht enthalten. In einigen Kontexten, darunter Kontext auf Dokument-, Ordner-, Seiten-, Feld- oder Batchebene, können Sie PDF-Dateien JavaScript-Code hinzufügen. Hier wird nur auf Kontext auf Dokumentebene, der beim Öffnen des PDF-Dokuments zu bewertende Skripts definiert, eingegangen.

Eine PDF-Datei kann dem hostContainer -Objekt eine messageHandler -Eigenschaft hinzufügen. Die messageHandler -Eigenschaft ist ein Objekt, das Prozedurfunktionen zum Reagieren auf Nachrichten definiert. Der folgende Code definiert beispielsweise die Funktion zum Verarbeiten von Nachrichten, die die PDF-Datei vom Hostcontainer (dem HTML-Inhalt, der die PDF-Datei einbettet) erhält:

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

JavaScript-Code in der HTML-Seite kann die postMessage() -Methode des in der Seite enthaltenen PDF-Objekts aufrufen. Beim Aufrufen dieser Methode wird eine Nachricht ( "Hello from HTML" ) an das JavaScript auf Dokumentebene in der PDF-Datei gesendet:

<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>

Ein komplexeres Beispiel und Informationen zum Verwenden von Acrobat 8 zum Hinzufügen von JavaScript zu einer PDF-Datei finden Sie unter Cross-Scripting von PDF-Inhalt in Adobe AIR .

Skripterstellung für PDF-Inhalte aus ActionScript

ActionScript-Code (in SWF-Inhalt) kann nicht direkt mit JavaScript in PDF-Inhalt kommunizieren. ActionScript kann jedoch mit dem JavaScript in der in ein HTMLLoader-Objekt geladenen HTML-Seite, das PDF-Inhalt lädt, kommunizieren und dieser JavaScript-Code kann mit dem JavaScript in der geladenen PDF-Datei kommunizieren. Weitere Informationen finden Sie unter Programmieren mit HTML und JavaScript in AIR .

Bekannte Beschränkungen für PDF-Inhalt in AIR

PDF-Inhalt in Adobe AIR unterliegt folgenden Beschränkungen:

  • PDF-Inhalt wird nicht in einem transparenten Fenster (einem NativeWindow-Objekt) angezeigt, für dessen transparent -Eigenschaft true festgelegt wurde.

  • Die Anzeigereihenfolge einer PDF-Datei unterscheidet sich von anderen Anzeigeobjekten in einer AIR-Anwendung. Zwar wird PDF-Inhalt entsprechend der HTML-Anzeigereihenfolge richtig dargestellt, doch befindet er sich in der Anzeigereihenfolge für Inhalt der AIR-Anwendung immer im Vordergrund.

  • Wenn bestimmte visuelle Eigenschaften eines HTMLLoader-Objekts, das ein PDF-Dokument enthält, geändert werden, wird das PDF-Dokument unsichtbar. Zu diesen Eigenschaften gehören filters , alpha , rotation und scaling . Beim Ändern dieser Eigenschaften wird der PDF-Inhalt unsichtbar, bis die Eigenschaften zurückgesetzt werden. Der PDF-Inhalt ist auch unsichtbar, wenn Sie diese Eigenschaften für Anzeigeobjektcontainer ändern, die das HTMLLoader-Objekt enthalten.

  • PDF-Inhalt ist nur dann sichtbar, wenn die scaleMode -Eigenschaft des Stage-Objekts des NativeWindow-Objekts mit dem PDF-Inhalt auf StageScaleMode.NO_SCALE eingestellt ist. Bei jedem anderen Wert ist der PDF-Inhalt nicht sichtbar.

  • Durch Klicken auf Verknüpfungen zu Inhalten in der PDF-Datei wird die Bildlaufposition des PDF-Inhalts aktualisiert. Durch Klicken auf Verknüpfungen außerhalb der PDF-Datei wird das die PDF enthaltende HTMLLoader-Objekt umgeleitet (auch wenn das Ziel einer Verknüpfung ein neues Fenster ist).

  • PDF-Kommentarworkflows können in AIR nicht eingesetzt werden.