A origem do problema
Não faz muito tempo, fiz um pequeno projeto para gerar relatórios em PDF por meio de JSP, o que me abriu os olhos. Algumas das informações da empresa formam relatórios HTML através da rede Embora o IE possa imprimir diretamente o conteúdo exibido nele, do ponto de vista da interface, se os resultados da exibição HTML forem impressos diretamente, não parece muito bonito. Se você convertê-lo para um arquivo PDF e depois imprimi-lo, o efeito de impressão será muito melhor.
Introdução ao iText
iText é uma biblioteca de classes Java de código aberto que pode ser usada para gerar facilmente arquivos PDF. Você pode baixar a versão mais recente da biblioteca de classes visitando http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948. Após a conclusão do download, você receberá um pacote .jar. o caminho de classe JDK para usá-lo. Se caracteres chineses, japoneses e coreanos precisarem aparecer no arquivo PDF gerado, você também precisará baixar o pacote iTextAsian.jar visitando http://itext.sourceforge.net/downloads/iTextAsian.jar .
Quanto ao uso da biblioteca de classes iText, http://www.lowagie.com/iText/tutorial/index.html possui um tutorial mais detalhado. Este tutorial começa do início e apresenta sistematicamente os métodos e técnicas de colocação de texto, imagens, tabelas, etc. em arquivos PDF. Depois de ler este tutorial, você será capaz de criar arquivos PDF simples a complexos. Porém, tentar resolver todas as dificuldades encontradas no processo de geração de arquivos PDF através de tutoriais é sem dúvida um luxo. Portanto, é muito importante ler a documentação da API do iText. Quando os leitores baixam a biblioteca de classes, eles também podem baixar a documentação da biblioteca de classes.
Como usar o iText para gerar relatórios PDF em um programa Java
A seguir está o exemplo mais simples do tutorial acima. Este exemplo descreve a estrutura geral do programa para gerar arquivos PDF por meio do iText. Os leitores só precisam adicionar o conteúdo que desejam colocar no arquivo PDF entre as duas instruções document.open(); e document.close();. Este exemplo adiciona apenas uma linha de texto "Hello World" ao arquivo PDF.
Documento documento = novo Documento();
tente
{
PdfWriter.getInstance(documento, novoFileOutputStream
("Chap0101.pdf"));
document.open
()
;
DocumentException de)
{
System.err.println(de.getMessage()
}
catch(IOException ioe)
{
System.err.println(ioe.getMessage()
}
document.close())
; exemplo acima, a estrutura do programa é muito clara e direta. No entanto, especificar a localização de texto, imagens e tabelas em PDF é uma tarefa muito problemática. Além do processo de modificar constantemente a posição no programa, depois executar o programa, gerar o arquivo PDF e observar se a posição dos elementos no PDF é razoável, parece não haver outro método melhor.
Como gerar relatórios PDF através de JSP
não está disponível nos tutoriais do iText e há relativamente pouca informação relevante na Internet. Certa vez vi alguém postando na CSDN pedindo detalhes de implementação, e alguém respondeu sobre o princípio de implementação: primeiro gerar um arquivo PDF no servidor, e então o usuário escolhe baixá-lo ou abri-lo clicando no hiperlink que aponta para o arquivo PDF. Esta é uma ideia, ou uma das ideias. Este artigo concretiza essa ideia e dá outra ideia e a implementa de duas maneiras.
1) Gere arquivos PDF diretamente no servidor.
<%@ page import ="com.lowagie.text.*,com.lowagie.text.pdf.*, java.io.*"%>
<%
String filename = "PDF"+(new Random()).nextInt ()+".pdf" ;
Documento
documento
= new Document(
PageSize.A4
)
;
);
document.add(new Parágrafo("Olá Mundo"));
document.close()
}
catch(Exceção e){}%>
O programa acima gera um arquivo PDF estático no servidor. Obviamente, o nome do arquivo PDF obtido em cada execução deve ser único e não duplicado. Este programa usa uma função aleatória para nomear os arquivos PDF gerados. A desvantagem deste programa é que cada vez que for executado, um arquivo PDF será gerado no servidor. Se não for excluído a tempo, o número ficará cada vez maior. Obviamente, isso é algo que o mantenedor do site não deseja. ver.
2) Transfira o arquivo PDF para o cache do cliente em forma de stream. A vantagem disso é que não deixará nenhuma “relíquia” no servidor.
i) Gerar diretamente através da página JSP
<%@
page import="java.io.*,java.awt.Color,com.lowagie.text.*,com.lowagie.text.pdf.*"%>
<%
response.setContentType( "application/pdf" );
Documento
documento = novo Documento
(
)
;
document.close();
saída
DataOutput
= new DataOutputStream(response.getOutputStream())
; comprimento; i++ )
{
saída.writeByte( bytes[i]
}
%>
ii) Gerado através de Servlet
importar java.io.*;
importar javax.servlet.*;
importar javax.servlet.http.*
;
importar com.lowagie.text.pdf.*
;
Resposta
HttpServletResponse)
lança IOException,ServletException
{
Document document = new Document(PageSize.A4
,
36,36,36,36
)
;
.open();
document.add(new Paragraph("Olá Mundo"));
}
catch(DocumentException de)
{
de.printStackTrace()
;
)
;
()
;
Acabei
usando a segunda abordagem em meu projeto. O código fonte deste artigo foi depurado no meu Tomcat4. Espero que possa trazer comodidade para todos.
Todos são bem-vindos para utilizá-lo. Se precisar reimprimi-lo, indique a fonte.