2011-02-11 21 views
6

tengo este código java:Java error cercano PDF

try { 
    PDFTextStripper pdfs = new PDFTextStripper(); 

    String textOfPDF = pdfs.getText(PDDocument.load("doc")); 

    doc.add(new Field(campo.getDestino(), 
      textOfPDF, 
      Field.Store.NO, 
      Field.Index.ANALYZED)); 

} catch (Exception exep) { 
    System.out.println(exep); 
    System.out.println("PDF fail"); 
} 

Y lanza la siguiente:

11:45:07,017 WARN [COSDocument] Warning: You did not close a PDF Document 

Y no sé por qué, pero tirar 1, 2, 3, o más.

Me parece que COSDocument es una clase y tiene el método close(), pero no uso esta clase en ninguna parte.

tengo este importaciones:

import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.util.PDFTextStripper; 

Gracias :)

+0

Si está resuelto, marque una respuesta como aceptada. – skaffman

Respuesta

11

va a cargar un PDDocument pero no la cierre. Sospecho que tiene que hacer:

String textOfPdf; 
PDDocument doc = PDDocument.load("doc"); 
try { 
    textOfPdf = pdfs.getText(doc); 
} finally { 
    doc.close(); 
} 
+0

Gracias Jon Skeet, este código resolvió 100% el problema, gracias :) – bonsai

+0

@Jon Skeet Utilizo pdfbox en la programación de .net, cierro 'doc' pero el Error ¡Todavía hay! ¿que puedo hacer? – AmirHossein

+0

@AmirHossein: parece que deberías hacer una nueva pregunta. –

4

Este aviso se emite cuando el documento pdf está finalizado y no se ha cerrado.

Aquí es el método de finalizeCOSDocument:

/** 
* Warn the user in the finalizer if he didn't close the PDF document. The method also 
* closes the document just in case, to avoid abandoned temporary files. It's still a good 
* idea for the user to close the PDF document at the earliest possible to conserve resources. 
* @throws IOException if an error occurs while closing the temporary files 
*/ 
protected void finalize() throws IOException 
{ 
    if (!closed) { 
     if (warnMissingClose) { 
      log.warn("Warning: You did not close a PDF Document"); 
     } 
     close(); 
    } 
} 

para deshacerse de esta advertencia, debe llamar explícitamente close en el documento cuando haya terminado con él.

+0

Gracias dogbane, pero no sé si no entiendo tu respuesta. De todos modos, no uso COSDocument en ninguna línea de código, así que no creo que ese sea el problema ... :) – bonsai

+0

@bonsai El método 'PDDocument.load' crea un' PDDocument' que tiene un 'COSDocument' subyacente. Entonces estás usando implícitamente un 'COSDocument' que debe cerrarse. Si cierra el 'PDDocument', el' COSDocument' subyacente también se cierra. – dogbane

6

Acabo de tener este problema, también. Con Java 7 se puede hacer esto:

try(PDDocument document = PDDocument.load(input)) { 
    // do something 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Debido PDDocument implements Closeable, el bloque try automagicamente llamará a su método close() al final.

+1

Por cierto, try-with-resources existe desde Java 7. – danny