2010-12-14 22 views
5

Estoy usando java y RCP y estoy tratando de mostrar el documento pdf con Acrobat en mis vistas. No necesito cambiarlos. Tengo este error con este código. Alguna idea de como resolver este problema? P.s .: funciona bien los mismos tiempos.Java PDF Viewer

PDFFile pdfFile; 
pdfFile = PdfFileLoader.loadPdf(file, new NullProgressMonitor()); 
PdfDocument pdfDocument = new OneDimensionalPdfDocument(pdfFile, new NullProgressMonitor()); 
pdfViewer.setPdfDocument(pdfDocument); 

Error from PdfDocument pdfDocument = new OneDimensionalPdfDocument(pdfFile, new NullProgressMonitor()) : Unsupport CMap format: 6 
java.nio.BufferUnderflowException 
at java.nio.Buffer.nextGetIndex(Unknown Source) 
at java.nio.HeapByteBuffer.getShort(Unknown Source) 
at com.sun.pdfview.font.ttf.HmtxTable.setData(HmtxTable.java:79) 
at com.sun.pdfview.font.ttf.TrueTypeTable.createTable(TrueTypeTable.java:113) 
at com.sun.pdfview.font.ttf.TrueTypeFont.getTable(TrueTypeFont.java:106) 
at com.sun.pdfview.font.TTFFont.getOutline(TTFFont.java:129) 
at com.sun.pdfview.font.TTFFont.getOutline(TTFFont.java:89) 
at com.sun.pdfview.font.OutlineFont.getGlyph(OutlineFont.java:118) 
at com.sun.pdfview.font.PDFFont.getCachedGlyph(PDFFont.java:307) 
at com.sun.pdfview.font.PDFFontEncoding.getGlyphFromEncoding(PDFFontEncoding.java:132) 
at com.sun.pdfview.font.PDFFontEncoding.getGlyphs(PDFFontEncoding.java:98) 
at com.sun.pdfview.font.PDFFont.getGlyphs(PDFFont.java:273) 
at com.sun.pdfview.PDFTextFormat.doText(PDFTextFormat.java:283) 
at com.sun.pdfview.PDFParser.iterate(PDFParser.java:742) 
at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:88) 
at java.lang.Thread.run(Unknown Source) 

Saludos, Haythem

+0

¿Qué biblioteca estás usando? – Favonius

Respuesta

12

Eche un vistazo a estos pdf procesador libre ...

Algunos enlaces ...

  1. http://www.icepdf.org/

  2. http://www.jpedal.org/support_siEclipse.php

  3. https://java.net/projects/pdf-renderer

ACTUALIZACIÓN

Según http://www.icepdf.org/,

ICEpdf es un código abierto de Java PDF motor, que puede hacer, convertir, o el contenido del PDF extracto dentro de cualquier aplicación Java o en un servidor web.

Para la funcionalidad básica, debe incluir icepdf-core.jar y icepdf-viewer.jar en la ruta de su clase. Dependiendo del requerimiento, también puede agregar el soporte SVG.

Tomado de carpeta muestra iceface:

import org.icepdf.ri.common.SwingController; 
import org.icepdf.ri.common.SwingViewBuilder; 

import javax.swing.*; 

/** 
* The <code>ViewerComponentExample</code> class is an example of how to use 
* <code>SwingController</code> and <code>SwingViewBuilder</code> 
* to build a PDF viewer component. A file specified at the command line is 
* opened in a JFrame which contains the viewer component. 
* 
* @since 2.0 
*/ 
public class ViewerComponentExample { 
    public static void main(String[] args) { 
     // Get a file from the command line to open 
     String filePath = args[0]; 

     // build a component controller 
     SwingController controller = new SwingController(); 

     SwingViewBuilder factory = new SwingViewBuilder(controller); 

     JPanel viewerComponentPanel = factory.buildViewerPanel(); 

     // add interactive mouse link annotation support via callback 
     controller.getDocumentViewController().setAnnotationCallback(
       new org.icepdf.ri.common.MyAnnotationCallback(
         controller.getDocumentViewController())); 

     JFrame applicationFrame = new JFrame(); 
     applicationFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     applicationFrame.getContentPane().add(viewerComponentPanel); 

     // Now that the GUI is all in place, we can try openning a PDF 
     controller.openDocument(filePath); 

     // show the component 
     applicationFrame.pack(); 
     applicationFrame.setVisible(true); 
    } 
} 

El código anterior le ayuda en la visualización de un archivo PDF en un componente de oscilación. Usted puede hacer lo mismo en el entorno SWT (eche un vistazo a SwingViewBuilder .. tipo de disco duro, pero se verá y se sentirá) o use org.eclipse.swt.awt.SWT_AWT (tipo de fácil ... pero tendrá un aspecto swing + swt). . aunque ambos enfoques resolverán tu propósito. También verifique las licencias correspondientes en la carpeta de la licencia.

Espero que esto ayude.

+0

Sí, los vi, pero no encontré la manera de abrir archivos PDF existentes y mostrarlos en una vista. – Haythem

+0

@Haythem: Entonces, ¿qué biblioteca está utilizando ahora? – Favonius

+0

@Favonius: estoy usando org.nightlabs.eclipse.ui.pdfviewer – Haythem

4

Aquí hay otro visor de PDF gratuito, pequeño y potente basado en Eclipse SWT y jPod Renderer - JPview. Tiene una buena representación y poco uso de memoria.