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渲染器……
一些链接……
UPDATE
根据http://www.icepdf.org/ ,
ICEpdf是一个开源Java PDF引擎,可以在任何Java应用程序或Web服务器上呈现,转换或提取PDF内容。
对于基本function,您必须在类路径中包含icepdf-core.jar
和icepdf-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
andSwingViewBuilder
* 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 。 它具有强大的渲染和低内存使用率。