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 2016/01/14 19:22:02 UTC
svn commit: r1724667 -
/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
Author: tilman
Date: Thu Jan 14 18:22:01 2016
New Revision: 1724667
URL: http://svn.apache.org/viewvc?rev=1724667&view=rev
Log:
PDFBOX-2941: password dialog for protected PDFs
Modified:
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1724667&r1=1724666&r2=1724667&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java Thu Jan 14 18:22:01 2016
@@ -47,11 +47,13 @@ import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
+import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
+import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.TransferHandler;
@@ -98,6 +100,7 @@ import org.apache.pdfbox.debugger.ui.Rot
import org.apache.pdfbox.debugger.ui.Tree;
import org.apache.pdfbox.debugger.ui.ZoomMenu;
import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.printing.PDFPageable;
/**
@@ -1217,7 +1220,33 @@ public class PDFDebugger extends JFrame
*/
private void parseDocument( File file, String password )throws IOException
{
- document = PDDocument.load(file, password);
+ while (true)
+ {
+ try
+ {
+ document = PDDocument.load(file, password);
+ }
+ catch (InvalidPasswordException ipe)
+ {
+ // https://stackoverflow.com/questions/8881213/joptionpane-to-get-password
+ JPanel panel = new JPanel();
+ JLabel label = new JLabel("Password:");
+ JPasswordField pass = new JPasswordField(10);
+ panel.add(label);
+ panel.add(pass);
+ String[] options = new String[] {"OK", "Cancel"};
+ int option = JOptionPane.showOptionDialog(null, panel, "Enter password",
+ JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE,
+ null, options, "");
+ if (option == 0)
+ {
+ password = new String(pass.getPassword());
+ continue;
+ }
+ throw ipe;
+ }
+ break;
+ }
printMenuItem.setEnabled(true);
}