📄 pdfviewer.java
字号:
x += 20; y += 20; } if (selectedFrame != null) { desktop.setSelectedFrame(selectedFrame); } } catch(java.beans.PropertyVetoException e) { } } private class PDFDocumentFrame extends JInternalFrame implements PDFViewport.ViewportObserver { private javax.swing.JFormattedTextField tfPages; private javax.swing.JSplitPane splitPane; private javax.swing.JTabbedPane tabbedPane; private javax.swing.JPanel navigatePanel; private javax.swing.JButton btnMoveFirst; private javax.swing.JButton btnMoveLast; private javax.swing.JButton btnMoveLeft; private javax.swing.JButton btnMoveRight; private PDFScrollPane pdfPanel; private PDFViewport pdfViewport; private OutlinePanel pdfOutlinePanel; private ThumbsPanel pdfThumbsPanel; private PDF document; private int currentPage; private JScrollBar verticalSB, horizontalSB; PDFDocumentFrame() { super("", true, true, true, true); currentPage = 0; setBackground(Color.gray); pdfPanel = new PDFScrollPane(); pdfViewport = pdfPanel.getViewport(); // Add some Rendering Hints - maybe they'll help? RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); pdfViewport.setRenderingHints(hints); // add navigation panel navigatePanel = new javax.swing.JPanel(); navigatePanel.setBorder(BorderFactory.createEtchedBorder()); btnMoveFirst = new javax.swing.JButton("| <"); btnMoveLeft = new javax.swing.JButton("<"); btnMoveRight = new javax.swing.JButton(">"); btnMoveLast = new javax.swing.JButton("> |"); // add tabbed pane tabbedPane = new JTabbedPane(JTabbedPane.LEFT); // add document outline view pdfOutlinePanel = new OutlinePanel(pdfViewport); pdfOutlinePanel.setOpaque(true); tabbedPane.addTab("Bookmarks", null, pdfOutlinePanel, "Bookmarks"); // add document thumbnail view pdfThumbsPanel = new ThumbsPanel(pdfViewport); tabbedPane.addTab("Pages", null, pdfThumbsPanel, "Pages"); tabbedPane.addChangeListener(new ChangeListener() { // This method is called whenever the selected tab changes public void stateChanged(ChangeEvent evt) { JTabbedPane pane = (JTabbedPane) evt.getSource(); // Get current tab if (pane.getSelectedIndex() == 1) { pdfThumbsPanel.setDocument(document); } } }); tabbedPane.setSelectedIndex(0); // add split pane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tabbedPane, pdfPanel); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(0); splitPane.setDividerSize(10); splitPane.setResizeWeight(0); getContentPane().add(splitPane, BorderLayout.CENTER); // add page buttons btnMoveFirst.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { currentPage = 0; pdfViewport.setPageNumber(currentPage); } }); navigatePanel.add(btnMoveFirst); btnMoveLeft.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { currentPage--; pdfViewport.setPageNumber(currentPage); } }); navigatePanel.add(btnMoveLeft); tfPages = new javax.swing.JFormattedTextField(); tfPages.setPreferredSize(new Dimension(70, 21)); tfPages.setHorizontalAlignment(JTextField.CENTER); tfPages.setEditable(true); tfPages.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { try { String s = tfPages.getText(); if (s.indexOf("of")>0) { s = s.substring(0, s.indexOf("of")-1); } s = s.trim(); int pgnum = Integer.parseInt(s) - 1; if (pgnum<0 || pgnum >= document.getNumberOfPages() || pgnum==currentPage) { throw new RuntimeException(); } currentPage = pgnum; pdfViewport.setPageNumber(currentPage); } catch (Exception x) { tfPages.setText((currentPage+1) + " of " + document.getNumberOfPages()); } } } }); tfPages.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { tfPages.selectAll(); } }); navigatePanel.add(tfPages); btnMoveRight.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { currentPage++; pdfViewport.setPageNumber(currentPage); } }); navigatePanel.add(btnMoveRight); btnMoveLast.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { currentPage = document.getNumberOfPages() - 1; pdfViewport.setPageNumber(currentPage); } }); navigatePanel.add(btnMoveLast); navigatePanel.setVisible(false); getContentPane().add(navigatePanel, BorderLayout.SOUTH); setTitle("BFO - [" + title + "]"); splitPane.setVisible(true); navigatePanel.setVisible(true); // add observers pdfViewport.addObserver(pdfThumbsPanel); pdfViewport.addObserver(this); } /** * Set the PDF for this frame */ void setDocument(PDF pdf) {// add document to view this.document = pdf; pdfViewport.setDocument(document); pdfOutlinePanel.setDocument(document); } /** * Set the viewing percentage for this frame */ void setPercent(String p) { if (p.indexOf("%")<0) { p = p+"%"; } if (document!=null) { if (p.indexOf("%")>=0) { p = p.substring(0, p.lastIndexOf("%")); } p = p.trim(); try { float dpi = Float.parseFloat(p) * 0.72f; pdfViewport.setDPI(dpi); } catch (Exception e) { } } } public String getPercent() { return ((int)Math.round(pdfViewport.getDPI() / 72 * 100))+"%"; } public void print() { if (document != null) pdfViewport.print(); } public PDFViewport getViewPort() { return pdfViewport; } /* (non-Javadoc) * @see org.faceless.pdf2.viewer.PDFViewportObserver#viewportChanged(double, double) */ public void viewportChanged(double x, double y) { if (document != null) { currentPage = pdfViewport.getPageNumber(); btnMoveRight.setEnabled(currentPage != document.getNumberOfPages()-1); btnMoveLast.setEnabled(currentPage != document.getNumberOfPages()-1); btnMoveLeft.setEnabled(currentPage!=0); btnMoveFirst.setEnabled(currentPage!=0); tfPages.setText((currentPage+1) + " of " + document.getNumberOfPages()); cboZoom.setSelectedItem(getPercent()); } } class FrameListener extends InternalFrameAdapter { public void internalFrameClosing(InternalFrameEvent e) { dispose(); desktop.remove(e.getInternalFrame()); frameCounter = (frameCounter-1) % 10; activeFrameChanged(); } public void internalFrameActivated(InternalFrameEvent e) { activeFrameChanged(); } } /* (non-Javadoc) * @see org.faceless.pdf2.viewer.PDFViewport.ViewportObserver#writeAsTIFFComplete() */ public void writeAsTIFFComplete() { JOptionPane.showMessageDialog(this, "TIFF created successfully", "PDF to TIFF", JOptionPane.INFORMATION_MESSAGE); } } /** * Create a new PDFViewer object in a frame of it's own. Top level routine * to be called by main() * @since 2.7..1 */ public static PDFViewer newPDFViewer() { JFrame bfoFrame = new JFrame("BFO"); bfoFrame.setIconImage(BFO16.getImage()); PDFViewer pdfViewer = new PDFViewer(bfoFrame); bfoFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); bfoFrame.getContentPane().add("Center", pdfViewer); bfoFrame.pack(); // position window in the centre of the screen Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension windowSize = bfoFrame.getSize(); bfoFrame.setLocation(Math.max(0, (screenSize.width - windowSize.width) / 2), Math.max(0, (screenSize.height - windowSize.height) / 2)); bfoFrame.setVisible(true); return pdfViewer; } /** * The main() method can be invoked to run this class from the command line. * A single argument specifying the name of the file to open is optional */ public static void main(final String args[]) { File file = null; if (args.length > 0) { try { if (args.length > 3 || args[0].equals("-help")) { System.err.println("Usage: java org.faceless.pdf2.viewer.PDFViewer [<file>]"); return; } else { // load PDF if (args.length == 1 || args.length == 3) { String filename = args[args.length-1]; file = new File(filename); if (!file.isFile() || !file.canRead()) { System.err.println("PDFViewer: Unable to read \""+filename+"\""); file = null; } } if (args[0].equals("-license")) { PDF.setLicenseKey(args[1]); } } } catch (Exception e) { System.err.println("Usage: java org.faceless.pdf2.viewer.PDFViewer [<file>]"); return; } } final File ffile = file; //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { PDFViewer viewer = newPDFViewer(); if (ffile != null) viewer.loadPDF(ffile); } }); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -