2010-12-14 25 views
5

Ich benutze Java und RCP und ich versuche, PDF-Dokument mit Acrobat auf meinen Ansichten zu zeigen. Ich brauche sie nicht zu ändern. Ich habe diesen Fehler mit diesem Code. Irgendeine Idee, wie man dieses Problem löst? PS .: Es funktioniert gut, gleich mal.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) 

Grüße, Haythem

+0

Welche Bibliothek verwenden Sie? – Favonius

Antwort

12

Werfen Sie einen Blick auf diese kostenlose PDF-Renderer ...

Einige Links ...

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

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

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

UPDATE

Per http://www.icepdf.org/,

ICEpdf ist ein Open Source Java PDF -Engine, die machen kann, konvertieren oder Extrakt von PDF-Inhalten innerhalb jeder Java Anwendung oder auf einem Webserver.

Für die grundlegende Funktionalität müssen Sie icepdf-core.jar und icepdf-viewer.jar in Ihrem Klassenpfad einschließen. Je nach Anforderung können Sie auch die SVG-Unterstützung hinzufügen.

Entnommen iceface Mustermappe:

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); 
    } 
} 

Der obige Code hilft Ihnen, eine PDF auf einer Schaukel Komponente bei der Anzeige. Sie können das gleiche in der SWT-Umgebung (schauen Sie sich SwingViewBuilder .. etwas schwer, aber SWT aussehen und fühlen) oder org.eclipse.swt.awt.SWT_AWT (Art von einfach ... aber Swing + swt aussehen und fühlen) verwenden .. Obwohl beide Ansätze Ihren Zweck lösen. Überprüfen Sie auch die entsprechenden Lizenzen im Lizenzordner.

Hoffe, das wird helfen.

+0

Ja, ich habe sie gesehen, aber ich habe keine Möglichkeit gefunden, vorhandene PDF-Dateien zu öffnen und sie in einer Ansicht anzuzeigen. – Haythem

+0

@Haythem: Welche Bibliothek verwendest du gerade? – Favonius

+0

@Favonius: Ich verwende org.nightlabs.eclipse.ui.pdfviewer – Haythem

4

Hier ist ein weiterer kostenloser, kleiner und leistungsfähiger PDF Viewer basierend auf Eclipse SWT und jPod Renderer - JPview. Es hat starkes Rendering und geringen Speicherverbrauch.