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.
Respostas:
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:
Aqui estão alguns sites úteis:
fonte
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.
fonte
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.:
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
fonte
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.
fonte
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.
fonte
Experimente Aspose.Words para java.
fonte
Você pode usar uma ponte Java COM como JACOB . Se for do lado do cliente, outra opção seria usar Javascript.
fonte
Eu usei Aspose.Words para fazer mala direta em .NET. Acredito que também tenham uma versão Java.
fonte
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/
fonte
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.
fonte
docx4j ou poi, ambos ASL v2
@wondersofcomputing: o iText é realmente gratuito e de código aberto
fonte
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 .
fonte
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).
fonte
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?
fonte
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. :)
fonte
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.
fonte