Como em massa relatório de exportação pdf

demandas explicação

Depois que o relatório pode mostrar os relatórios mostram atuais através do botão Exportar na barra de ferramentas para exportação para arquivo pdf, mas no uso real normalmente irá exigir um relatório não é obrigado a mostrar, por algumas operações diretamente exportar o relatório em um arquivo pdf, e muitas vezes exigem lote exportar para o arquivo pdf, seguindo alguns exemplos apresentar o próximo relatório não mostra como o volume de arquivo excel gerado.

Para alcançar essa necessidade de utilização API maneira geral, o volume gerado arquivo excel, de acordo com o caminho até os pontos podem ser divididos em três categorias:

A: única tabela para exportar um único multi-page pdf

Dois: Export único multi-mesa multi-page pdf

Três: arquivo pdf de exportações múltiplas multi-mesa

várias páginas individuais

Esta forma é geralmente um formato de relatório fixo, e, em seguida, filtrando os dados de acordo com um parâmetro, uma pluralidade de parâmetros precisa exportação exportação de dados de pdf, e os dados de cada parâmetro em uma página diferente na mesma pdf, por exemplo de acordo com a presente forma de realização, estatísticas da área informações de ordem, cada região requer dados de exportação de exportação para uma página pdf, olhada abaixo esta prática:

Relatório interfaces de projeto Escusado será dizer que, de acordo com as necessidades do projeto em linha, como mostrado abaixo:

Adicionado um relatório parâmetro: área, meios para receber parâmetros de localização, e depois concentrada em dados filtrados através da linha de dados neste parâmetro.

jsp API usada no código a seguir:

<% @ Page contentType = "text / html; charset = UTF-8." %> 

<% @ = Importar página "Com.raqsoft.report.model *" %.> 

<% @ Page Import = "com.raqsoft.report .usermodel. * "%> 

<% @ Page Import =" com.raqsoft.report.view. * "%> 

<% @ Page Import =" com.raqsoft.report.util. * "%> 

<% @ Page Import = "com.raqsoft.report.view.pdf.PdfReport" %> 

<% @ Page Import = "java.io. *" %> 

<% 

 string = relatório request.getParameter ( "relatório"); // obtém o nome do relatório 

if (relatório == null) relatório = " Order .rpx"; // nome é nulo se o relatório sobre a url, em seguida, tomar as ordens mesa 

de Cordas fileName = report.substring (0, report.length () - 4); // leitura ter nomes de arquivos usado para definir o nome excel 

Cordas reportName = request.getRealPath ( "WEB- INF \\\ reportFiles \\\"Relatório +); // 

Cordas ExportPath = request.getRealPath ( "/ export"); // diretório de exportação de construção sob o diretório raiz do aplicativo, coloque o arquivo de exportação

ReportDefine rd = (ReportDefine) ReportUtils.read ( reportName); // ler relatórios 

áreas String = "Norte, Nordeste, Noroeste, Sul, Sudoeste"; // Neste caso, de acordo com a circulação regional, a prática pode receber outros parâmetros também podem ser obtenção de dados do banco de dados 

de Cordas \ [\] Área = areas.split ( ""); 

o OutputStream oS = null; 

oS = new new um FileOutputStream (ExportPath + "/" + fileName + "PDF".); 

PdfReport ER = new new PdfReport (oS ); 

for (int i = 0; I <area.length; i ++) {// fazer a região do lacete de acordo com 

o Contexto = novo novo CXT o Contexto (); 

cxt.setParamValue ( "área", área \ [I \]); // área é definida nos parâmetros do relatório, os valores de parâmetro definido aqui 

  motor do motor = novo motor (rd, CXT); // motor relatório configurado 

  iReport iReport = engine.calc (); // operação de relatório 

 er.export (iReport); // resultados do relatório para a pdf disposta 

} 

er.save (); 

 os.flush (); 

 os.close (); 

%>

 

Assim, ele irá gerar um arquivo pdf correspondente no diretório raiz da exportação aplicação

Multi-mesa multi-page

Pdf é aplicada para este caso derivada a partir de uma pluralidade de declarações suportado, em seguida, comunicar a exportar cada pdf Excel em uma página diferente, e pode ser diferente para cada parâmetro de relatório (se o mesmo parâmetro, em seguida, uma amostra e semelhantes, mas de acordo com relatórios nome que circula na linha), a seguinte olhada processo de implementação específica:

Devido aos diferentes parâmetros de relatório podem ser diferentes, de modo que cada relatório analítico eo parâmetro correspondente será relativamente grande no grau de dificuldade em api, esta forma de realização requer relatórios de acesso através de URL, o acesso de um determinado formato, tais como:

? Http: // localhost: 6868 / demo / reportJsp / relatório exportPdf1.jsp = { 1} nomes de relatórios sem parâmetros sem parâmetros {2} {nome do relatório Relatório 1 (parâmetro 1 = value1; parâmetro 2 = valor2; ...)} { relatar 2 (parâmetro 1 = valor1; valor2 parâmetro = 2; ...)} , tais como: HTTP: // localhost: 6868 / dEMO / reportJsp / exportPdf1.jsp relatório test1.rpx} = {{test2.rpx (arg1 = 11?. ; arg2 = 22; arg3 33) } = deste modo, a versão de alta agora em tomcat definido haverá alguns símbolos especiais, {} pode ser convertida para o modo utilização urlencode correspondente, de {% 7B, é} % 7B, se há um outro valor, a transição correspondente na linha de fazer, após a configuração é url completa, então olhar sobre como analisar o url, e produção de lotes pdf, o código é a seguinte:

<% @ Page contentType = "text / html; charset = UTF-8." %> 

<% @ = Importar página "Com.raqsoft.report.model *" %.> 

<% @ Page Import = "com.raqsoft.report .usermodel. * "%> 

<% @ Page Import =" com.raqsoft.report.view. * "%> 

<% @ Page Import =" com.raqsoft.report.util. * "%> 

<% @ Page Import = "com.raqsoft.report.view.pdf.PdfReport" %> 

<% @ Page Import = "o java.io. *" %> 

<% 

 // este JSP no formato: relatório = {1} nenhum nome de relatório de parâmetro nenhum nome de parâmetro de relatório {2} {relatório 1 (parâmetro 1 = value1; parâmetro 2 = valor2; ...)} {2 relatórios (parâmetro 1 = valor1; valor2 parâmetro = 2; ...)} 

request.setCharacterEncoding ( " . 8-UTF "); 

 request.getParameter Relatório string = (" Relatório "); 

 IF (== null || report.trim Report ().length () == 0) throw new Exception ( "Por favor, digite o nome do arquivo eo relatório parâmetro de seqüência de parâmetro de relatório = {no} {Relatório 1 Relatório nome (parâmetro 1 = value1; Parâmetro 2 = valor2; ...)} {2 relatórios (parâmetro 1 = value1; parâmetro 2 = valor2; ...)} ... ");

Cordas ExportPath = request.getRealPath ( "/ export "); // diretório de exportação de construção sob o diretório raiz do aplicativo, colocando o arquivo de exportação 

relatório1 String = report.replace ( "}" , ""); // seqüência de remover} 

corda report2 = report1.substring (1, report1.length ( )); // remover a seqüência mais à esquerda { 

string \ [\] a = report2.split ( "{\\\"); // esta corda de tempo entre uma pluralidade de relatório {partição, aqui, de acordo com o símbolo para produzir a matriz dividir 

o OutputStream null = SO; 

SO = novo novo um FileOutputStream (ExportPath + "/ teste.pdf"); 

PdfReport novo novo PdfReport ER = (oS); 

para (int i = 0; i <a.length; i ++) {// ciclo pela matriz, isto é, por ciclo relatório 

se (a \ [i \. //] lastIndexOf ( "(") <= 0) determinação da dividido subsequência contém (tais como compreende, representando o parâmetro não está incluído, não existe nenhum parâmetro 

{ 

Cadeia reportPath = request.getRealPath ( "WEB-INF \\\ reportFiles \\\" a + \ [I \]); / / relatório caminho aquisição 

 Cadeia SheetName = a \ [i \ ] subsequência (0, um \ [i \] comprimento () - 4.) ;. // Obter o nome de folha

 ReportDefine rd = (ReportDefine) ReportUtils.read ( reportPath); // relatório de leitura 

 do contexto = new new CXT o contexto (); 

 Motor Motor Motor novas novas = (RD, CXT); // mecanismo de relatório configurado 

IReport iReport = engine.calc () ; // relatório calcular 

er.export (SheetName, iReport); resultados // relatório em Sheet 

} 

else { 

 System.out.println ( "relatório tem parâmetros, o relatório chamado =" + a \ [i \ ] dividida. ( "\\\ (") \ [0 \]); // Se houver parâmetros, pressione (split personagem, o lado esquerdo para o nome do relatório 

 de Cordas reportPath = request.getRealPath ( "WEB- INF \\\ reportFiles \\\ . "A + \ [I \] Split (" \\\ ( ") \ [0 \]); 

 . corda SheetName A = \ [I \] Split (" \\\ ( ") \ [0 \]. . a subsequência (0, a \ [I \] Split ( "\\\ (") \ [0 \] comprimento () - 4) ;.. 

 ReportDefine RD = (ReportDefine) ReportUtils.read (reportPath); 

 o Contexto novo novo CXT = contexto ();

 . Cordas \ [\] cs = a \ [i \] split ( "\\\ (") \ [1 \] substituir ( ")", "") Split ( ";");. // direita é uma cadeia de parâmetros, e remove as cadeias de parâmetros), a pluralidade de parâmetros; separados, de modo que aqui segue; Dividir 

 para (int J = 0; J <cs.length; J ++) {// paramétrico ciclo 

 cxt.setParamValue ( cs. \ [j \] de divisão ( "=") \ [0 \], cs \ [j \] de divisão ( "=") \ [1 \]) ;. // definir parâmetros 

 } 

 motor Motor Motor novos novos = ( Rd, CXT); // motor relatório configurado 

o iReport engine.calc iReport = (); 

er.export (iReport); 

} 

} 

er.save (); 

 os.flush (); 

 os.close (); 

%>

 

Multi-mesa multi-pdf

Exemplo dois semelhante e desta forma, requer que cada exportar o relatório para um pdf diferente arquivo pdf Export no uso real, mas pode estar relacionada com posterior problema download, assim, desta forma é geralmente para criar um diretório temporário, então múltipla pdf em um diretório temporário, você pode baixar pacote. código específico da seguinte forma:

<% @ Page contentType = "text / html; charset = UTF-8." %> 

<% @ = Importar página "Com.raqsoft.report.model *" %.> 

<% @ Page Import = "com.raqsoft.report .usermodel. * "%> 

<% @ Page Import =" com.raqsoft.report.view. * "%> 

<% @ Page Import =" com.raqsoft.report.util. * "%> 

<% @ Page Import = "com.raqsoft.report.view.excel.ExcelReport" %> 

<% 

 // este JSP no formato: relatório = {nenhum nome de parâmetro de relatório 1} {2} havia parâmetros do relatório {Declaração 1 (parâmetro 1 = value1 ; parâmetro 2 = valor2; ...)} {2 relatórios (parâmetro 1 = valor1; valor2 parâmetro = 2; ...)} 

request.setCharacterEncoding ( "UTF-8."); 

 relatório request.getParameter string = ( "relatório "); 

 . IF (== null || report.trim relatório () comprimento () == 0) o lance novo new Exception (" Por favor, digite o nome do arquivo eo relatório parâmetro de seqüência de parâmetro de relatório = {no} {relatório 1 nome do relatório (parâmetro 1 = valor1;Parâmetro 2 = valor2; ...)} {2 relatórios (Parâmetro 1 = value1; parâmetro 2 = valor2; ...)} ... ");

Cordas ExportPath = request.getRealPath ( "/ export "); // construído no diretório diretório de exportação raiz do aplicativo, coloque o arquivo de exportação 

corda fileName = Double.toString (Math.random () * 100000000) .ToString () substring (0. , 6);. 

Cordas pdfPath = ExportPath + "\\\" + fileName; 

Arquivo java.io.File = new new java.io.File (pdfPath); 

 if (File.Exists (!)) { 

 file.mkdirs (); 

 } {else 

 } 

cordas Relatório1 = report.replace ( "}", ""); // string remove} 

cordas Report2 report1.substring = (. 1, report1.length ()); // remover a seqüência mais à esquerda o { 

Cadeia \ [\] a = report2.split ( "{\\\"); // desta vez com um relatório de entre a pluralidade de cordas {separadas, de modo que aqui é dividida de acordo com o símbolo para produzir a matriz 

ExcelReport er = novo ExcelReport (); 

for (int i = 0; I <a.length; i ++) {// circulado pela matriz, isto é, por ciclo relatório 

se (a \ [i \] lastIndexOf ( "(") <= 0). // determina se os sub cadeias compreendem segmentação (,Tais como aqueles que contêm, representando o parâmetro não está incluído, não existe nenhum parâmetro 

{

Cordas reportPath = request.getRealPath ( "WEB- INF \\\ reportFiles \\\" + a \ [i \]); // Obter relatório caminho 

 corda SheetName = a \ [i \ ] substring (0, a \ [. . i \ length] () - 4); // Obter o nome do relatório 

 ReportDefine rd = (ReportDefine) ReportUtils.read ( reportPath); // relatório de leitura 

 Contexto = new new CXT o contexto (); 

 Motor Motor Motor novas novas = (RD, CXT); // mecanismo de relatório configurado 

iReport iReport = engine.calc (); // relatório calcular 

ReportUtils.exportToPDF (pdfPath + "/" + + SheetName, iReport) "PDF."; 

} 

else { 

 System.out.println ( "relatório existem parâmetros, relatório chamado = "+ a \ [i \ (\\\ ( ") \ [0 \])] dividida."; // Se não houver argumentos, pressione (divisão personagem, o lado esquerdo para o nome do relatório 

 de Cordas = request.getRealPath reportPath ( "WEB-INF \\\ reportFiles \\\" a + \ [I \] Split ( "\\\ (") \ [0 \]) ;. 

 Cadeia SheetName a = \ [I \ ] .Split ( "\\\ (") \ [0 \]. subsequência (0,um \ [i \] de divisão ( "\\\ (") \ [0 \] comprimento () - 4.).;

 RD = ReportDefine (ReportDefine) ReportUtils.read (reportPath); 

 Contexto = new new CXT o contexto (); 

 . Cordas \ [\] A CS = \ [I \] Split ( "\\\ (") \ [1 \.]. substituir ( ")", "" ) dividido (. ";"); // lado direito cadeia de parâmetros, e remove as cadeias de parâmetros), a pluralidade de parâmetros; separados, de modo que aqui segue; dividir 

 para (int J = 0; j <cs.length; j ++) {// ciclo paramétrico 

 cxt.setParamValue (cs \ [j \] . divisão ( "=") dividida \ [0 \], cs \ [j \] (". = ") \ [1 \]); // conjunto de parâmetros 

 } 

 motor do motor motor novos novos = (RD, CXT); // motor relatório configurado 

o iReport engine.calc iReport = (); 

ReportUtils.exportToPDF (pdfPath +" / "+ + SheetName "of.pdf", iReport); 

} 

} 

%>

 

pacote de download

Após o diretório do arquivo correspondente para a próxima geração, pode ser as suas próprias ligações separadas para o download do arquivo pdf pode ser gerado diretamente baixar o arquivo pdf diretamente, adicione o seguinte código no jsp arquivo correspondente:

response.setContentType ( "aplicação / pdf"); 

 response.setHeader ( "Content-Disposition", "fixação; nome do ficheiro =" + java.net.URLEncoder.encode (nomeArquivo + "pdf"., "UTF-8")); 

 BufferedInputStream bis = nulo; 

 BufferedOutputStream bos = nulo; 

 tente { 

 bis = BufferedInputStream novo (novo FilelnputStream (ExportPath + "/" + nomeArquivo + "pdf".)); 

 Bos = novo BufferedOutputStream (response.getOutputStream ()); 

 byte \ [\] = new byte lustre \ [2048 \]; 

 int bytesRead; 

 enquanto (-1 = (bytesRead = bis.read (lu, 0, buff.length))!) { 

 bos.write (lu, 0, bytesRead); 

 } 

 } Catch (IOException e final) { 

 System.out.println ( "出现IOException." + E);



 bis.close (); 

 if (! bos = null) 

 bos.close (); 

 } 

 System.out.println ( "下载完成----------------"); 

Arquivo file = new File (ExportPath + "/" + fileName + "pdf".); 

if (File.Exists ()) file.delete (); //删除文件

 

aplicações práticas pode ser obrigado a apresentar o pacote zip culminar forma, como Exemplo Três, programa java para lutar contra o pacote zip sob as Baidu diretos, e depois baixar a linha de zip.

resumo

Este artigo descreve como um relatório da API de exportação a granel para pdf forma, na prática, também é possível gerar excel ou txt, etc., a ideia é a mesma, a hora de mudar para uma linha diferente de api.

Publicado 48 artigos originais · ganhou elogios 13 · vê 20000 +

Acho que você gosta

Origin blog.csdn.net/zozoxxma/article/details/103760972
Recomendado
Clasificación