在现有JPanel中显示pdf的基本代码?

我有一个现有的界面,其中有一个用于显示pdf文件的JPanel。

在此界面中显示pdf并且不打开新窗口非常重要。 如果可能,如何在不使用不必要的代码(库)的情况下在JPanel上显示pdf?

如果你想渲染PDF内容并忽略原始格式(粗体,字体大小等),你可以使用任何PDF解析器(PDFBox,Tika ..等)解析PDF,然后将字符串结果设置为任何文本组件(JTextFiled或JTextArea中)。

否则你应该使用PDF渲染库。 有一些商业图书馆。

但是我在上一个项目中使用了一个小技巧来在我自己的面板中显示PDF,如下所示:

在此处输入图像描述

我们的想法是在您的应用程序中使用嵌入式Web组件,然后将文件路径传递给此组件,然后Web渲染组件将加载您机器中可用的相应PDF渲染工具,在我的情况下,该机器具有acrobat reader。

我使用这个来自DJ项目的Native Swing http //djproject.sourceforge.net/ns/

只需制作网页浏览器:

private JWebBrowser fileBrowser = new JWebBrowser(); 

并控制浏览器外观,然后将浏览器添加到主面板(其布局为BorderLayout)

 fileBrowser.setBarsVisible(false); fileBrowser.setStatusBarVisible(false); fileRenderPanel.add(fileBrowser, BorderLayout.CENTER); 

那么如果你要渲染PDF使用:

 fileBrowser.navigate(filePath); 

如果要在PDF中突出显示某些关键字:

 fileBrowser.navigate(filePath + "#search= " + keyword + ""); // work on acrobat reader only 

如果你想渲染其他文本(plain,html):

 fileBrowser.setHTMLContent(htmlContent); 

您需要使用库来呈现它,如jpedal或PDF-renderer或多价。

我认为最好的选择是使用ICEpdf

ICEpdf API是100%Java,轻量级,快速,高效且易于使用。

ICEpdf可以用作独立的开源Java PDF查看器,也可以轻松嵌入到任何Java应用程序中,以无缝地加载或捕获PDF文档。 除了PDF文档渲染之外,ICEpdf还具有极强的通用性,可以以多种创新方式使用。

在您使用Maven管理的项目中,您可以包括:

   org.icepdf.os icepdf-core ${icepdf.version}   javax.media jai_core      org.icepdf.os icepdf-viewer ${icepdf.version}  

然后,您可以使用类似于以下内容的代码来可视化面板中的pdf:

 // Instance the controller controller = new SwingController(); // We created the SwingViewFactory configured with the controller SwingViewBuilder factory = new SwingViewBuilder(controller); // We use the factory to build a preconfigured JPanel // with a full and active viewer user interface. viewerComponentPanel = factory.buildViewerPanel(); viewerComponentPanel.setPreferredSize(new Dimension(400, 243)); viewerComponentPanel.setMaximumSize(new Dimension(400, 243)); // We add keyboard command ComponentKeyBinding.install(controller, viewerComponentPanel); // add interactive mouse link annotation support via callback controller.getDocumentViewController().setAnnotationCallback( new org.icepdf.ri.common.MyAnnotationCallback( controller.getDocumentViewController())); // We add the component to visualize the report reportViewerContainer.add(viewerComponentPanel, BorderLayout.CENTER); reportViewerContainer.invalidate(); // We open the generated document controller.openDocument(reportLocationUri.toURL()); 

因此,您可以获得以下内容:

Java Swing ICEpdf Viewer

希望这可以帮到你。