Я пытаюсь создать много PDF-файлов.
Когда я делаю только один, проблем не возникает, никогда не получается.
Но когда я помещаю его в цикл, иногда он создается, иногда 2 раза. , иногда 5, но некоторые с ошибками...
Я думаю, что это проблема с памятью, но не могу найти qвот в чем проблема
Пытался закрыть DocWriter, но дает мне исключение
Я даю вам код:
public class ImprimirRecogida {
Font font = FontFactory.getFont(FontFactory.HELVETICA, 10);
private PdfWriter docWriter = null;
private PdfContentByte cb;
FileOutputStream fOS;
Document document = new Document(PageSize.A4);//(842,
public String crearAutodeclaracion(String[] cli, String rutaFirma) {
try{
String codigo = cli[0];
String nombre = cli[1];
String direccion = cli[2];
String codPostal = cli[3];
String poblacion = cli[4];
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
File ruta = new File("C:\\Informes\\autodeclaraciones\\");
try{
String NOMBRE = new String();
NOMBRE = "AUTODECLARACION_"+codigo+"_"+sdf.format(cal.getTime())+".pdf";
String str = "C:\\Informes\\autodeclaraciones\\"+NOMBRE;
fOS = new FileOutputStream(str);
docWriter = PdfWriter.getInstance(document, fOS);//new FileOutputStream(FILE));//+System.currentTimeMillis()+".pdf"));
document.open();
cb = docWriter.getDirectContent();
document.open();
PdfReader reader = new PdfReader(ruta.getPath()+"\\"+"ISCC.pdf");
PdfImportedPage page;
page = docWriter.getImportedPage(reader, 1);
Image instance = Image.getInstance(page);
document.newPage();
document.add(instance);
try{
Image firmaCliente = Image.getInstance(rutaFirma);
firmaCliente.setAlignment(Image.RIGHT | Image.TEXTWRAP);
firmaCliente.scaleAbsolute(80, 45);
firmaCliente.setAbsolutePosition(425, 70);
document.add(firmaCliente);
} catch (Exception e) {
e.printStackTrace();
}
try{
addCB(225, 670 , nombre);
addCB(225, 610 , direccion);
addCB(225, 590 , codPostal+", "+poblacion);
addCB(225, 550 , "ESPAÑA");
addCB(225, 530 , " S.A.");
addCB(560, 315 , "X");
addCB(102, 90 , poblacion+","+ obtenerFechaParaAutodeclaracion());
} catch (Exception e) {
e.printStackTrace();
}
document.close();
fOS.close();
return ruta.getPath()+"/"+NOMBRE;
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception ee){
ee.printStackTrace();
}
return "";
}
private void addCB(float x, float y, String texto) {
try {
if(null == texto) {
texto = "";
}
cb.beginText();
BaseFont bFRegular;
bFRegular = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.setFontAndSize(bFRegular, 12);
cb.setTextMatrix(x, y); //(xPos, yPos)
cb.showText(texto);
cb.endText();
}
catch (Exception e) {
e.printStackTrace();
}
}
public String obtenerFechaParaAutodeclaracion() {
//15-19,22-26(incluidos)
try {
Random rand = new Random();
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
int randomNum = rand.nextInt((29 - 15) + 1) + 15;
StringBuilder sBFechaAutodec = new StringBuilder();
sBFechaAutodec.append(randomNum);
sBFechaAutodec.append("/01/");
sBFechaAutodec.append(UtilsVictor.getCurrentYear4Digits());
boolean encontrado = false;
while (!encontrado) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
cal.setTime(sdf.parse(sBFechaAutodec.toString()));
if ((cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY)){
encontrado = true;
return sBFechaAutodec.toString();
} else {
encontrado = false;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
}
И вызов метода:
for(int i=0;i
Подробнее здесь: https://stackoverflow.com/questions/783 ... a-itextpdf
Создавать много PDF-файлов подряд Java iTextPDF ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Есть ли способ показать общее количество страниц в заголовке PDF, используя itextpdf в Java?
Anonymous » » в форуме JAVA - 0 Ответы
- 74 Просмотры
-
Последнее сообщение Anonymous
-