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

时间:2012-03-18 19:56:28

标签: java swing pdf jpanel

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

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

4 个答案:

答案 0 :(得分:14)

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

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

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

enter image description here

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

我使用这个库来自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);

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

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

<!-- https://mvnrepository.com/artifact/org.icepdf.os/icepdf-core -->
        <dependency>
            <groupId>org.icepdf.os</groupId>
            <artifactId>icepdf-core</artifactId>
            <version>${icepdf.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.media</groupId>
                    <artifactId>jai_core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.icepdf.os/icepdf-viewer -->
        <dependency>
            <groupId>org.icepdf.os</groupId>
            <artifactId>icepdf-viewer</artifactId>
            <version>${icepdf.version}</version>
        </dependency>

然后,您可以使用类似于以下内容的代码在面板中可视化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

希望这可以帮到你。

答案 3 :(得分:0)

如果您愿意使用 SWT 库,有一个非常简单的方法。您将声明一个 Swing 浏览器并将浏览器 URL 设置为文件路径。

    shell = new Shell();
    shell.setSize(800, 600);
    shell.setText("PDF View");
    
    Browser browser = new Browser(shell, SWT.NONE);
    browser.setUrl("sample.pdf");

    browser.setBounds(10, 10, 764, 541);

完整代码如下:

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class PdfViewPage {


protected Shell shell;
/**
 * Launch the application.
 * @param args
 */
public static void main(String[] args) {
    try {
        PdfViewPage window = new PdfViewPage();
        window.open();
        
    } catch (Exception e) {
        e.printStackTrace();
    }
}
/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

/**
 * Create contents of the window.
 */
protected void createContents() {
    shell = new Shell();
    shell.setSize(800, 600);
    shell.setText("PDF View");
    
    Browser browser = new Browser(shell, SWT.NONE);
    browser.setUrl("sample.pdf");

    browser.setBounds(10, 10, 764, 541);

}
}