2011-05-28 18 views
9

Duplicar posible:
Convert pdf file to jpg asp.netconversión de PDF a imagen

public class Pdf2Image { 

    private Image image; 
    int length; 
    public int convertPdf2Image(String pdfname) { 
     File file = new File(pdfname); 
     RandomAccessFile raf; 
     try { 
      raf = new RandomAccessFile(file, "r"); 
      FileChannel channel = raf.getChannel(); 
      ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); 
      PDFFile pdffile = new PDFFile(buf); 
      // draw the first page to an image 
      int num = pdffile.getNumPages(); 

      length=num; 
      for (int i = 0; i <= num; i++) { 
       PDFPage page = pdffile.getPage(i); 
       //get the width and height for the doc at the default zoom 
       int width = (int) page.getBBox().getWidth(); 
       int height = (int) page.getBBox().getHeight(); 
       Rectangle rect = new Rectangle(0, 0, width, height); 
       int rotation = page.getRotation(); 
       Rectangle rect1 = rect; 
       if (rotation == 90 || rotation == 270) { 
        rect1 = new Rectangle(0, 0, rect.height, rect.width); 
       } 
       //generate the image 
       BufferedImage img = (BufferedImage) page.getImage(
         rect.width, rect.height, //width & height 
         rect1, // clip rect 
         null, // null for the ImageObserver 
         true, // fill background with white 
         true // block until drawing is done 
         ); 
       ImageIO.write(img, "png", new File("src\\downloadedFiles\\aa" + i + ".png")); 
      } 
     } catch (FileNotFoundException e1) { 
      System.err.println(e1.getLocalizedMessage()); 
     } catch (IOException e) { 
      System.err.println(e.getLocalizedMessage()); 
     } 
     return length; 
    } 

    public static void main(String[] args) { 
     Pdf2Image p = new Pdf2Image(); 
     p.convertPdf2Image("src\\downloadedFiles\\todaypdf.pdf"); 
    } 
} 

Estoy utilizando este código para convertir archivos PDF con la imagen. Funciona bien para la mayoría de los PDF pero muestra excepciones para un archivo PDF. Excepción es:

Expected 'xref' at start of table. 

Podría alguien decirme por qué se está dando esa excepción?

+2

¿Podría proporcionar la pila de llamadas completa? –

+1

¿Puedes ver el PDF usando Acrobat, IcePDF y quizás otro visor de PDF? ¿O también dan advertencias/errores? – extraneon

Respuesta

3

Hay muchos archivos PDF mal formados en la naturaleza y este es probablemente uno de ellos.

No es posible dar una respuesta definitiva hasta que vea el archivo PDF problemático. Lo que estoy adivinando es que el 'startxref' especifica una posición absoluta en el PDF donde debe ubicarse la tabla xref. La biblioteca de Java está saltando a esta posición en el archivo esperando encontrar la palabra 'xref' pero no puede encontrarla.

http://blog.amyuni.com/?p=1627

Una forma de solucionar este problema sería la de cargar el archivo en la versión completa de Acrobat y luego guardar el archivo. Acrobat corregirá la compensación de xref como se menciona en el enlace.

Existen empresas bastante grandes que generan archivos PDF malformados que deberían conocerse mejor. Adobe permite que estos archivos existan porque les dificulta a sus competidores de PDF mantenerse al día y competir.

Cuestiones relacionadas