在JavaFX中显示pdf

开发JavaFX需要显示pdf 的桌面应用程序。我了解到JavaFX(当前版本)不支持pdf查看/显示,我也了解到JPedal

现在,问题:

  1. 是否有任何外部组件或库可以在JavaFX中查看pdf?它应该是一个免费软件。
  2. (如果必须使用JPedal)如何将其嵌入到我的应用程序中。

回答:

JPedalFX下载提供了有关使用JPedalFX的示例代码。

我有点of脚,但是我只是在这里粘贴从JPedalFX库提供的示例查看器复制的代码段示例代码。该代码依赖于JPedalFX发行版中包含的jpedal_lgpl.jar文件,该文件位于类路径(或应用程序jar清单中引用的库路径)上。

如果您对JPedalFX的使用还有其他疑问,建议您直接与IDR解决方案联系(他们过去一直在响应我)。

// get file path.

FileChooser fc = new FileChooser();

fc.setTitle("Open PDF file...");

fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("PDF Files", "*.pdf"));

File f = fc.showOpenDialog(stage.getOwner());

String filename = file.getAbsolutePath();

// open file.

PdfDecoder pdf = new PdfDecoder();

pdf.openPdfFile(filename);

showPage(1);

pdf.closePdfFile();

. . .

/**

* Update the GUI to show a specified page.

* @param page

*/

private void showPage(int page) {

//Check in range

if (page > pdf.getPageCount())

return;

if (page < 1)

return;

//Store

pageNumber = page;

//Show/hide buttons as neccessary

if (page == pdf.getPageCount())

next.setVisible(false);

else

next.setVisible(true);

if (page == 1)

back.setVisible(false);

else

back.setVisible(true);

//Calculate scale

int pW = pdf.getPdfPageData().getCropBoxWidth(page);

int pH = pdf.getPdfPageData().getCropBoxHeight(page);

Dimension s = Toolkit.getDefaultToolkit().getScreenSize();

s.width -= 100;

s.height -= 100;

double xScale = (double)s.width / pW;

double yScale = (double)s.height / pH;

double scale = xScale < yScale ? xScale : yScale;

//Work out target size

pW *= scale;

pH *= scale;

//Get image and set

Image i = getPageAsImage(page,pW,pH);

imageView.setImage(i);

//Set size of components

imageView.setFitWidth(pW);

imageView.setFitHeight(pH);

stage.setWidth(imageView.getFitWidth()+2);

stage.setHeight(imageView.getFitHeight()+2);

stage.centerOnScreen();

}

/**

* Wrapper for usual method since JFX has no BufferedImage support.

* @param page

* @param width

* @param height

* @return

*/

private Image getPageAsImage(int page, int width, int height) {

BufferedImage img;

try {

img = pdf.getPageAsImage(page);

//Use deprecated method since there's no real alternative

//(for JavaFX 2.2+ can use SwingFXUtils instead).

if (Image.impl_isExternalFormatSupported(BufferedImage.class))

return javafx.scene.image.Image.impl_fromExternalImage(img);

} catch(Exception e) {

e.printStackTrace();

}

return null;

}

/**

* ===========================================

* Java Pdf Extraction Decoding Access Library

* ===========================================

*

* Project Info: http://www.jpedal.org

* (C) Copyright 1997-2008, IDRsolutions and Contributors.

*

* This file is part of JPedal

*

This library is free software; you can redistribute it and/or

modify it under the terms of the GNU Lesser General Public

License as published by the Free Software Foundation; either

version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public

License along with this library; if not, write to the Free Software

Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

*

* ---------------

* JPedalFX.java

* ---------------

*/

另外,我过去使用带有JavaFX的旧的基于SwingLabs Swing的pdf渲染器为JavaFX

Web浏览器渲染pdf 。尽管在我开发浏览器时,Swing /

JavaFX集成不是JavaFX的受支持功能,但对我来说仍然可以正常工作。集成代码在PDFViewer.java和BrowserWindow.java中。

需要注意的是在Swing应用程序中嵌入的JavaFX中的Java

2.2的支持和嵌入JavaFX的一个Swing应用程序中的Java 8支持。

以上是 在JavaFX中显示pdf 的全部内容, 来源链接: utcz.com/qa/432309.html

回到顶部