PDF-inhoud toevoegen in AIR

Adobe AIR 1.0 of hoger

Actieve toepassingen in Adobe® AIR® kunnen niet alleen SWF- en HTML-inhoud, maar ook PDF-inhoud renderen. AIR-toepassingen renderen PDF-inhoud met behulp van de klasse HTMLLoader, de WebKit-engine en de Adobe® Reader® plug-in voor de browser. In een AIR-toepassing kan PDF-inhoud gelden voor de volledige hoogte en breedte van uw toepassing of slechts voor een deel van de interface. Met de Adobe Reader-plug-in voor de browser kunt instellen hoe PDF-bestanden in een AIR-toepassing worden weergegeven. Wijzigingen in de interface van de Reader-werkbalk (zoals in besturingselementen voor positie, ankerpunten en zichtbaarheid) blijven van toepassing als u PDF-bestanden vervolgens weergeeft in zowel AIR-toepassingen als de browser.

Belangrijk: Om PDF-inhoud in AIR te renderen, moet Adobe Reader of Adobe® Acrobat® versie 8.1 of hoger op de computer van de gebruiker zijn geïnstalleerd.

PDF-mogelijkheden detecteren

Als Adobe Reader of Adobe Acrobat 8.1 of hoger niet op de computer van de gebruiker is geïnstalleerd, wordt PDF-inhoud niet weergegeven in een AIR-toepassing. Om na te gaan of een gebruiker PDF-inhoud kan renderen, moet u eerst de eigenschap HTMLLoader.pdfCapability controleren. Deze eigenschap is ingesteld op een van de volgende constanten uit de klasse HTMLPDFCapability.

Constante

Beschrijving

HTMLPDFCapability.STATUS_OK

Een geschikte versie (8.1 of hoger) van Adobe Reader is gedetecteerd en PDF-inhoud kan in een HTMLLoader-object worden geladen.

HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND

Geen versie van Adobe Reader gedetecteerd. HTMLLoader-objecten kunnen geen PDF-inhoud weergeven.

HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD

Adobe Reader is gedetecteerd maar de versie is te oud. HTMLLoader-objecten kunnen geen PDF-inhoud weergeven.

HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD

Een geschikte versie (8.1 of hoger) van Adobe Reader is gedetecteerd maar de versie van Adobe Reader die is ingesteld om PDF-inhoud af te handelen, is ouder dan Reader 8.1. HTMLLoader-objecten kunnen geen PDF-inhoud weergeven.

Als de gebruiker een Windows-computer heeft waarop Adobe Acrobat of Adobe Reader versie 7.x of hoger wordt uitgevoerd, wordt die versie gebruikt, zelfs als een recentere versie is geïnstalleerd die het laden van PDF-inhoud ondersteunt. Als in dit geval de waarde van de eigenschap pdfCapability is ingesteld op HTMLPDFCapability.STATUS_OK terwijl een AIR-toepassing PDF-inhoud probeert te laden, geeft de oudere versie van Acrobat of Reader een waarschuwing weer (er wordt geen uitzondering gegenereerd in de AIR-toepassing). Als deze situatie zich bij uw eindgebruikers kan voordoen, kunt u instructies opgeven om Acrobat te sluiten terwijl uw toepassing wordt uitgevoerd. U wordt aangeraden deze instructies weer te geven als de PDF-inhoud niet binnen een aanvaardbare tijd wordt geladen.

Bij Linux zoekt AIR naar Adobe Reader op het pad (PATH) dat door de gebruiker is geëxporteerd (als het de opdracht acroread bevat) en in de map /opt/Adobe/Reader.

Aan de hand van de volgende code kan worden vastgesteld of een gebruiker PDF-inhoud in een AIR-toepassing kan weergeven. Als de gebruiker PDF-inhoud niet kan weergeven, wordt er door de code een foutcode getraceerd die overeenkomt met het HTMLPDFCapability-foutobject:

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

PDF-inhoud laden

U kunt een PDF toevoegen aan een AIR-toepassing door een HTMLLoader-instantie te maken, de afmetingen ervan in te stellen en het pad van een PDF te laden.

In het volgende voorbeeld ziet u hoe u een PDF vanaf een externe site laadt. Vervang de URLRequest door het pad naar een beschikbare externe 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);

U kunt ook inhoud laden vanaf bestands-URL's en AIR-specifieke URL-schema's, zoals app en app-storage. Voorbeeld: de volgende code laadt het bestand test.pdf naar de PDF-submap van de toepassingsmap:

app:/js_api_reference.pdf

Zie URI-schema's voor meer informatie over URL-schema's van AIR.

Scripting van PDF-inhoud

U kunt JavaScript gebruiken om PDF-inhoud te besturen, net zoals in een webpagina in de browser.

JavaScript-extensies voor Acrobat bieden onder andere de volgende mogelijkheden:

  • Paginanavigatie en vergroting regelen

  • Formulieren in het document verwerken

  • Multimediagebeurtenissen besturen

Meer informatie over JavaScript-extensies voor Adobe Acrobat vindt u in Adobe Acrobat Developer Connection op http://www.adobe.com/devnet/acrobat/javascript.html .

Basisinformatie over PDF-communicatie in HTML

JavaScript in een HTML-pagina kan een bericht naar JavaScript in PDF-inhoud versturen door de methode postMessage() op te roepen van het DOM-object dat de PDF-inhoud voorstelt. U hebt bijvoorbeeld de volgende ingesloten PDF-inhoud:

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

De volgende JavaScript-code in de bevattende HTML-inhoud verstuurt een bericht naar de JavaScript-code in het PDF-bestand:

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

Het PDF-bestand kan JavaScript bevatten om dit bericht te ontvangen. U kunt in bepaalde contexten JavaScript-code aan PDF-bestanden toevoegen, zoals context op document-, map-, pagina-, veld- en batchniveau. Alleen context op documentniveau, die scripts definieert die worden geëvalueerd wanneer het PDF-document wordt geopend, wordt hier beschreven.

Een PDF-bestand kan de eigenschap messageHandler toevoegen aan het hostContainer -object. De eigenschap messageHandler is een object dat de afhandelingsfuncties definieert waarmee op berichten wordt gereageerd. Voorbeeld: de volgende code definieert de functie om berichten af te handelen die het PDF-bestand ontvangt van de hostcontainer (dit is de HTML-inhoud die is ingesloten in het PDF-bestand):

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 de HTML-pagina kan de methode postMessage() oproepen van het PDF-object dat zich in de pagina bevindt. Door het oproepen van deze methode wordt het bericht "Hello from HTML" naar de JavaScript-code op documentniveau in het PDF-bestand verzonden:

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

Zie Cross-scripting van PDF-inhoud in Adobe AIR voor een meer geavanceerd voorbeeld en voor informatie over het gebruik van Acrobat 8 om JavaScript aan een PDF-bestand toe te voegen.

Scripting van PDF-inhoud vanuit ActionScript

ActionScript-code (in SWF-inhoud) kan niet rechtstreeks communiceren met JavaScript in PDF-inhoud. ActionScript kan echter wel communiceren met de JavaScript-code in de HTML-pagina die is geladen in het HTMLLoader-object waarmee de PDF-inhoud wordt geladen, en die JavaScript-code kan communiceren met de JavaScript-code in het geladen PDF-bestand. Zie HTML en JavaScript programmeren in AIR voor meer informatie.

Bekende beperkingen voor PDF-inhoud in AIR

PDF-inhoud in Adobe AIR is onderworpen aan de volgende beperkingen:

  • PDF-inhoud wordt niet weergegeven in een venster (een NativeWindow-object) dat transparant is (waarbij de eigenschap transparent is ingesteld op true ).

  • De weergavevolgorde van een PDF-bestand is anders dan bij andere weegaveobjecten in een AIR-toepassing. Hoewel PDF-inhoud correct wordt weergegeven volgens de HTML-weergavevolgorde, bevindt deze zich altijd boven inhoud in de weergavevolgorde van de AIR-toepassing.

  • Als bepaalde visuele eigenschappen van een HTMLLoader-object dat een PDF-document bevat worden gewijzigd, wordt het PDF-document onzichtbaar. Het betreft hierbij onder andere de eigenschappen filters , alpha , rotation en scaling . Als deze eigenschappen worden gewijzigd, wordt de PDF-inhoud onzichtbaar totdat de eigenschappen opnieuw worden ingesteld. De PDF-inhoud is eveneens onzichtbaar als u deze eigenschappen wijzigt bij weergaveobjectcontainers die het HTMLLoader-object bevatten.

  • PDF-inhoud is alleen zichtbaar wanneer de eigenschap scaleMode van het Stage-object van het NativeWindow-object dat de PDF-inhoud bevat, is ingesteld op StageScaleMode.NO_SCALE . Wanneer deze eigenschap is ingesteld op een andere waarde, is de PDF-inhoud niet zichtbaar.

  • Wanneer de gebruiker op koppelingen naar inhoud in het PDF-bestand klikt, wordt de schuifpositie van de PDF-inhoud bijgewerkt. Wanneer de gebruiker op koppelingen naar inhoud buiten het PDF-bestand klikt, wordt het HTMLLoader-object omgeleid waarin de PDF-inhoud zich bevindt (zelfs als het doel van een koppeling een nieuw venster is).

  • Workflows voor PDF-commentaar werken niet in AIR.