Lägga till PDF-innehåll i AIR

Adobe AIR 1.0 och senare

Program som körs i Adobe® AIR® kan visa både SWF-, HTML- och PDF-innehåll. AIR-program återger PDF-innehåll med hjälp av klassen HTMLLoader, motorn WebKit och webbläsarplug-inen Adobe® Reader®. I ett AIR-program kan PDF-innehåll sträckas ut över hela programmets höjd och bredd eller som en del av gränssnittet. Visningen av PDF-filer i ett AIR-program styrs av Adobe Reader-pluginprogrammet för webbläsare. Ändringar i gränssnittet för Reader-verktygsfältet (till exempel kontroller för placering, ankarpunkter och synlighet) gäller även i efterföljande visning av PDF-filer i både AIR-program och i webbläsaren.

Viktigt! Användaren måste ha Adobe Reader eller Adobe® Acrobat® version 8.1 eller en senare version installerad för att kunna återge PDF-innehåll i AIR.

Identifiera PDF-funktion

Om användaren inte har Adobe Reader eller Adobe Acrobat 8.1 eller senare kan inte PDF-innehåll visas i ett AIR-program. Om du vill se om en användare kan återge PDF-innehåll ska du först kontrollera egenskapen HTMLLoader.pdfCapability. Den här egenskapen är inställd på någon av följande konstanter i klassen HTMLPDFCapability:

Konstant

Beskrivning

HTMLPDFCapability.STATUS_OK

En version (8.1 eller senare) av Adobe Reader som stöds har hittats och PDF-innehåll kan läsas in i ett HTMLLoader-objekt.

HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND

Ingen version av Adobe Reader har hittats. Det går inte att visa PDF-innehåll i ett HTMLLoader-objekt.

HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD

Adobe Reader har upptäckts, men versionen är för gammal. Det går inte att visa PDF-innehåll i ett HTMLLoader-objekt.

HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD

En version (8.1 eller senare) av Adobe Reader som stöds har hittats, men den version av Adobe Reader som har konfigurerats för att hantera PDF-innehåll är äldre än Reader 8.1. Det går inte att visa PDF-innehåll i ett HTMLLoader-objekt.

Om användaren har Windows och kör Adobe Acrobat eller Adobe Reader version 7.x eller senare, används den versionen även om en senare version med stöd för inläsning av PDF-innehåll installeras. Om värdet för egenskapen pdfCapability är HTMLPDFCapability.STATUS_OK när ett AIR-program gör ett försök att läsa in PDF-innehåll, visar den äldre versionen av Acrobat eller Reader en varning (och inget undantag genereras i AIR-programmet). Om det här är en situation som kan uppstå för slutanvändarna bör du kanske ge dem anvisningar om att stänga Acrobat under tiden som de kör programmet. Du kan visa de här anvisningarna om PDF-innehållet inte går att läsa in inom en viss tid.

I Linux söker AIR efter Adobe Reader på den sökväg (PATH) som exporterats av användaren (om den innehåller kommandot acroread) och i katalogen /opt/Adobe/Reader.

Följande kod identifierar om en användare kan visa PDF-innehåll i ett AIR-program. Om användaren inte kan visa PDF-innehåll spåras felkoden som motsvarar felobjektet för HTMLPDFCapability:

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

Läsa in PDF-innehåll

Du kan lägga till en PDF i ett AIR-program genom att skapa en HTMLLoader-instans, ange dess mått och läsa in sökvägen till en PDF.

Följande exempel läser in en PDF från en extern plats. Ersätt URLRequest med sökvägen till en tillgänglig, extern 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);

Du kan också läsa in innehåll från filens URL:er och AIR-specifika URL-scheman, t.ex. app och app-storage. Följande kod läser till exempel in filen test.pdf i PDF:ens underkatalog i programkatalogen:

app:/js_api_reference.pdf

Mer information om AIR URL-scheman finns i URI-scheman.

Skriptning av PDF-innehåll

Du kan använda JavaScript för att kontrollera PDF-innehåll på samma sätt som på en sida i en webbläsare.

JavaScript-tillägg i Acrobat ger bland annat följande funktioner:

  • Kontroll av sidnavigering och förstoring

  • Bearbetning av formulär i dokumentet

  • Kontroll av multimediehändelser

Mer information om JavaScript-tillägg för Adobe Acrobat finns i Adobe Acrobat Developer Connection på http://www.adobe.com/devnet/acrobat/javascript.html.

Grundläggande om kommunikation mellan HTML och PDF

JavaScript på en HTML-sida kan skicka ett meddelande till JavaScript i PDF-innehåll genom att anropa metoden postMessage() i det DOM-objekt som representerar PDF-innehållet. Ta till exempel följande inbäddade PDF-innehåll:

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

Följande JavaScript-kod som finns i HTML-innehållet skickar ett meddelande till JavaScript-koden i PDF-filen:

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

PDF-filen kan inkludera JavaScript för att ta emot det här meddelandet. Du kan lägga till JavaScript-kod i PDF-filer i vissa kontexter, inklusive dokument-, mapp-, sid-, fält- och gruppnivåkontexterna. Det är bara kontexten på dokumentnivå som definierar de skript som utvärderas när PDF-dokumentet öppnas som tas upp här.

En PDF-fil kan lägga till en messageHandler-egenskap till hostContainer-objektet. Egenskapen messageHandler är ett objekt som definierar hanterarfunktioner som svarar på meddelanden. Följande kod definierar till exempel funktionen som hanterar meddelanden som tas emot av PDF-filen från värdbehållaren (som är det HTML-innehåll som är inbäddat i PDF-filen):

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

JavaScript-koden på HTML-sidan kan anropa metoden postMessage() för det PDF-objekt som finns på sidan. När den här metoden anropas skickas ett meddelande ("Hello from HTML") till JavaScript på dokumentnivå i PDF-filen:

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

Ett mer avancerat exempel och för information om hur du använder Acrobat 8 för att lägga till JavaScript i en PDF-fil finns i Korsskriptning av PDF-innehåll i Adobe AIR.

Skriptning av PDF-innehåll från ActionScript

ActionScript-kod (i SWF-innehåll) kan inte kommunicera direkt med JavaScript i PDF-innehåll. ActionScript kan dock kommunicera med JavaScript på den HTML-sida som är inläst i ett HTMLLoader-objekt som läser in PDF-innehåll. Den JavaScript-koden kan också kommunicera med JavaScript i den inlästa PDF-filen. Mer information finns i Programmera HTML och JavaScript i AIR.

Kända begränsningar för PDF-innehåll i AIR

PDF-innehåll i Adobe AIR har följande begränsningar:

  • PDF-innehåll visas inte i ett fönster (ett NativeWindow-objekt) som är genomskinligt (om egenskapen transparent är angiven som true).

  • Visningsordningen för en PDF-fil fungerar annorlunda mot andra visningsobjekt i ett AIR-program. Även om PDF-innehåll hålls ihop korrekt enligt HTML-visningsordningen så kommer det alltid att visas över innehåll i AIR-programmets visningsordning.

  • Om vissa visuella egenskaper i ett HTMLLoader-objekt som innehåller ett PDF-dokument ändras, visas inte PDF-dokumentet. Exempel på dessa egenskaper är egenskaperna filters, alpha, rotation och scaling. Om dessa egenskaper ändras visas inte PDF-filen förrän egenskaperna har återställts. PDF-innehållet visas inte heller om du ändrar de här egenskaperna för de behållare för visningsobjekt som innehåller HTMLLoader-objektet.

  • PDF-innehåll visas bara om egenskapen scaleMode för det av Stage-objektets NativeWindow-objekt som innehåller PDF-innehållet har värdet StageScaleMode.NO_SCALE. Om egenskapen har ett annat värde visas inte PDF-innehållet.

  • Om du klickar på länkar till innehåll i PDF-filen uppdateras rullningspositionen för PDF-innehållet. Om du klickar på länkar till innehåll utanför PDF-filen dirigeras det HTMLLoader-objekt som innehåller PDF:en om (även om länkens mål är ett nytt fönster).

  • PDF-kommentarer kan inte användas i AIR.