You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/02/25 22:50:40 UTC

svn commit: r1571839 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox: PDFReader.java pdfviewer/

Author: jahewson
Date: Tue Feb 25 21:50:39 2014
New Revision: 1571839

URL: http://svn.apache.org/r1571839
Log:
Reduce PDFReader to a single file

Removed:
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/pdfviewer/
Modified:
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/PDFReader.java

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/PDFReader.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/PDFReader.java?rev=1571839&r1=1571838&r2=1571839&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/PDFReader.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/PDFReader.java Tue Feb 25 21:50:39 2014
@@ -16,6 +16,9 @@
  */
 package org.apache.pdfbox;
 
+import java.awt.Dimension;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionListener;
 import java.awt.image.BufferedImage;
 import java.awt.print.PrinterException;
 import java.awt.print.PrinterJob;
@@ -24,12 +27,17 @@ import java.io.IOException;
 import java.util.List;
 
 import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.KeyStroke;
+import javax.swing.border.LineBorder;
 
 import org.apache.pdfbox.exceptions.InvalidPasswordException;
-import org.apache.pdfbox.pdfviewer.PageWrapper;
+import org.apache.pdfbox.pdfviewer.PDFPagePanel;
 import org.apache.pdfbox.pdfviewer.ReaderBottomPanel;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
@@ -39,23 +47,21 @@ import org.apache.pdfbox.util.ImageIOUti
 import org.apache.pdfbox.util.RenderUtil;
 
 /**
- * An application to read PDF documents. This will provide Acrobat Reader like funtionality.
- * 
- * @author <a href="ben@benlitchfield.com">Ben Litchfield</a>
- * 
+ * An proof-of-concept application to read PDF documents, with very basic functionality.
+ * @author Ben Litchfield
  */
-public class PDFReader extends javax.swing.JFrame
+public class PDFReader extends JFrame
 {
     private File currentDir = new File(".");
-    private javax.swing.JMenuItem saveAsImageMenuItem;
-    private javax.swing.JMenuItem exitMenuItem;
-    private javax.swing.JMenu fileMenu;
-    private javax.swing.JMenuBar menuBar;
-    private javax.swing.JMenuItem openMenuItem;
-    private javax.swing.JMenuItem printMenuItem;
-    private javax.swing.JMenu viewMenu;
-    private javax.swing.JMenuItem nextPageItem;
-    private javax.swing.JMenuItem previousPageItem;
+    private JMenuItem saveAsImageMenuItem;
+    private JMenuItem exitMenuItem;
+    private JMenu fileMenu;
+    private JMenuBar menuBar;
+    private JMenuItem openMenuItem;
+    private JMenuItem printMenuItem;
+    private JMenu viewMenu;
+    private JMenuItem nextPageItem;
+    private JMenuItem previousPageItem;
     private JPanel documentPanel = new JPanel();
     private ReaderBottomPanel bottomStatusPanel = new ReaderBottomPanel();
 
@@ -78,21 +84,18 @@ public class PDFReader extends javax.swi
         initComponents();
     }
 
-    /**
-     * This method is called from within the consructor to initialize the form.
-     * 
-     */
+    // This method is called from within the consructor to initialize the form.
     private void initComponents()
     {
-        menuBar = new javax.swing.JMenuBar();
-        fileMenu = new javax.swing.JMenu();
-        openMenuItem = new javax.swing.JMenuItem();
-        saveAsImageMenuItem = new javax.swing.JMenuItem();
-        exitMenuItem = new javax.swing.JMenuItem();
-        printMenuItem = new javax.swing.JMenuItem();
-        viewMenu = new javax.swing.JMenu();
-        nextPageItem = new javax.swing.JMenuItem();
-        previousPageItem = new javax.swing.JMenuItem();
+        menuBar = new JMenuBar();
+        fileMenu = new JMenu();
+        openMenuItem = new JMenuItem();
+        saveAsImageMenuItem = new JMenuItem();
+        exitMenuItem = new JMenuItem();
+        printMenuItem = new JMenuItem();
+        viewMenu = new JMenu();
+        nextPageItem = new JMenuItem();
+        previousPageItem = new JMenuItem();
 
         setTitle("PDFBox - PDF Reader");
         addWindowListener(new java.awt.event.WindowAdapter()
@@ -271,8 +274,8 @@ public class PDFReader extends javax.swi
     }
 
     /**
+     * Entry point.
      * @param args the command line arguments
-     * 
      * @throws Exception If anything goes wrong.
      */
     public static void main(String[] args) throws Exception
@@ -356,7 +359,8 @@ public class PDFReader extends javax.swi
                 imageFilename = imageFilename.substring(0, imageFilename.length() - 4);
             }
             imageFilename += "_" + (currentPage + 1);
-            ImageIOUtil.writeImage(pageAsImage, "png", imageFilename, BufferedImage.TYPE_USHORT_565_RGB, 300);
+            ImageIOUtil.writeImage(pageAsImage, "png", imageFilename,
+                                   BufferedImage.TYPE_USHORT_565_RGB, 300);
         }
         catch (IOException exception)
         {
@@ -364,13 +368,6 @@ public class PDFReader extends javax.swi
         }
     }
 
-    /**
-     * This will parse a document.
-     * 
-     * @param input The input stream for the document.
-     * 
-     * @throws IOException If there is an error parsing the document.
-     */
     private void parseDocument(File file, String password) throws IOException
     {
         document = null;
@@ -401,7 +398,6 @@ public class PDFReader extends javax.swi
 
     /**
      * Get the bottom status panel.
-     * 
      * @return The bottom status panel.
      */
     public ReaderBottomPanel getBottomStatusPanel()
@@ -409,9 +405,6 @@ public class PDFReader extends javax.swi
         return bottomStatusPanel;
     }
 
-    /**
-     * This will print out a message telling how to use this utility.
-     */
     private static void usage()
     {
         System.err.println("usage: java -jar pdfbox-app-x.y.z.jar PDFReader [OPTIONS] <input-file>\n"
@@ -420,4 +413,69 @@ public class PDFReader extends javax.swi
                 + "  <input-file>              The PDF document to be loaded\n");
     }
 
+    /**
+     * A class to handle some prettyness around a single PDF page.
+     * @author Ben Litchfield
+     */
+    private static class PageWrapper implements MouseMotionListener
+    {
+        private JPanel pageWrapper = new JPanel();
+        private PDFPagePanel pagePanel = null;
+        private PDFReader reader = null;
+
+        private static final int SPACE_AROUND_DOCUMENT = 20;
+
+        /**
+         * Constructor.
+         * @param aReader The reader application that holds this page.
+         * @throws IOException If there is an error creating the page drawing objects.
+         */
+        public PageWrapper(PDFReader aReader) throws IOException
+        {
+            reader = aReader;
+            pagePanel = new PDFPagePanel();
+            pageWrapper.setLayout(null);
+            pageWrapper.add(pagePanel);
+            pagePanel.setLocation(SPACE_AROUND_DOCUMENT, SPACE_AROUND_DOCUMENT);
+            pageWrapper.setBorder(LineBorder.createBlackLineBorder());
+            pagePanel.addMouseMotionListener(this);
+        }
+
+        /**
+         * This will display the PDF page in this component.
+         * @param page The PDF page to display.
+         */
+        public void displayPage(PDPage page)
+        {
+            pagePanel.setPage(page);
+            pagePanel.setPreferredSize(pagePanel.getSize());
+            Dimension d = pagePanel.getSize();
+            d.width+=(SPACE_AROUND_DOCUMENT*2);
+            d.height+=(SPACE_AROUND_DOCUMENT*2);
+
+            pageWrapper.setPreferredSize(d);
+            pageWrapper.validate();
+        }
+
+        /**
+         * This will get the JPanel that can be displayed.
+         * @return The panel with the displayed PDF page.
+         */
+        public JPanel getPanel()
+        {
+            return pageWrapper;
+        }
+
+        @Override
+        public void mouseDragged(MouseEvent e)
+        {
+            //do nothing when mouse moves.
+        }
+
+        @Override
+        public void mouseMoved(MouseEvent e)
+        {
+            reader.getBottomStatusPanel().getStatusLabel().setText(e.getX() + "," + e.getY());
+        }
+    }
 }