gpt4 book ai didi

java - 使用 Apache PDFBox 显示 PDF 的所有页面

转载 作者:行者123 更新时间:2023-11-30 08:39:56 28 4
gpt4 key购买 nike

我是 Apache PDFBox 的新手,我使用 org.apache.pdfbox.PDFReader 打开 PDF 等,但是现在我需要在一个 JPanel 中显示 JFrame PDF 文档中的所有页面,这可能吗? like this

最佳答案

如前所述,我需要在 jframe 中显示 PDF 文档的所有页面,为此我使用了 org.apache.pdfbox.PDFReader,如下所示:

import java.awt.*;
import java.lang.reflect.*;
import java.util.List;

import javax.swing.*;

import org.apache.pdfbox.PDFReader;
import org.apache.pdfbox.pdfviewer.PageWrapper;
import org.apache.pdfbox.pdmodel.PDPage;

public class CustomPDFReader extends PDFReader {
/**
*
*/
private static final long serialVersionUID = 678451510308887925L;

public CustomPDFReader() {
super();
}

public void setCurrentFile(String file) {
try {
Method m = getClass().getSuperclass().getDeclaredMethod("openPDFFile",
new Class<?>[]{String.class, String.class});
m.setAccessible(true);
m.invoke(this, file, null);
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String []args) {
CustomPDFReader reader = new CustomPDFReader();
// remove menubar
JMenuBar menu = reader.getJMenuBar();
menu.setVisible(false);

JPanel header = new JPanel(new BorderLayout());

JPanel firstLine = new JPanel();

JLabel label = new JLabel("Label");
firstLine.add(label);

JPanel secondLine = new JPanel();

JTextField text = new JTextField();
text.setPreferredSize(new Dimension(100, 30));
secondLine.add(text);

JButton button = new JButton("Button");
button.setPreferredSize(new Dimension(100, 30));
secondLine.add(button);

header.add(firstLine, java.awt.BorderLayout.NORTH);
header.add(secondLine, java.awt.BorderLayout.SOUTH);

reader.getContentPane().add(header, java.awt.BorderLayout.NORTH);

// set default opened file
reader.setCurrentFile("test.pdf");
reader.showAllPages();
reader.setVisible(true);
}

private void showAllPages() {
try {
Field pages = getClass().getSuperclass().getDeclaredField("pages");
pages.setAccessible(true);
List<PDPage> pagesList = (List<PDPage>) pages.get(this);

Field documentPanel = getClass().getSuperclass().getDeclaredField("documentPanel");
documentPanel.setAccessible(true);
JPanel panel = (JPanel) documentPanel.get(this);
panel.remove(0);
GridLayout layout = new GridLayout(0, 1);
panel.setLayout(layout);
for(PDPage page : pagesList) {
PageWrapper wrapper = new PageWrapper(this);
wrapper.displayPage(page);
panel.add(wrapper.getPanel());
}
pack();
} catch(Exception e) {
e.printStackTrace();
}
}

PDFBox 版本为 1.8.10。您可以找到示例项目 there

关于java - 使用 Apache PDFBox 显示 PDF 的所有页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919986/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com