Java PDF Viewer

我正在使用java和RCP,我试图在我的视图上显示带有Acrobat的pdf文档。 我不需要改变它们。 我有这个代码的错误。 知道如何解决这个问题吗? Ps:它同时运作良好。

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) 

此致,Haythem

看看这些免费的pdf渲染器……

一些链接……

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

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

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

UPDATE

根据http://www.icepdf.org/ ,

ICEpdf是一个开源Java PDF引擎,可以在任何Java应用程序或Web服务器上呈现,转换或提取PDF内容。

对于基本function,您必须在类路径中包含icepdf-core.jaricepdf-viewer.jar 。 根据要求,您还可以添加SVG支持。

取自iceface样本文件夹:

 import org.icepdf.ri.common.SwingController; import org.icepdf.ri.common.SwingViewBuilder; import javax.swing.*; /** * The ViewerComponentExample class is an example of how to use * SwingController and SwingViewBuilder * 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); } } 

上面的代码可以帮助您在swing组件上显示PDF。 你可以在SWT环境中做同样的事情(看看SwingViewBuilder ……有点难,但是会有SWT的外观和感觉)或者使用org.eclipse.swt.awt.SWT_AWT (有点容易……但会摇摆不定+ swt外观和感觉)……虽然这两种方法都能解决你的目的。 另请检查许可证文件夹中的适用许可证。

希望这会有所帮助。

这是另一款基于Eclipse SWT和jPod渲染器的自由,小巧而强大的PDF查看器–JPview 。 它具有强大的渲染和低内存使用率。