JavaFX Apache pdfbox在窗格中查看PDDocument
我在javaFx应用程序中使用apachepdfbox,在这里我正在阅读一个pdf文档,现在我想在我的JavaFX Apache pdfbox在窗格中查看PDDocument,javafx,pdfbox,Javafx,Pdfbox,我在javaFx应用程序中使用apachepdfbox,在这里我正在阅读一个pdf文档,现在我想在我的FXML中的一个窗格中显示一个org.apache.pdfbox.pdmodel.PDDocument。到目前为止,我尝试了org.apache.pdfbox.PDFReader,但它使用的是自己的Jframe。我想在窗格中显示它 这里是我到目前为止所做的 public class CustomPDFReader extends PDFReader { public CustomPDFR
FXML
中的一个窗格中显示一个org.apache.pdfbox.pdmodel.PDDocument
。到目前为止,我尝试了org.apache.pdfbox.PDFReader
,但它使用的是自己的Jframe
。我想在窗格中显示它
这里是我到目前为止所做的
public class CustomPDFReader extends PDFReader {
public CustomPDFReader(BillModel bm) {
super();
showAllPages(bm.getAllPages());
setVisible(true);
}
private void showAllPages(List<PDPage> pagesList) {
try {
Field documentPanel = getClass().getSuperclass().getDeclaredField("documentPanel");
documentPanel.setAccessible(true);
JPanel panel = (JPanel) documentPanel.get(this);
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();
}
}
}
公共类CustomPDFReader扩展PDFReader{
公共定制PDF阅读器(BillModel bm){
超级();
showAllPages(bm.getAllPages());
setVisible(真);
}
私有void显示所有页面(列表页面列表){
试一试{
字段documentPanel=getClass().getSuperclass().getDeclaredField(“documentPanel”);
documentPanel.setAccessible(true);
JPanel panel=(JPanel)documentPanel.get(this);
GridLayout=新的GridLayout(0,1);
面板设置布局(布局);
用于(PDPage:pagesList){
PageWrapper=新的PageWrapper(此);
包装器。显示页面(第页);
panel.add(wrapper.getPanel());
}
包装();
}捕获(例外e){
e、 printStackTrace();
}
}
}
从页面创建图像是最简单的选择。看见您也可以使用PDFRenderer
通过Graphics2D
输出结果,您可以扩展它,通过其他节点类型创建输出。是的,我也考虑过,但我想知道除了将pdf显示为图像之外,是否还有其他方法。Graphics2D
接收不同类型的绘图操作。您应该能够基于这些操作生成场景。不过,这需要做很多工作。我非常确定目前pdfbox中没有内置对javafx的支持,所以这两个选项可能是您将获得的最佳选项,但其他人可能会证明我错了。。。