我有一个我在本地服务器上部署的Web应用程序,我有两个类来生成PDF文件和Excel库。我使用的是Apache POI和iText PDF 5.4.3。当我在我的NetBeans上运行测试时,它可以很好地工作,它会生成文件。但是当我通过Apache在服务器上显示.war并尝试生成文件时,它告诉我它是正确生成的但是我去了文件应该是的路径但是它们不是应用程序告诉我的它们是正确生成的,不会抛出任何错误。我正在使用管理员会话并提出相同的错误。
这些是PDF类
package Controlador;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.conexion;
import java.util.Calendar;
public class GeneratePDF extends conexion {
List<Informe> listp;
String nombreF = "";
String sed = "";
List<Informe> listafinal = new ArrayList<Informe>();
public boolean createPDF(int var, String mes, String ano) {
try {
Calendar now = Calendar.getInstance();
String mess = String.valueOf(now.get(Calendar.MONTH));
if (mess.length() <= 1) {
mess = "0" + mess;
}
Fechas fechas = new Fechas();
mess = fechas.Mes(mess);
String anoo = String.valueOf(now.get(Calendar.YEAR));
String day = String.valueOf(now.get(Calendar.DAY_OF_MONTH));
//(List<Informe>)lista;
String sede = sed;
if (sede.equalsIgnoreCase("0")) {
sede = "";
}
String nombre = nombreF;
if (var == 0) {
Document documento = new Document(PageSize.LETTER, 50, 50, 7, 5);
FileOutputStream ficheroPdf = new FileOutputStream(new File(System.getProperty("user.home") + "/Downloads/Certificaciones/certificiacion" + nombre + ".PDF"));
}
Document documento = new Document(PageSize.LETTER, 50, 50, 7, 5);
FileOutputStream ficheroPdf = new FileOutputStream(new File(System.getProperty("user.home") + "/Downloads/Certificaciones(" + var + ")/Certificiación " + nombre + ".PDF"));
PdfWriter.getInstance(documento, ficheroPdf).setInitialLeading(5);
documento.open();
documento.addTitle("Certificacion");
documento.addAuthor("Emrs");
documento.addCreator("Emrs");
try {
Image foto = Image.getInstance("web/resource/img/encabezado.PNG");
foto.scaleToFit(400, 80);
foto.setAlignment(Chunk.ALIGN_CENTER);
documento.add(foto);
} catch (DocumentException | IOException e) {
System.out.println("Controlador.GeneratePDF.createPDF()" + e);
}
//Añadir titulo
Paragraph titulo = new Paragraph("CERTIFICADO DE APROVECHAMIENTO Y DISPOSICIÓN FINAL", FontFactory.getFont("TIMES_ROMAN", // fuente
12, // tamaño
Font.BOLD, // estilo
BaseColor.BLACK));
titulo.setAlignment(Element.ALIGN_CENTER);
documento.add(new Paragraph(titulo));
//Añadir cuerpo
Paragraph cuerpo = new Paragraph("\nLa Asociación Entidad Medioambiental de Recicladores-EMRS ESP-, prestador del servicio público complementario de aprovechamiento, certifica que " + nombre + " " + sede + " en el mes de " + mes + " de " + ano + " realizó entrega de los siguientes residuos y en las cantidades que se relacionan a continuación:\n\n", FontFactory.getFont("TIMES_ROMAN", // fuente
12, // tamaño
BaseColor.BLACK));
cuerpo.setAlignment(Element.ALIGN_JUSTIFIED);
documento.add(new Paragraph(cuerpo));
//Añadir tabla
PdfPTable tabla = new PdfPTable(4);
Font font = new Font(FontFamily.TIMES_ROMAN, 10, Font.BOLD);
Paragraph clase = new Paragraph("CLASE MATERIAL", font);
clase.setAlignment(Element.ALIGN_CENTER);
clase.setLeading(0, 1);
Paragraph tipo = new Paragraph("TIPO MATERIAL", font);
tipo.setAlignment(Element.ALIGN_CENTER);
tipo.setLeading(0, 1);
Paragraph kilos = new Paragraph("TOTAL EN KILOS", font);
kilos.setAlignment(Element.ALIGN_CENTER);
kilos.setLeading(0, 1);
Paragraph por = new Paragraph("PORCENTAJE", font);
por.setAlignment(Element.ALIGN_CENTER);
por.setLeading(0, 1);
PdfPCell clas = new PdfPCell();
clas.setMinimumHeight(15);
clas.setVerticalAlignment(Element.ALIGN_CENTER);
PdfPCell tip = new PdfPCell();
tip.setMinimumHeight(15);
tip.setVerticalAlignment(Element.ALIGN_CENTER);
PdfPCell kilo = new PdfPCell();
kilo.setMinimumHeight(15);
kilo.setVerticalAlignment(Element.ALIGN_CENTER);
PdfPCell po = new PdfPCell();
po.setMinimumHeight(15);
po.setVerticalAlignment(Element.ALIGN_CENTER);
for (int i = 0; i < 4; i++) {
clas.addElement(clase);
tabla.addCell(clas);
i++;
tip.addElement(tipo);
tabla.addCell(tip);
i++;
kilo.addElement(kilos);
tabla.addCell(kilo);
i++;
po.addElement(por);
tabla.addCell(po);
}
tabla.setWidthPercentage(100);
documento.add(tabla);
// tabla.addCell(String clase = (String)lista.get(1));
PdfPTable tablaMaterial = new PdfPTable(4);
double sK = 0.0;
double porcentaje = 0.0;
ArrayList porc = new ArrayList();
for (Informe ki : listafinal) {
double kil = Double.parseDouble(ki.getTotal());
sK += kil;
}
for (Informe consulta : listafinal) {
String nit = consulta.getNit();
String clasem = consulta.getClase();
String tipom = consulta.getTipo();
String totalt = consulta.getTotal();
// tablaMaterial.addCell(clasem);
// tablaMaterial.addCell(tipom);
// tablaMaterial.addCell(totalt);
for (int i = 0; i < 4; i++) {
tablaMaterial.addCell(clasem);
i++;
tablaMaterial.addCell(tipom);
i++;
Paragraph kil = new Paragraph(totalt + " K");
kil.setAlignment(Element.ALIGN_CENTER);
kil.setLeading(0, 1);
tablaMaterial.addCell(kil);
i++;
double ki = Double.parseDouble(totalt);
porcentaje = ki * 100 / sK;
porcentaje = Math.round(porcentaje * 100);
porcentaje = porcentaje / 100;
String p = String.valueOf(porcentaje);
tablaMaterial.addCell(p + " %");
i++;
}
}
tablaMaterial.setWidthPercentage(100);
documento.add(tablaMaterial);
//Añadir final
Paragraph fin = new Paragraph("\nQue estos fueron recolectados por nuestros asociados recicladores de oficio y transportados a nuestra Estación de Clasificación y Aprovechamiento-ECA-, donde se clasificaron, acopiaron y comercializaron a la industria para su transformación y devolución al ciclo productivo. \n", FontFactory.getFont("TIMES_ROMAN", // fuente
12, // tamaño
BaseColor.BLACK));
fin.setAlignment(Element.ALIGN_JUSTIFIED);
documento.add(new Paragraph(fin));
//Añadir fecha
Paragraph fec = new Paragraph("\nSe firma a los " + day + " días del mes de " + mess + " de " + anoo + ". ", FontFactory.getFont("TIMES_ROMAN", // fuente
12, // tamaño
BaseColor.BLACK));
fec.setAlignment(Element.ALIGN_JUSTIFIED);
documento.add(new Paragraph(fec));
//Añadir firma
// Paragraph fir = new Paragraph("\n___________________________\n"
// + "VIVIANA ROMERO OCAMPO\n"
// + "Subgerencia de Recolección y Transporte\n"
// + "ASOCIACIÓN ENTIDAD MEDIOAMBIENTAL DE RECICLADORES-EMRS ESP-", FontFactory.getFont("TIMES_ROMAN", // fuente
// 12, // tamaño
//
// BaseColor.BLACK));
// fir.setAlignment(Element.ALIGN_CENTER);
// documento.add(new Paragraph(fir));
try {
Image firma = Image.getInstance("web/resource/img/logo.png");
firma.scaleToFit(400, 400);
firma.setAlignment(Chunk.ALIGN_CENTER);
documento.add(firma);
} catch (DocumentException | IOException e) {
System.out.println("Controlador.GeneratePDF.createPDF()" + e);
}
documento.close();
} catch (DocumentException | FileNotFoundException e) {
System.err.println("Controlador.GeneratePDF.createPDF() " + e);
return false;
}
return true;
}
这是Excel
之一package modelo;
import Controlador.Informe;
import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
/**
*
* @author hp
*/
public class Informes extends conexion {
List<Informe> listaf = new ArrayList<Informe>();
public boolean aprovecha(String ini, String fin) throws SQLException, IOException {
Statement st = con.createStatement();
ResultSet rs = null;
String nit;
int numRecibo;
String inir = ini.replace("-", "");
String finr = fin.replace("-", "");
PreparedStatement consulta = con.prepareStatement("select DISTINCT nit_fuente from fuentes where activo = 'SI'");
try {
rs = consulta.executeQuery();
String rutaArchivo = System.getProperty("user.home") + "/Downloads/SuscriptoresAforados.xls";
File archivoXLS = new File(rutaArchivo);
int ff = 0;
int var = 0;
while (ff == 0) {
if (archivoXLS.exists()) {
var++;
rutaArchivo = System.getProperty("user.home") + "/Downloads/SuscriptoresAforados(" + var + ").xls";
archivoXLS = new File(rutaArchivo);
} else {
ff = 1;
}
}
archivoXLS.createNewFile();
Workbook libro = new HSSFWorkbook();
FileOutputStream archivo = new FileOutputStream(archivoXLS);
Sheet hoja = libro.createSheet("Hoja 1");
int f = 0;
while (rs.next()) {
nit = rs.getString("nit_fuente");
ResultSet rsmate = null;
// PreparedStatement consultarecibo = con.prepareStatement("select clasematerial,tipoMaterial,nit_asociado,sum(cantidad) as Total "
// + "from ingresomaterial "
// + "LEFT JOIN recibo on ingresomaterial.numRecibo = recibo.num_recibo "
// + "WHERE nit_fuente = " + nit + " and num_recibo BETWEEN '170000' and '170176' "
// + "GROUP BY tipoMaterial");
PreparedStatement consultarecibo = con.prepareStatement("select clasematerial,tipoMaterial,sede,nit_asociado,sum(cantidad) as total "
+ "from ingresomaterial "
+ "LEFT JOIN recibo on ingresomaterial.numRecibo = recibo.num_recibo "
+ "WHERE nit_fuente ='" + nit + "' and FECHa BETWEEN '" + inir + "' and '" + finr + "' "
+ "GROUP BY tipoMaterial ");
rsmate = consultarecibo.executeQuery();
System.out.println("modelo.Informes.aprovecha()" + consultarecibo);
while (rsmate.next()) {
Informe lista = new Informe(nit, rsmate.getString("clasematerial"), rsmate.getString("tipoMaterial"),
rsmate.getString("total"), rsmate.getString("nit_asociado"), rsmate.getString("sede"));
listaf.add(lista);
}
}
consruta(inir, finr);
for (int x = 0; x < listaf.size(); x++) {
// System.out.println(listaf.get(x));
Row fila = hoja.createRow(x);
for (int c = 0; c < 5;) {
/*Creamos la celda a partir de la fila actual*/
Cell celda = fila.createCell(c);
if (x == 0) {
switch (c) {
case 0:
celda.setCellValue("Nit Fuente");
break;
case 1:
celda.setCellValue("Nit Asosicado");
break;
case 2:
celda.setCellValue("Clase");
break;
case 3:
celda.setCellValue("Total");
break;
case 4:
celda.setCellValue("Total Toneladas ");
break;
}
} else {
/*Si no es la primera fila establecemos un valor*/
switch (c) {
case 0:
celda.setCellValue(listaf.get(x).getNit());
break;
case 1:
celda.setCellValue(listaf.get(x).getNitSocio());
break;
case 2:
celda.setCellValue(listaf.get(x).getClase());
break;
case 3:
celda.setCellValue(listaf.get(x).getTipo());
break;
case 4:
double total = Double.parseDouble(listaf.get(x).getTotal());
celda.setCellValue(total);
break;
}
}
c++;
}
}
libro.write(archivo);
archivo.close();
Desktop.getDesktop().open(archivoXLS);
} catch (Exception e) {
System.err.print("error " + e);
return false;
}
con.close();
return true;
}
服务器是Windows,或者我提供了绝对路径,因为它可能是磁盘c或d。