You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2021/09/22 18:37:57 UTC

svn commit: r1893518 - in /pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger: PDFDebugger.java ui/FileOpenSaveDialog.java

Author: tilman
Date: Wed Sep 22 18:37:57 2021
New Revision: 1893518

URL: http://svn.apache.org/viewvc?rev=1893518&view=rev
Log:
PDFBOX-2941: add "Save as..." menu item and implementation

Modified:
    pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
    pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java

Modified: pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1893518&r1=1893517&r2=1893518&view=diff
==============================================================================
--- pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java (original)
+++ pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java Wed Sep 22 18:37:57 2021
@@ -168,7 +168,6 @@ public class PDFDebugger extends JFrame
     
     // file menu
     private JMenuItem saveAsMenuItem;
-    private JMenuItem saveMenuItem;
     private JMenu recentFilesMenu;
     private JMenuItem printMenuItem;
     private JMenu printDpiMenu;
@@ -418,6 +417,18 @@ public class PDFDebugger extends JFrame
         addRecentFileItems();
         fileMenu.add(recentFilesMenu);
 
+        saveAsMenuItem = new JMenuItem("Save as...");
+        saveAsMenuItem.addActionListener(new ActionListener()
+        {
+            @Override
+            public void actionPerformed(ActionEvent evt)
+            {
+                saveAsMenuItemActionPerformed(evt);
+            }
+        });
+        saveAsMenuItem.setEnabled(false);        
+        fileMenu.add(saveAsMenuItem);
+
         printMenuItem = new JMenuItem("Print");
         printMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, SHORCUT_KEY_MASK));
         printMenuItem.setEnabled(false);
@@ -642,6 +653,43 @@ public class PDFDebugger extends JFrame
         exitMenuItemActionPerformed(null);
     }
 
+    private void saveAsMenuItemActionPerformed(ActionEvent evt)
+    {
+        try
+        {
+            if (IS_MAC_OS)
+            {
+                FileDialog openDialog = new FileDialog(this, "Save", FileDialog.SAVE);
+                openDialog.setFilenameFilter(new FilenameFilter()
+                {
+                    @Override
+                    public boolean accept(File dir, String name)
+                    {
+                        return name.toLowerCase().endsWith(".pdf");
+                    }
+                });
+                openDialog.setVisible(true);
+                String file = openDialog.getFile();
+                if (file != null)
+                {
+                    document.setAllSecurityToBeRemoved(true);
+                    document.save(file);
+                }
+            }
+            else
+            {
+                String[] extensions = new String[] { "pdf", "PDF" };
+                FileFilter pdfFilter = new ExtensionFileFilter(extensions, "PDF Files (*.pdf)");
+                FileOpenSaveDialog saveAsDialog = new FileOpenSaveDialog(this, pdfFilter);
+                saveAsDialog.saveDocument(document, "pdf");
+            }
+        }
+        catch (IOException e)
+        {
+            new ErrorDialog(e).setVisible(true);
+        }
+    }
+
     private void openMenuItemActionPerformed(ActionEvent evt)
     {
         try
@@ -1306,6 +1354,7 @@ public class PDFDebugger extends JFrame
         printMenuItem.setEnabled(true);
         printDpiMenu.setEnabled(true);
         reopenMenuItem.setEnabled(true);
+        saveAsMenuItem.setEnabled(true);
         
         initTree();
         
@@ -1344,6 +1393,7 @@ public class PDFDebugger extends JFrame
         document = documentOpener.parse();
         printMenuItem.setEnabled(true);
         reopenMenuItem.setEnabled(true);
+        saveAsMenuItem.setEnabled(true);
 
         initTree();
 

Modified: pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java?rev=1893518&r1=1893517&r2=1893518&view=diff
==============================================================================
--- pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java (original)
+++ pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java Wed Sep 22 18:37:57 2021
@@ -24,6 +24,7 @@ import java.io.IOException;
 import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
 import javax.swing.filechooser.FileFilter;
+import org.apache.pdfbox.pdmodel.PDDocument;
 
 /**
  * @author Khyrul Bashar
@@ -102,6 +103,31 @@ public class FileOpenSaveDialog
             return true;
         }
         return false;
+    }
+
+    /**
+     * Saves document into a .pdf file after the user is prompted to choose the destination.
+     *
+     * @param document document to be saved in a .pdf file.
+     * @param extension file extension.
+     * @return true if the file is saved successfully or false if failed.
+     * @throws IOException if there is an error in creation of the file.
+     */
+    public boolean saveDocument(PDDocument document, String extension) throws IOException
+    {
+        int result = FILE_CHOOSER.showSaveDialog(mainUI);
+        if (result == JFileChooser.APPROVE_OPTION)
+        {
+            String filename = FILE_CHOOSER.getSelectedFile().getAbsolutePath();
+            if (!filename.endsWith(extension))
+            {
+                filename += "." + extension;
+            }
+            document.setAllSecurityToBeRemoved(true);
+            document.save(filename);
+            return true;
+        }
+        return false;
     }
 
     /**