/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hj.pdfReader;
import java.io.File;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ListChangeListener.Change;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.FocusModel;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.SplitPane;
import javafx.scene.control.TextField;
import javafx.scene.control.ToolBar;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;
import javafx.util.Callback;
import org.icepdf.core.pobjects.Destination;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.OutlineItem;
import org.icepdf.core.pobjects.Outlines;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.pobjects.PageTree;
import org.icepdf.core.pobjects.actions.Action;
import org.icepdf.core.pobjects.actions.GoToAction;
import org.icepdf.core.util.GraphicsRenderingHints;
import org.icepdf.core.util.Library;
/**
*
* @author jiu
*/
public class PdfReader extends Application {
private Stage primaryStage ;
private BorderPane borderPane;
private SplitPane splitPane;
private ToolBar toolBar;
private StackPane treePane;
private HBox viewPane;
private ScrollPane viewScrollPane;
private double[] dividerPositions = {0.2f, 0.9f};
private Document document;
private PageTree pageTree;
private ImageView imageView;
private TextField curPageText;
private TreeView treeView;
private Button btnFirst , btnPrev , btnNetx , btnLast , btnOutline ;
private Label totalPageLabel ;
private boolean showDemo = true ;
private String demoFilePath = "E:\\资料\\阎宏-Java与模式.pdf";
@Override
public void start(Stage primaryStage) {
initToolBar();
treeView = new TreeView();
treePane = new StackPane();
treePane.setMinWidth(180);
treePane.getChildren().add(treeView);
imageView = new ImageView();
imageView.autosize();
imageView.setStyle("-fx-width:100%;-fx-height:100%");
imageView.setSmooth( true );
imageView.setPreserveRatio(true);
viewPane = new HBox();
//viewPane.setPadding(new Insets(6,12,6,12));
viewPane.setAlignment( Pos.CENTER );
viewPane.getChildren().add( imageView );
viewPane.setStyle("-fx-border-width:1;-fx-width:100%;-fx-height:100%;");
viewScrollPane = new ScrollPane();
viewScrollPane.autosize();
viewScrollPane.setStyle("-fx-background-color:#808080;");
viewScrollPane.setContent( viewPane );
viewScrollPane.setFitToWidth(true);
viewScrollPane.setFitToHeight(true);
splitPane = new SplitPane();
splitPane.getItems().addAll(treePane, viewScrollPane);
splitPane.setDividerPositions(dividerPositions);
borderPane = new BorderPane();
borderPane.setTop(toolBar);
borderPane.setCenter(splitPane);
Scene scene = new Scene(borderPane, 821, 600);
this.primaryStage = primaryStage ;
this.primaryStage.setResizable(false);
primaryStage.setTitle("JavaFX Pdf 阅读器");
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setOnCloseRequest( new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
destory();
}
});
if( showDemo ){
loadPdfDocument( demoFilePath );
}
}
/**
* 初始化工具栏
*/
private void initToolBar() {
toolBar = new ToolBar();
//打开本地文件
Button btnOpen = new Button("打开");
btnOpen.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
FileChooser fc = new FileChooser();
fc.setTitle("选择PDF文档");
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("PDF文档", "*.pdf"));
File file = fc.showOpenDialog( primaryStage.getOwner());
if( file != null && file.exists() ){
loadPdfDocument( file.getAbsolutePath() );
}
}
});
//回到首页
btnFirst = new Button("<<");
btnFirst.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
showPage( 0 );
}
});
btnFirst.setVisible(false);
//上一页
btnPrev = new Button("<");
btnPrev.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String str = curPageText.getText();
int _page = Integer.parseInt( str );
showPage( _page - 2 );
}
});
btnPrev.setVisible(false);
//当前页码 输入框
curPageText = new TextField();
curPageText.setMaxWidth(50);
curPageText.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
if (t.getCode() == KeyCode.ENTER) {
String str = curPageText.getText();
int _page = Integer.parseInt( str );
showPage( _page-1 );
}
}
});
curPageText.setVisible(false);
//总页数
totalPageLabel = new Label("共页");
totalPageLabel.setVisible(false);
//下一页
btnNetx = new Button(">");
btnNetx.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String str = curPageText.getText();
int _page = Integer.parseInt( str );
showPage( _page );
}
});
btnNetx.setVisible(false);
//跳到最后一页
btnLast = new Button(">>");
btnLast.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
showPage( document.getNumberOfPages() - 1 );
}
});
btnLast.setVisible(false);
//显示和隐藏大纲
btnOutline = new Button("大纲");
btnOutline.setOnAction(new EventHandler() {
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JavaFxPdfReader.zip (47个子文件)
JavaFxPdfReader
manifest.mf 82B
src
com
hj
pdfReader
PdfReader.java 16KB
MessageBox.java 2KB
build
empty
nb-jfx.jks 1KB
generated-sources
ap-source-output
classes
com
hj
pdfReader
PdfReader$1.class 997B
PdfReader$4.class 1KB
PdfReader$2.class 2KB
PdfReader$10.class 3KB
PdfReader$3.class 1013B
PdfReader$6.class 1KB
PdfReader$11.class 1KB
PdfReader$11$1.class 2KB
PdfReader.class 10KB
PdfReader$8.class 1KB
PdfReader$7.class 1KB
MessageBox$1.class 649B
PdfReader$5.class 1KB
MessageBox.class 3KB
PdfReader$9.class 3KB
ModalDialog.class 642B
helloworld
HelloWorld.java.bak 18KB
built-jar.properties 93B
dist
JavaFxPdfReader.html 4KB
lib
icepdf-core.jar 806KB
web-files
get_javafx.png 11KB
javafx-loading-100x100.gif 17KB
dtjava.js 23KB
error.png 725B
javafx-loading-25x25.gif 2KB
JavaFxPdfReader.jnlp 1KB
JavaFxPdfReader.jar 40KB
build.xml 4KB
nbproject
genfiles.properties 475B
jfx-impl.xml 124KB
project.properties 4KB
configs
__WebStart_____.properties 0B
_______.properties 0B
private
private.xml 230B
configs
__WebStart_____.properties 229B
_______.properties 329B
config.properties 0B
private.properties 421B
build-impl.xml 79KB
templates
FXSwingTemplate.html 223B
FXSwingTemplateApplet.jnlp 891B
FXSwingTemplateApplication.jnlp 844B
project.xml 1KB
共 47 条
- 1
资源评论
- 追梦的少年人2014-07-20还可以,但是PDF的页码的缩略图无法显示,有bug。总体不错,可以借鉴学习。。。javafx的资源太少了
- gbd2032013-08-15项目能跑起来,正在学习javafx很有帮助。
- babyskywq2014-01-03挺不错的东西,虽然和我需要的有点差距。
huangjiuyx
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功