Inclusão de conteúdo em PDF no AIR

Adobe AIR 1.0 e posterior

Os aplicativos em execução no Adobe® AIR® podem produzir não só conteúdo SWF e HTML, mas também em PDF. Aplicativos AIR processam aplicativos em PDF usando a classe HTMLLoader, o mecanismo WebKit e o plug-in para navegador Adobe® Reader®. Em um aplicativo do AIR, o conteúdo em PDF pode alongar-se pela atura e largura inteiras de seu aplicativo ou, como alternativa, como uma parte da interface. O plug-in de navegador do Adobe Reader controla a exibição de arquivos PDF em um aplicativo do AIR. as modificações na interface de barra de ferramentas do Reader (como controles de posição, ancoragem e visibilidade) persistem na visualização subsequente de arquivos PDF nos aplicativos AIR e no navegador.

Importante: Para processar conteúdo em PDF no AIR, o usuário deve ter o Adobe Reader ou Adobe® Acrobat® versão 8.1 ou posterior instalada.

Detecção de recurso de PDF

Se o usuário não tiver o Adobe Reader ou do Adobe Acrobat 8.1 ou posterior, o conteúdo PDF não será exibido no aplicativo do AIR. Para detectar se o usuário pode processar conteúdo em PDF, verifique primeiramente a propriedade HTMLLoader.pdfCapability . Essa propriedade está definida como uma das seguintes constantes da classe HTMLPDFCapability:

Constante

Descrição

HTMLPDFCapability.STATUS_OK

Uma versão suficiente (8.1 ou posterior) do Adobe Reader é detectada e o conteúdo em PDF pode ser carregado em um objeto HTMLLoader.

HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND

Não foi detectada nenhuma versão do Adobe Reader. Um objeto HTMLLoader não pode exibir conteúdo em PDF.

HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD

O Adobe Reader foi detectado, mas a versão é muito antiga. Um objeto HTMLLoader não pode exibir conteúdo em PDF.

HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD

Uma versão suficiente (8.1 ou posterior) do Adobe Reader foi detectada, mas a versão do aplicativo configurada para lidar com conteúdo em PDF é anterior ao Reader 8.1. Um objeto HTMLLoader não pode exibir conteúdo em PDF.

No Windows, se o Adobe Acrobat ou o Acrobat Reader versão 7.x ou posterior estiver em execução no sistema do usuário, essa versão será usada, mesmo se houver instalada uma versão posterior que ofereça suporte a PDF carregado. Nesse caso, se o valor da propriedade pdfCapability for HTMLPDFCapability.STATUS_OK , quando um aplicativo do AIR tentar carregar o conteúdo em PDF, a versão antiga do Acrobat ou do Reader exibirá um alerta (e nenhuma exceção será lançada no aplicativo do AIR). Se isso for uma possibilidade para os usuários finais, considere fornecer a eles instruções sobre como fechar o Acrobat enquanto o aplicativo é executado. Pode ser conveniente exibir essas instruções se o conteúdo em PDF não for carregado em um intervalo de tempo aceitável.

No Linux, o AIR procura o Adobe Reader no CAMINHO exportado pelo usuário (se ele contiver o comando acroread) e no diretório /opt/Adobe/Reader.

O código a seguir detecta se um usuário pode exibir conteúdo PDF em um aplicativo do AIR. Se o usuário não puder exibir um PDF, o código rastreará o código de erro correspondente ao objeto de erro HTMLPDFCapability:

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

Carregamento de conteúdo em PDF

Você pode adicionar um PDF a um aplicativo do AIR criando uma ocorrência HTMLLoader, definindo as dimensões e carregando o caminho de um PDF.

O exemplo a seguir carrega um PDF de um site externo. Substitua a URLRequest com o caminho para um PDF externo disponível.

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

Você também pode carregar conteúdo de URLs de arquivos e esquemas de URL específicos do AIR, como app e app-storage. Por exemplo, o código seguinte carrega o arquivo test.pdf no subdiretório PDFs do diretório do aplicativo:

app:/js_api_reference.pdf

Para obter mais informações sobre esquemas de URL do AIR, consulte Esquemas de URI .

Gravando em script o conteúdo em PDF

Você pode usar o JavaScript para controlar o conteúdo em PDF, do mesmo modo que em um página da Web no navegador.

As extensões JavaScript para o Acrobat oferecem alguns recursos, entre eles:

  • Controle de ampliação e navegação de página

  • Processamento de formulários no documento

  • Controle de eventos multimídia

Detalhes completos sobre extensões JavaScript para o Adobe Acrobat são fornecidos na Conexão de desenvolvedores do Adobe Acrobat, em http://www.adobe.com/devnet/acrobat/javascript.html .

Noções básicas de comunicação HTML-PDF

O JavaScript em uma página HTML pode enviar uma mensagem para o JavaScript no conteúdo em PDF, chamando o método postMessage() do objeto DOM representando o conteúdo em PDF. Por exemplo, considere o seguinte conteúdo em PDF incorporado:

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

o código JavaScript seguinte, no conteúdo HTML contido envia uma mensagem para o JavaScript no arquivo em PDF:

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

O arquivo em PDF pode incluir JavaScript para receber essa mensagem. Você pode adicionar o código JavaScript a arquivos em PDF em alguns contextos, incluindo os contextos em nível de documento, pasta, página, campo e lote. Apenas o contexto em nível de documento, que define scripts que são avaliados quando o documento em PDF é aberto, é discutido aqui.

Um arquivo em PDF pode adicionar uma propriedade messageHandler ao objeto hostContainer . A propriedade messageHandler é um objeto que define funções do manipulador para responder a mensagens. Por exemplo, o código seguinte define a função para tratar mensagens recebidas pelo arquivo em PDF a partir do contêiner host (que é o conteúdo HTML incorporando o arquivo em PDF):

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

O código JavaScript na página HTML pode chamar o método postMessage() do objeto PDF contido na página. Chamar esse método envia uma mensagem ( "Hello from HTML" ) para o JavaScript em nível de documento no arquivo em PDF:

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

Para obter um exemplo mais avançado e mais informações sobre como utilizar o Acrobat 8 para adicionar JavaScript a um arquivo PDF, consulte Cross-scripting de conteúdo PDF no Adobe AIR .

Gravação em script de conteúdo em PDF do ActionScript

O código do ActionScript (no conteúdo SWF) não pode se comunicar diretamente com o JavaScript no conteúdo em PDF. Entretanto, o ActionScript pode se comunicar com o JavaScript na página HTML carregada em um objeto HTMLLoader que carrega conteúdo em PDF, e o código JavaScript pode se comunicar com o JavaScript no arquivo em PDF carregado. Para obter mais informações, consulte Programação de HTML e JavaScript no AIR .

Limitações conhecidas do conteúdo em PDF no AIR

O conteúdo em PDF no Adobe AIR tem as seguintes limitações:

  • O conteúdo em PDF não é exibido em uma janela (um objeto NativeWindow) que seja transparente (na qual a propriedade transparent esteja definida como true ).

  • A ordem de exibição de um arquivo em PDF funciona de forma diferente de outros objetos de exibição em um aplicativo do AIR. Embora o conteúdo em PDF se afixe corretamente de acordo com a ordem de exibição de HTML, ele sempre ficará por cima do conteúdo na ordem de exibição do aplicativo do AIR.

  • Se determinadas propriedades visuais de um objeto HTMLLoader que contenha um documento PDF forem alteradas, o documento PDF se tornará invisível. Essas propriedades incluem filters , alpha , rotation e scaling . Alterar essas propriedades torna o conteúdo em PDF invisível até a redefinição das propriedades. O conteúdo em PDF também fica invisível se você alterar essas propriedades de contêineres de objeto de exibição que contêm o objeto HTMLLoader.

  • O conteúdo PDF fica visível somente quando a propriedade scaleMode do objeto Stage do objeto NativeWindow contendo o conteúdo PDF é definida como StageScaleMode.NO_SCALE . Quando ela é definida com outro valor, o conteúdo PDF não fica visível.

  • Clicar em links para conteúdo dentro do arquivo em PDF atualiza a posição de rolagem do conteúdo em PDF. Clicar em links para conteúdo fora do arquivo em PDF redireciona o objeto HTMLLoader que contém o PDF (mesmo que o destino de um link seja uma nova janela).

  • Fluxos de trabalho de comentário de PDF não funcionam no AIR.