Existe uma API Java que pode criar documentos ricos do Word? [fechadas]

111

Tenho um novo aplicativo em que estarei trabalhando, no qual preciso gerar um documento do Word que contém tabelas, gráficos, índice analítico e texto. Qual é uma boa API a ser usada para isso? Você tem certeza de que ele suporta gráficos, ToCs e tabelas? Quais são algumas pegadinhas ocultas em usá-los?

Alguns esclarecimentos:

  • Não consigo enviar um PDF, eles querem um documento do Word.
  • Eles estão usando o MS Word 2003 (ou 2007), não o OpenOffice
  • O aplicativo está sendo executado no * nix app-server

Seria bom se eu pudesse começar com um documento de modelo e preencher alguns espaços com tabelas, gráficos, etc.

Edit: Várias boas respostas abaixo, cada uma com suas próprias falhas no que diz respeito à minha situação atual. É difícil escolher uma "resposta final" deles. Acho que vou deixar em aberto, e espero que melhores soluções sejam criadas.

Edit: O projeto OpenOffice UNO parece estar mais próximo do que eu pedi. Embora o POI certamente seja mais popular, ele é muito imaturo para o que desejo.

billjamesdev
fonte
26
Não tenho certeza de como fechar esta pergunta 30 meses após sua última edição e mais de 3 anos após ter sido perguntada originalmente será muito produtivo. Se eu alterasse o título para "Como faço para criar documentos ricos do Word com uma API Java?" isso resolveria isso?
billjamesdev
1
caso alguém precise de uma revisão completa da api java disponível esupu.com/open-source-office-document-java-api-review
Supun Sameera
Você pode dar uma olhada em docxtemplater, https://github.com/edi9999/docxtemplater/ que é uma biblioteca que criei para gerar docx a partir de modelos docx
edi9999
1
A pergunta deve ser reaberta. A questão foi reformulada para se adequar às regras, portanto, gostaria de chamar quem tiver poderes para reabrir essa questão. Antes, a pergunta era: O que é uma boa API Java para criar documentos do Word? Agora a questão é: existe uma API Java que pode criar documentos ricos do Word? A questão agora está apontando claramente para o que a pessoa quer: criar documentos do Word com gráficos, ToCs e tabelas. A questão também não pede mais uma "boa" API Java. O bom é diferente para cada pessoa.
Sjoerd Pottuit de

Respostas:

56

Em 2007, meu projeto utilizou com sucesso a interface Universal Network Objects (UNO) do OpenOffice.org para gerar programaticamente documentos compatíveis com MS-Word (* .doc), bem como documentos PDF correspondentes, a partir de um aplicativo Java Web (um framework Struts / JSP).

O OpenOffice UNO também permite que você crie gráficos, planilhas, apresentações, etc. compatíveis com o MS-Office. Fomos capazes de construir dinamicamente documentos sofisticados do Word, incluindo gráficos e tabelas.

Simplificamos o processo usando modelos de documentos do MS-Word com inserções de marcadores nos quais o software inseriu conteúdo; no entanto, você pode criar documentos totalmente do zero. A meta era fazer com que o software gerasse documentos de relatório que pudessem ser compartilhados e ajustados pelos usuários finais antes de convertê-los em PDF para entrega final e arquivamento.

Você pode opcionalmente produzir documentos em formatos OpenOffice se desejar que os usuários usem o OpenOffice em vez do MS-Office. No nosso caso, os usuários desejam utilizar ferramentas do MS-Office.

O UNO está incluído no pacote OpenOffice. Simplesmente vinculamos nosso aplicativo Java a bibliotecas relacionadas ao UNO dentro do pacote. Um OpenOffice Software Development Kit (SDK) está disponível contendo exemplos de aplicativos e o UNO Developer's Guide.

Não investiguei se o OpenOffice UNO mais recente pode gerar formatos de documentos XML abertos do MS-Office 2007.

As coisas importantes sobre o OpenOffice UNO são:

  1. É freeware
  2. Suporta várias linguagens (por exemplo, Visual Basic, Java, C ++ e outros).
  3. É independente de plataforma (Windows, Linux, Unix, etc.).

Aqui estão alguns sites úteis:

Por sorte
fonte
1
Até agora, este é o mais compatível com o conjunto de ferramentas que solicitei. Vou marcar como "aceito". Embora eu reconheça totalmente que o POI é mais popular, ele ainda não tem a funcionalidade que desejo.
billjamesdev
30

Acho que o Apache POI pode fazer o trabalho. Um possível problema, dependendo do uso que você deseja, pode ser causado pelo fato de o HWPF ainda estar em desenvolvimento inicial.

HWPF é o conjunto de APIs para leitura e gravação de documentos do Microsoft Word 97 (-XP) usando (apenas) Java.

Jorge Ferreira
fonte
Algum conhecimento das possibilidades de gráficos e tabelas? Que tal índices? Alguém tem experiência real em fazer essas coisas em POI?
billjamesdev
1
Olhando para a documentação do POI, parece que este HWPF está no início do desenvolvimento, permitindo principalmente a leitura de texto de um .doc, não realmente para a criação dinâmica de documentos "complexos".
billjamesdev
Não acredito que lida com gráficos / tabelas mais complexos, etc.
Brian Agnew
POI ou docx4j? stackoverflow.com/questions/15013837/…
JasonPlutext
9

Você pode usar isto: http://code.google.com/p/java2word

Implementei essa API chamada Java2Word. com algumas linhas de código, você pode gerar um documento do Microsoft Word.

Por exemplo.:

IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")

Existem alguns exemplos de como usar. Basicamente, você precisará de um arquivo jar. Entre em contato se precisar de mais informações sobre como configurá-lo.

* Escrevi isso porque tínhamos uma necessidade real em um projeto. Mais no meu blog:

http: //leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *

felicidades Leonardo

Editar : Projeto no link movido para https://github.com/leonardoanalista/java2word

Leonardo
fonte
1
Você já testou usando o MS Word real? Consegui criar arquivos que OpenOffice e LibreOffice podem ler, mas não MSWord no Windows. (Eu relatei esse problema em code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug
2
Não consigo abrir arquivos gerados por java2word usando o OpenOffice? Funciona bem com o Office 2010
Ashika Umanga Umagiliya,
Ele suporta a criação de arquivos .docx? @Leonardo
MaheshVarma
Página inicial do projeto: github.com/leonardoanalista/java2word
vhunsicker
4

Tente Aspose.Words for Java, ele é executado em qualquer sistema operacional onde Java está instalado.

A saída do documento será DOC, DOCX ou RTF se você precisar de um formato de saída do MS Word. Todos são suportados igualmente bem.

Usando esta API, você pode criar um documento do zero, literalmente a partir de nós e definir suas propriedades de formatação. Você também pode usar um DocumentBuilder que fornece métodos de nível superior, como criar uma linha de tabela, inserir um campo etc. Ou você pode copiar / juntar / mover partes entre documentos pré-criados existentes, digamos que você queira montar um contrato, basta pegar e copiar pedaços de vários documentos e Aspose.Words irão mesclar estilos, lista de formatação, etc, de forma adequada no documento resultante.

Você poderá inserir um campo TOC usando Aspose.Words, mas a partir de hoje, o campo TOC exigirá uma atualização de campo quando o documento for aberto no Microsoft Word. No entanto, vamos lançar o suporte completo para os campos TOC no início de 2010. Por exemplo, ele criará o TOC completo como o MS Word faz.

Estou na equipe Aspose.Words.

Romeok
fonte
4

Ele foi mencionado apenas brevemente uma vez, então eu gostaria de chamar a biblioteca docx4j, pois tive mais sucesso com docx4j do que qualquer outra coisa. O suporte do Apache POI para documentos do Word não é muito bom. Além disso, ao contrário do Aspose.Words, docx4j é uma biblioteca de código aberto.

A única desvantagem é que com docx4j você precisa criar documentos no formato Office Open XML (docx) em vez de documentos no formato OLE2 (doc). Este é o formato padrão do Word 2007, mas os usuários do Word 2003 e anteriores precisarão instalar um pacote de compatibilidade.

Joshua Born
fonte
3

Experimente Aspose.Words para java.

Aspose.Words for Java é uma biblioteca de classes (comercial) avançada para Java que permite que você execute uma grande variedade de tarefas de processamento de documentos diretamente em seus aplicativos Java.

Aspose.Words for Java suporta os formatos DOC, OOXML, RTF, HTML e OpenDocument. Com Aspose.Words você pode gerar, modificar e converter documentos sem usar o Microsoft Word.

Seki
fonte
2

Você pode usar uma ponte Java COM como JACOB . Se for do lado do cliente, outra opção seria usar Javascript.

Gulzar Nazim
fonte
Obrigado, mas parece que isso exigiria execução em uma máquina Windows, não? Esclareci o sistema operacional da máquina host depois de ler isso, mas obrigado pela informação.
billjamesdev
Usar o JACOB na máquina do servidor da web exigiria que o próprio Microsoft Word fosse instalado nele, porque a criação e manipulação de documentos do Word por meio da interface COM requer a ativação de instâncias reais do aplicativo Word. Em geral, esse uso de Word + COM em um servidor multiusuário é bastante problemático porque o Word não foi projetado para tal uso - por exemplo, a duplicação de partes do documento é tradicionalmente feita usando Objeto de seleção e área de transferência do Windows, o que é impensável na web- configuração da máquina do servidor. Eu tenho ficado muito queimado com isso (embora tenha encontrado alguns ajustes)
hello_earth
2

Eu usei Aspose.Words para fazer mala direta em .NET. Acredito que também tenham uma versão Java.

Tvanfosson
fonte
2

Há uma ferramenta chamada JODConverter que se conecta ao open office para expor seus conversores de formato de arquivo, há versões disponíveis como um webapp (fica no tomcat) que você publica e uma ferramenta de linha de comando. Eu tenho usado html nele e convertido para .doc e pdf com sucesso, está em um projeto bastante grande, ainda não foi ao ar, mas acho que vou usá-lo. http://sourceforge.net/projects/jodconverter/

Andrew Hancox
fonte
2

O iText é realmente fácil de usar.

Se você precisar de arquivos doc, você pode chamar abiword ( processador de texto multi-os mais leve e gratuito) na linha de comando, ele tem várias opções de conversão de formato de conversão.

cam2574
fonte
1

docx4j ou poi, ambos ASL v2

@wondersofcomputing: o iText é realmente gratuito e de código aberto

JasonPlutext
fonte
1

Depois de um pouco mais de pesquisa, descobri o iText, uma API de criação de arquivos PDF e RTF. Acho que posso usar a geração RTF para criar um arquivo legível em Doc que pode então ser editado usando o Doc e salvo novamente.

Alguém tem alguma experiência com o iText, usado desta forma?

Bill, o POI e a API iText são muito semelhantes do ponto de vista da programação. Já trabalhei com os dois no passado e os achei fáceis de usar e bem documentados.

Com o iText, você ganha a vantagem de poder alternar entre formatos (RTF e PDF) com pequenas alterações no código. Se bem me lembro, o conteúdo é apresentado usando as mesmas chamadas e definido como PDF ou RTF usando algumas linhas de código.

No entanto, acredito que a formatação em RTF é limitada em comparação com DOC. Não sei se você será capaz de implementar os recursos avançados que está procurando (tabelas, imagens embutidas) sem uma quantidade razoável de aborrecimento, se é que vai conseguir.

Considerando o que você disse, sobre o HWPF não ter funcionalidade suficiente para as suas necessidades (eu só tratei do lado Excel do POI), sua melhor aposta pode ser convencer as autoridades de que PDF é a melhor tecnologia para o trabalho .

James McMahon
fonte
1

Eu desenvolvi arquivos de texto baseados em XML puro no passado. Eu usei o .NET, mas a linguagem não deve importar, pois é realmente XML. Não foi a coisa mais fácil de fazer (tinha um projeto que exigia isso alguns anos atrás). Eles só funcionam no Word 2007 ou superior - mas tudo que você precisa é o white paper da Microsoft que descreve o que cada tag faz. Você pode realizar tudo o que deseja com as tags da mesma forma como se estivesse usando o Word (é claro, um pouco mais difícil no início).

schmoopy
fonte
0

Depois de um pouco mais de pesquisa, descobri o iText , uma API de criação de arquivos PDF e RTF. Acho que posso usar a geração RTF para criar um arquivo legível em Doc que pode então ser editado usando o Doc e salvo novamente.

Alguém tem alguma experiência com o iText, usado desta forma?

billjamesdev
fonte
Eu usei o iText para exportar para RTF e é um pouco estranho: o TOC, por exemplo, não funciona muito bem e realmente não é muito fácil de usar (falta documentos)
AlfaTeK
0

Mais uma possibilidade, já que se trata de um aplicativo da web.

Consegui renderizar uma página HTML com o tipo MIME definido como "application / msword", o que fez com que o navegador gerasse o Word que importava o html perfeitamente, permitindo edições e salvamento como se eu gerasse um documento real do Word.

As tabelas funcionam bem, mas as imagens que ainda não tinha funcionado. Pode ser tão fácil quanto apenas uma tag no HTML, ou posso ter que transmitir uma parte separada da resposta contendo os dados da imagem em binário, ou algum outro método que ainda não criei. :)

billjamesdev
fonte
0

Mesmo que seja muito mais tarde do que o pedido, pode ajudar outras pessoas. Docmosis fornece uma API Java para a criação de documentos em formato doc, pdf, odt usando documentos como modelos. Ele usa o OpenOffice como mecanismo para realizar as conversões de formato. A manipulação e preenchimento de documentos é realizada pela própria Docmosis.

Paul Jowett
fonte