BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Apache POI 3.5 Lançada com Suporte ao OOXML

Apache POI 3.5 Lançada com Suporte ao OOXML

Favoritos

A Apache acaba de lançar a versão 3.5 da POI, uma biblioteca em Java para se trabalhar com os formatos de documento da Microsoft. A POI anteriormente suportava os formatos de documento composto Microsoft OLE2, utilizados nos Offices 97-2003 (versões 8.0 - 11). Na POI 3.5, a Apache adicionou suporte para o padrão de documentos Microsoft Office Open XML (OOXML), o formato de arquivo padrão do Microsoft Office 2007.

O código existente com o modelo de usuário HSSF continuará funcionando com a POI 3.5, embora não suporte o formato OOXML. Para se trabalhar com ambos os formatos OOXML e OLE2, a POI tem um novo modelo de usuário SS (org.apache.poi.ss.usermodel) que fornece uma API comum. O novo modelo SS está fortemente baseado no antigo modelo HSSF (org.apache.poi.hssf.usermodel) e, como tal, mantém a familiaridade para desenvolvedores acostumados a trabalhar com HSSF. Atualizar de um para o outro não é uma tarefa difícil, a diferença principal é que o nome do pacote e os nomes das classes foram acertados para remover o HSSF. Deve-se notar, contudo, que há alguns recursos que ainda não estão abrangidos pelo modelo do usuário SS. Yegor Kozlov (Apache), gerente de lançamento para 3.5 POI, nos disse:

Atualmente, o modelo de usuário SS abrange cerca de 90% da funcionalidade fornecida pelo HSSF. O objetivo é alcançar a cobertura completa. Em particular, a formatação condicional e validação de dados ainda não são suportados por XSSF. Existe também algum trabalho a fazer com gráficos e rich text (ambos em HSSF e XSSF).

O suporte da POI ao OOXML foi desenvolvido a partir do zero e é independente do SDK do OpenXML. Junto com o projeto OpenXML4J desenvolvido por Julien Chable, que se fundiu com POI, uma contribuição significativa para a implementação do OOXML na versão 3.5 veio da Sourcesense, uma empresa open source que foi escolhida pela Microsoft para fazer esse trabalho. Robert Duffner (Microsoft) nos disse que a Microsoft proveu ao parceiro de desenvolvimento Sourcesense o financiamento, a orientação arquitetural, o programa e a gestão do projeto, a definição de prioridades e a estratégia para a liberação do trabalho sobre o OOXML.

O envolvimento da Microsoft, inevitavelmente, causou alguma polêmica, com alguns colaboradores POI questionando a validade da licença de patente Microsoft's Open Specification Promise (OSP). Escrevendo em seu blog, na época do projeto, Andrew Oliver afirmou:

Apesar de o OSP não abordar alguns dos casos extremos em que o trabalho pode ser necessário para a compatibilidade, mas não para a execução da especificação, a Microsoft concordou em ir mais longe e assinar um acordo específico com a Apache, que certificará esta preocupação com o trabalho que têm firmado com a POI. Além disso, a OSP será gerida como um produto legal bem como a maneira que um projeto Open Source é, com revisões conforme eles são necessários.

Quando conversamos com Oliver, no entanto, ele deixou claro que ele ainda tinha algumas preocupações sobre potenciais problemas de patentes na especificação:

A promessa de patente só vai até ao grau de conformidade com a especificação do OOXML, não vai tão longe como a compatibilidade com os produtos que utilizam a especificação. A Microsoft tem patentes-chave em coisas que poderiam ficar de fora (ou seja, a leitura de um documento OOXML que não está de acordo com seu esquema), que não estão no escopo de conformidade com a especificação, mas estão no escopo da missão da POI de compatibilidade com o popular software proprietário de escritório.

Para ser mais claro, Robert Duffner e Sam Ramji (funcionário e ex-funcionário da Microsoft) estavam muito dispostos a trabalhar nessa questão, mas atualmente não há foco suficiente em resolver essas e outras questões de IP dentro da própria comunidade de desenvolvedores da POI. Existe uma crença, na confiança de que a Microsoft faz tudo certo e que os seus interesses irão impedi-la de fazer algo errado. Eu discordo e acho que as estratégias/interesses corporativos mudam. A POI também precisa de mais auditoria IP e uma governança global, pois penso que o projeto vem fazendo um mau trabalho ultimamente.

Além disso, não foram feitos esforços para garantir que qualquer outro, inadvertidamente ou propositadamente implemente patentes pertencentes à Microsoft, e que não são necessários para a conformidade com as especificações do OOXML, e foram feitas pela Sourcesense naquilo que foi coberto pela Microsoft (fora desta "promessa"). A Sourcesense assinou um CLA com a Apache, mas não existe acordo entre a Apache e a Microsoft. Isto significa que a Sourcesense teoricamente se responsabilizar com a Apache pode ser um problema, mas eu não sei o suficiente. Gostaria de ver a comunidade de desenvolvedores atuando para resolver todas essas questões.

Yegor Kozlov, gerente de lançamento do POI 3.5, discorda da avaliação de Oliver: "Existiram diversos debates sobre este assunto há algum tempo", disse-nos, e "os detalhes podem ser encontrados aqui." Ele acrescenta:

Na verdade, ocorreu um desentendimento entre Andrew Oliver e a Apache/Microsoft/Sourcesense, e Andrew era a única pessoa vetando o desenvolvimento do OOXML, desde que a Microsoft reescrevesse a Open Specification Promise (OSP) a seu contento. Infelizmente, isso mais tarde resultou na sua renúncia ao Apache POI.

Eu (e acredito que toda a comunidade Apache POI) têm todas as razões para crer que a Microsoft está interessada em promover a ISO/IEC 29500 e a ECMA 376, e quer garantir que isso seja fácil adaptar. Há vários outros projetos de código aberto que não parecem estar preocupados com patente e problemas de compatibilidade, incluindo o OpenOffice.

Esses pensamentos vieram do responsável técnico da Microsoft para o projeto POI, Vijay Rajagopalan, que nos disse:

Permitir aos desenvolvedores realizarem suas tarefas comuns com os formatos de arquivo Open XML é o nosso maior objetivo. Não importa se eles usam. NET ou Java. Queremos permitir que os desenvolvedores Java manipulem cálculos em planilhas com uma API simples e pragmática. O projeto POI foi uma resposta a isso. Esta é uma das razões pela qual estamos financiando este projeto de código aberto, e trabalhando com uma ampla comunidade para demonstrar a interoperabilidade.

Assim como as questões de patente, ainda existem dificuldades com o padrão OOXML da forma que está atualmente. A POI suporta oficialmente a ISO/IEC 29500:2008 versão aprovada pela ECMA International Technical Committee e publicada em novembro de 2008. Entretanto, esta versão possui algumas alterações que foram introduzidas após o Office 2007 ser lançado, e com isso o Office 2007 não é totalmente compatível com ele. A Microsoft afirma que o Office 2010 será a primeira versão do office que suportará totalmente o padrão. Estando com certa incompatibilidade, a POI pretende ser, mesmo assim, compatível com a versão 2007 do Office. Vijay Rajagopalan nos disse:

As APIs POI OpenXML, em Java, foram criadas para os casos de usos práticos de desenvolvedores e não com base em normas. Portanto, mantivemos o usuário/desenvolvedor em mente quando construímos estas APIs.

Em geral, ele nos disse:

Estamos nos tornando mais transparentes em nossa abordagem de como podemos implementar as normas. O Internet Explorer 8 é um grande exemplo disso.Contribuímos com os casos de teste e as especificações do CSS para a W3C. Da mesma forma, a equipe do Office está documentando notas de implementação ilustrando como o padrão é implementado.

Conversarmos sobre como será construída a implementação POI para o Office 2010.Rajagopalan afirma:

O Office 2010 vai suportar a ISO/IEC 29500:2008 e pretendemos utilizar as notas de implementação e o projeto de validação da comunidade (detalhes aqui) liderado pelo Instituto Fraunhofer, para validar a conformidade da especificação para os cenários de interoperabilidade.

 

Também discutimos os planos futuros para a POI com Kozlov (Apache). Ele destacou quatro outras áreas que esperam se concentrar:

  1. Suporte para gráficos do Excel tanto em HSSF quanto em XSSF. Este é um plano de longa data e espero que possamos concluí-lo para a PI-3.6.
  2. Melhorar o uso de memória. Ambos HSSF e XSSF são devoradores de memória. Nestes, mantendo todo o modelo em memória resulta em OutOfMemory, ao se gerar grandes grids - 10 mil de registros ou mais. O limite real depende da quantidade de memória heap disponível.
    Existem soluções para aplicações que necessitem apenas acesso de leitura (extração e indexação de texto, etc) - para estes fornecemos APIs baseadas em eventos, com baixo consumo de memória, mas gerar grandes grids usando o modelo do usuário da API ainda é um problema.
  3. # Projeto preliminares. O HWPF (formato DOC) e HSLF (formato PPT) ainda estão na área de rascunho da POI. Isso significa que eles não estão "maduros" o suficiente para serem incluídos no jar principal. Infelizmente, não existem desenvolvedores ativos trabalhando nestes módulos e faremos somente correções esporádicas. Esta parte do POI definitivamente precisa de mais atenção.
  4. Continuar trabalhando nos módulos DOCX e PPTX.

Andrew Oliver, fundador do projeto, também nos disse que a questão da memória é algo a ser tratado:

Eu acho que o código do OLE2FS deve ser revisto para usar RandomAccessFile e mapeamento de memória, evitar assim o uso de 5 à 10x mais de memória/heap, já que o arquivo fica grande em uma alteração. Quando escrevemos este código, o Java NIO não existia.

Um log de alterações detalha todas as correções que se aplicam à versão final. O código-fonte e os binários podem ser baixados dos Mirrors da Apache. A POI 3.5 suporta Java 1.5 e superior.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT