📄 pdfviewer.java
字号:
} catch (Exception e) { } addDocumentPanel(pdf, name==null ? pdf.getInfo("Title") : name, file); } }); } } /** * Add a new Document Frame containing the specified PDF. If we're using the * MultiWindow feature then this is done in a JInternalFrame inserted into * the desktop. If not, we just update the activedocument with the new * PDF. */ private void addDocumentPanel(PDF pdf, String name, File file) { if (hasFeature(MultiWindow.getInstance())) { final DocumentPanel documentpanel = new DocumentPanel(); documentpanel.putClientProperty("file", file); for (Iterator i = listeners.iterator();i.hasNext();) { documentpanel.addDocumentPanelListener((DocumentPanelListener)i.next()); } documentpanel.setViewer(this); documentpanel.raiseDocumentPanelEvent(DocumentPanelEvent.createCreated(documentpanel)); for (Iterator i = features.iterator();i.hasNext();) { ViewerFeature feature = (ViewerFeature)i.next(); if (feature instanceof SidePanelFactory) { documentpanel.addSidePanelFactory((SidePanelFactory)feature); } else if (feature instanceof AnnotationComponentFactory) { documentpanel.addAnnotationComponentFactory((AnnotationComponentFactory)feature); } else if (feature instanceof ActionHandler) { documentpanel.addActionHandler((ActionHandler)feature); } } final JInternalFrame frame = new JInternalFrame(name, true, true, true, true); frame.setContentPane(documentpanel); frame.setFrameIcon(BFO16); frame.setFocusable(false); frame.addInternalFrameListener(new InternalFrameListener() { private void activeWindowChanged() { activeWindow = desktop.getSelectedFrame(); if (activeWindow!=null && activeWindow.isIcon()) activeWindow = null; if (activedocument!=null) { activedocument.raiseDocumentPanelEvent(DocumentPanelEvent.createDeactivated(activedocument)); } activedocument = activeWindow!=null ? (DocumentPanel)activeWindow.getContentPane() : null; if (activedocument!=null && activedocument.getPDF()!=null) { activedocument.raiseDocumentPanelEvent(DocumentPanelEvent.createActivated(activedocument)); } } public void internalFrameClosing(InternalFrameEvent e) { documentpanel.setPDF(null); frame.dispose(); desktop.remove(frame); activeWindowChanged(); } public void internalFrameActivated(InternalFrameEvent e) { activeWindowChanged(); } public void internalFrameDeactivated(InternalFrameEvent e) { activeWindowChanged(); } public void internalFrameDeiconified(InternalFrameEvent e) { activeWindowChanged(); } public void internalFrameIconified(InternalFrameEvent e) { activeWindowChanged(); } public void internalFrameOpened(InternalFrameEvent e) { } public void internalFrameClosed(InternalFrameEvent e) { } }); frame.setBounds(internalFrameCounter*30, internalFrameCounter*20, MINIMIZEDWIDTH, MINIMIZEDHEIGHT); internalFrameCounter = (internalFrameCounter+1) % 10; try { // Minimise other frames JInternalFrame[] fs = desktop.getAllFrames(); for (int i=0;i<fs.length;i++) fs[i].setMaximum(false); desktop.add(frame); frame.show(); frame.setMaximum(true); } catch (PropertyVetoException e) { } documentpanel.setPDF(pdf); } else { activedocument.putClientProperty("file", file); activedocument.setPDF(pdf); for (Iterator i = pdfcomponents.iterator();i.hasNext();) { JComponent comp = (JComponent)i.next(); comp.setEnabled(true); } } } /** * Return the active {@link DocumentPanel} */ public DocumentPanel getActiveDocumentPanel() { return activedocument; } /** * Return all the {@link DocumentPanel}s in the viewer * @since 2.8.5 */ public DocumentPanel[] getDocumentPanels() { if (hasFeature(MultiWindow.getInstance())) { JInternalFrame[] fs = desktop.getAllFrames(); DocumentPanel[] panels = new DocumentPanel[fs.length]; for (int i=0;i<fs.length;i++) { try { panels[i] = (DocumentPanel)(fs[i].getContentPane()); } catch (ClassCastException e) { DocumentPanel[] t = new DocumentPanel[panels.length-1]; System.arraycopy(panels, 0, t, 0, i); panels = t; } } return panels; } else { return new DocumentPanel[] { activedocument }; } } /** * Close the active {@link DocumentPanel} */ public void closeActiveDocumentPanel() { if (hasFeature(MultiWindow.getInstance()) && activeWindow!=null) { activeWindow.doDefaultCloseAction(); } else { activedocument.setPDF(null); activedocument.raiseDocumentPanelEvent(DocumentPanelEvent.createDeactivated(activedocument)); for (Iterator i = pdfcomponents.iterator();i.hasNext();) { JComponent comp = (JComponent)i.next(); comp.setEnabled(false); } } } /** * Add a {@link DocumentPanelListener} to any {@link DocumentPanel} objects * created by this PDFViewer. */ public void addDocumentPanelListener(DocumentPanelListener listener) { listeners.add(listener); if (desktop!=null) { JInternalFrame[] fs = desktop.getAllFrames(); for (int i=0;i<fs.length;i++) { try { DocumentPanel panel = (DocumentPanel)(fs[i].getContentPane()); panel.addDocumentPanelListener(listener); } catch (ClassCastException e) {} } } else if (activedocument!=null) { activedocument.addDocumentPanelListener(listener); } } /** * Add a {@link DocumentPanelListener} to any {@link DocumentPanel} objects * created by this PDFViewer. */ public void removeDocumentPanelListener(DocumentPanelListener listener) { listeners.remove(listener); if (desktop!=null) { JInternalFrame[] fs = desktop.getAllFrames(); for (int i=0;i<fs.length;i++) { try { DocumentPanel panel = (DocumentPanel)(fs[i].getContentPane()); panel.removeDocumentPanelListener(listener); } catch (ClassCastException e) {} } } else if (activedocument!=null) { activedocument.removeDocumentPanelListener(listener); } } //---------------------------------------------------------------------------------- private void cascadeFrames() { JInternalFrame[] frames = desktop.getAllFrames(); if (frames.length != 0) { Rectangle dBounds = desktop.getBounds(); int margin = 0; Insets ins = null; Dimension d, cd; for (int i=0; i<frames.length; i++) { d = frames[i].getSize(); cd = frames[i].getContentPane().getSize(); margin += Math.max(d.width - cd.width, d.height - cd.height); } int width = dBounds.width - margin; int height = dBounds.height - margin; int offset = 0; for (int i=0;i<frames.length;i++) { frames[i].setBounds(dBounds.x + offset, dBounds.y + offset, width, height); d = frames[i].getSize(); cd = frames[i].getContentPane().getSize(); offset += Math.max(d.width - cd.width, d.height - cd.height); } } } //---------------------------------------------------------------------------------- /** * 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() { ArrayList f = new ArrayList(ViewerFeature.getAllFeatures());// f.remove(MultiWindow.getInstance()); return newPDFViewer(f); } /** * Create a new PDFViewer object in a frame of it's own with the specified features. * @param features a Collection of {@link ViewerFeature} objects that are to be supported * @see ViewerFeature * @since 2.7.9 */ public static PDFViewer newPDFViewer(Collection features) { JFrame bfoFrame = new JFrame("BFO"); bfoFrame.setIconImage(BFO16.getImage()); PDFViewer pdfViewer = new PDFViewer(features); bfoFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); bfoFrame.setContentPane(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.viewer2.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.viewer2.PDFViewer [<file>]"); return; } } try { String laf = UIManager.getSystemLookAndFeelClassName(); if (!"com.sun.java.swing.plaf.gtk.GTKLookAndFeel".equals(laf)) { UIManager.setLookAndFeel(laf); } } catch (Exception e) { } final File ffile = file; 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 + -