Class PDFViewer

  • All Implemented Interfaces:
    ImageObserver, MenuContainer, Serializable, Accessible, Scrollable

    public class PDFViewer
    extends JPanel
    implements Scrollable

    The PDFViewer class is a simple Swing PDF viewer application. It demonstrates the DocumentPanel class, and can be run directly from the JAR (via the PDFTool class) like so.

     java -jar bfopdf.jar filename
     

    The filename argument is optional, but if supplied will load the specified PDF.

    The viewer is also a Swing component, and can be used like any other JComponent by adding it to a Swing hierarchy. All of the operations on the PDFViewer object (and any of the objects it references, like features, DocumentPanels and so on) require that the viewer has been added to the Swing a hierarchy. Attempting to use any of these features will fail

    See the viewer tutorial for more detail on how to use this class and the "viewer" package.

    The following initialization parameters may be specified
    currentUserThe name of the current user - optional, but if set this will be set as the author field on any annotations created by the user
    unpromptedDirtyCloseWhether to prompt the user for confirmation when closing a window containng a PDF that has been modified
    dpiThe resolution of the screen. This can be set to override Toolkit.getScreenResolution() if required
    fontScaleThe factor by which to multiply all fonts used in Swing (note: this will affect all components, not just those in the PDF viewer)
    AuthenticatorThe class name of the default Authenticator to use. If not specified, defaults to our PromptingAuthenticator which will prompt for HTTP passwords via a Swing dialog. It can be set to any classname, or null to disable the authenticator.
    PromptingAuthenticator.NegotiateIf set to "false", the PromptingAuthenticator will not prompt for the "Negiate" family of URL authentication.

    This code is copyright the Big Faceless Organization. You're welcome to use, modify and distribute it in any form in your own projects, provided those projects continue to make use of the Big Faceless PDF library.

    Since:
    2.5, with major rewrites in 2.8
    See Also:
    Serialized Form
    • Method Detail

      • getPreferences

        public Preferences getPreferences()
        Return the Preferences object that should be used to store user preferences about the viewer, or null if preferences cannot be saved.
        Since:
        2.11
      • setPreferences

        public void setPreferences​(Preferences preferences)
        Set the Preferences object returned from getPreferences(). There's normally no reason to do this unless particularly don't want to use the normal system preferences in the viewer
        Since:
        2.18.2
      • getJSManager

        public JSManager getJSManager()
        Return the JSManager object for this PDFViewer.
        Since:
        2.9
      • setPropertyManager

        public final void setPropertyManager​(PropertyManager manager)
        Set the PropertyManager in use by this PDFViewer
        Since:
        2.8.5
      • hasFeature

        public boolean hasFeature​(ViewerFeature feature)
        Return true if the Viewer has a certain feature enabled.
        Parameters:
        feature - the feature to look for
      • hasFeature

        public boolean hasFeature​(String feature)
        Return true if the Viewer has a certain feature enabled.
        Parameters:
        feature - the name of the feature to look for
      • getFeatures

        public ViewerFeature[] getFeatures()
        Return the list of all features set in the viewer
      • getFeature

        public ViewerFeature getFeature​(String feature)
        Return the ViewerFeature with the specified name, or null if it doesn't exist for this viewer.
        Parameters:
        feature - the name of the feature
        Since:
        2.8.5
      • getFeature

        public <T extends ViewerFeature> T getFeature​(Class<T> clazz)
        Return the first ViewerFeature of the specified class, or null if it doesn't exist for this viewer. For example
         PDFImporter importer = viewer.getFeature(PDFImporter.class);
         
        Parameters:
        clazz - the Class of the ViewerFeature.
        Since:
        2.10.2
      • setMenu

        public JMenuItem setMenu​(String name,
                                 char mnemonic,
                                 boolean documentrequired,
                                 ActionListener listener)
        Add or replace a menu item in the viewer. Since 2.13.1, if the supplied listener is an Action then the Action.NAME and Action.ACCELERATOR_KEY (if set) will override the name and mnemonic supplied here, and the documentrequired parameter will be ignored, as the Action is expected to manage it's own enabled state.
        Parameters:
        name - the name of the menu, if the form "File\tOpen" or "File\tQuit(999)". The tab character is used to separate the items in the menu hierarchy, and the optional bracketed value is used to control ordering in the menu.
        mnemonic - the mnemonic to assign to this menu - lowercase or uppercase letter, or (char)0 for no mnenonic
        documentrequired - whether this menu item should only be enabled if a document is loaded
        listener - the ActionListener to run when this menu item is activated
        Since:
        2.10.2
      • getMenu

        public JMenu getMenu​(String name)
        Return the specified Menu. If the menu doesn't exist, it's created
        Parameters:
        name - the name of the Menu, before it's been localized
        Since:
        2.10.4
      • putNamedComponent

        public void putNamedComponent​(String name,
                                      JComponent value)
        Add a named component to the viewers list
        Since:
        2.10.2
      • loadPDF

        public void loadPDF​(File ffile)
        Load a PDF into the viewer from a file. This method will search the Importer objects in order until it finds one that matches the file, then will use that to load the PDF into the viewer. Prompting for passwords etc. is left to the appropriate Importer - see the PDFImporter class for details on the default behaviour.
        Parameters:
        ffile - the PDF file to load, or null to select it with a chooser
        Since:
        2.7.1
      • loadPDF

        public void loadPDF​(File file,
                            int pagenumber)
        Load a PDF into the viewer from a file. This method will search the Importer objects in order until it finds one that matches the file, then will use that to load the PDF into the viewer. Prompting for passwords etc. is left to the appropriate Importer - see the PDFImporter class for details on the default behaviour.
        Parameters:
        file - the PDF file to load, or null to select it with a chooser
        pagenumber - the initial page number to request. May be overridden
        Since:
        2.11.10
      • loadPDF

        @Deprecated
        public void loadPDF​(File file,
                            EncryptionHandler handler)
        Deprecated.
        this method has been superceded by the PDFImporter class
        Load a PDF into the viewer from a file using the specified EncryptionHandler. This method is now deprecated - the correct way to load a PDF with custom EncryptionHandlers is to modify the PDFImporter passed in to the PDF Constructor.
        Parameters:
        file - the PDF File
        handler - the EncryptionHandler to use
        Since:
        2.8
      • loadPDF

        @Deprecated
        public void loadPDF​(File file,
                            EncryptionHandler[] handlers)
        Deprecated.
        this method has been superceded by the PDFImporter class
        Load a PDF into the viewer from a file using the specified list of EncryptionHandler. This method is now deprecated - the correct way to load a PDF with custom EncryptionHandlers is to modify the PDFImporter passed in to the PDF Constructor.
        Parameters:
        file - the PDF File
        handlers - the list of EncryptionHandlers
        Since:
        2.8
      • loadPDF

        @Deprecated
        public void loadPDF​(InputStream in,
                            EncryptionHandler[] handlers,
                            String title,
                            File file)
        Deprecated.
        this method has been superceded by the PDFImporter class

        Load a PDF into the viewer from an InputStream. Note that this method will return immediately, which means the calling thread must not close the InputStream. Doing so will result in an Exception. The stream will be closed by the reading thread when it is completed.

        This method is now deprecated - the correct way to load a PDF from an InputStream is to call the Importer.getImporter(PDFViewer, InputStream, String, File) method. For example:

         PDFImporter importer = viewer.getFeature(PDFImporter.class);
         importer.getImporter(viewer, inputstream, title, file).start(viewer, "Loading");
         
        Parameters:
        in - the InputStream to load the PDF from
        handlers - the EncryptionHandlers to use to try to decrypt the PDF
        title - The name of the Window. May be null.
        file - If using a save dialog, the initial value to set the dialog to. May be null.
        Since:
        2.8.3
      • loadPDF

        public void loadPDF​(URL url)
                     throws IOException
        Load a PDF into the viewer from a URL. If the URL contains a fragment which is a valid page number, that page will be selected on load.
        Parameters:
        url - the URL to load
        Throws:
        IOException
        Since:
        2.14
        See Also:
        PDFImporter
      • loadPDF

        public void loadPDF​(PDF pdf,
                            String name)
        Load a pre-loaded PDF into the viewer. Simply calls loadPDF(new PDFParser(pdf), name).
        Parameters:
        pdf - the PDF to load
        name - the name of the PDF, to display in the title bar.
        Since:
        2.7.1
      • loadPDF

        public void loadPDF​(PDFParser parser,
                            String name)
        Load a pre-loaded PDF into the viewer.
        Parameters:
        parser - the PDFParser referencing the PDF to load
        name - the name of the PDF, to display in the title bar.
        Since:
        2.11.3
      • loadPDF

        public void loadPDF​(PDFParser parser,
                            String name,
                            int pagenumber)
        Load a pre-loaded PDF into the viewer.
        Parameters:
        parser - the PDFParser referencing the PDF to load
        name - the name of the PDF, to display in the title bar.
        pagenumber - the initial page to display
        Since:
        2.11.3
      • loadPDF

        public void loadPDF​(PDFParser parser,
                            String name,
                            int pagenumber,
                            File file,
                            boolean addtomostrecent,
                            DocumentPanelListener listener)
        Load a pre-loaded PDF into the viewer.
        Parameters:
        parser - the PDFParser referencing the PDF to load
        name - the name of the PDF, to display in the title bar
        pagenumber - the initial page to display
        file - the file to pass to DocumentPanel.setAssociatedFile(java.io.File, boolean). May be null.
        addtomostrecent - whether to add the File containing the PDF to the list of recently opened files
        listener - an optional callback object. If specified, this listener will be called with a "created" DocumentPanelEvent specifying the DocumentPanel created by this method. The listener will not be added to the PDFViewer's list, and the event will not be fired in the normal way to those listener. This approach can be used to run a one-off action on the panel immediately when it's created, without needing to add listeners and wait for the event to be fired.
        Since:
        2.18.1
      • isClosing

        public boolean isClosing()
        Return true if the close() method has been called on the PDFViewer
      • close

        public void close()
        Close the PDFViewer. Should be called before this PDFViewer is permanently removed from the Swing object hierarchy.
        Since:
        2.11.18
      • newPDFViewer

        public static PDFViewer newPDFViewer()
        Create a new PDFViewer object in a frame of it's own. Top level routine to be called by main()
        Since:
        2.7..1
      • newPDFViewer

        public static PDFViewer newPDFViewer​(Collection<ViewerFeature> features)
        Create a new PDFViewer object in a frame of its own with the specified features.
        Parameters:
        features - a Collection of ViewerFeature objects that are to be supported
        Since:
        2.7.9
        See Also:
        ViewerFeature
      • main

        public static void main​(String[] args)
        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
      • setCurrentUser

        public void setCurrentUser​(String user)
        Set the name of the current user (for Annotations). The default is null. Can also be set by the currentUser initialization parameter
        Since:
        2.11.18
      • setUnpromptedDirtyClose

        public void setUnpromptedDirtyClose​(boolean ignore)
        Set whether to allow a window containing a modified PDF to be closed without prompting. Can also be set by the unpromptedDirtyClose initialization parameter
        Since:
        2.11.19
      • getMinZoom

        public int getMinZoom()
        Returns the minimum zoom level that should be used.
        Since:
        2.18
      • getMaxZoom

        public int getMaxZoom()
        Returns the maximum zoom level that should be used.
        Since:
        2.18
      • setZoomRange

        public void setZoomRange​(int min,
                                 int max)
        Set the minumum and maximum zoom values. Requires 1 <= min <= max <= 9999.
        Parameters:
        min - the minimum zoom level - the default is 1
        max - the minimum zoom level - the default is 9999
        Since:
        2.18
      • getZoomIntervals

        public int[] getZoomIntervals()
        Returns the zoom intervals that should be used to increase or decrease zoom level.
        Since:
        2.18
      • setZoomIntervals

        public void setZoomIntervals​(int[] intervals)
        Set the list of zoom intervals that should be used to increase or decrease zoom level. The list must be >= 1 item long, in ascending order, and all values must fall between min and max as set by setZoomRange(int, int)
        Parameters:
        intervals - the list of zoom intervals
        Since:
        2.18