1 31 package org.pdfbox; 32 33 import org.pdfbox.exceptions.InvalidPasswordException; 34 35 import org.pdfbox.pdfviewer.PDFTreeModel; 36 import org.pdfbox.pdfviewer.PDFTreeCellRenderer; 37 import org.pdfbox.pdfviewer.ArrayEntry; 38 import org.pdfbox.pdfviewer.MapEntry; 39 40 import org.pdfbox.pdmodel.PDDocument; 41 42 import org.pdfbox.util.ExtensionFileFilter; 43 44 import org.pdfbox.cos.COSBoolean; 45 import org.pdfbox.cos.COSFloat; 46 import org.pdfbox.cos.COSInteger; 47 import org.pdfbox.cos.COSName; 48 import org.pdfbox.cos.COSNull; 49 import org.pdfbox.cos.COSStream; 50 import org.pdfbox.cos.COSString; 51 52 import javax.swing.tree.TreeModel ; 54 import javax.swing.tree.TreePath ; 55 import javax.swing.JFileChooser ; 56 import javax.swing.JScrollPane ; 57 import javax.swing.JPanel ; 58 59 import java.io.ByteArrayOutputStream ; 60 import java.io.File ; 61 import java.io.FileInputStream ; 62 import java.io.InputStream ; 63 import java.io.IOException ; 64 65 71 public class PDFDebugger extends javax.swing.JFrame 72 { 73 private File currentDir=new File ("."); 74 75 78 public PDFDebugger() 79 { 80 initComponents(); 81 } 82 83 89 private void initComponents() 90 { 91 jSplitPane1 = new javax.swing.JSplitPane (); 92 jScrollPane1 = new javax.swing.JScrollPane (); 93 jTree1 = new javax.swing.JTree (); 94 jScrollPane2 = new javax.swing.JScrollPane (); 95 jTextPane1 = new javax.swing.JTextPane (); 96 menuBar = new javax.swing.JMenuBar (); 97 fileMenu = new javax.swing.JMenu (); 98 openMenuItem = new javax.swing.JMenuItem (); 99 saveMenuItem = new javax.swing.JMenuItem (); 100 saveAsMenuItem = new javax.swing.JMenuItem (); 101 exitMenuItem = new javax.swing.JMenuItem (); 102 editMenu = new javax.swing.JMenu (); 103 cutMenuItem = new javax.swing.JMenuItem (); 104 copyMenuItem = new javax.swing.JMenuItem (); 105 pasteMenuItem = new javax.swing.JMenuItem (); 106 deleteMenuItem = new javax.swing.JMenuItem (); 107 helpMenu = new javax.swing.JMenu (); 108 contentsMenuItem = new javax.swing.JMenuItem (); 109 aboutMenuItem = new javax.swing.JMenuItem (); 110 111 jTree1.setCellRenderer( new PDFTreeCellRenderer() ); 112 jTree1.setModel( null ); 113 114 setTitle("PDFBox - PDF Viewer"); 115 addWindowListener(new java.awt.event.WindowAdapter () 116 { 117 public void windowClosing(java.awt.event.WindowEvent evt) 118 { 119 exitForm(evt); 120 } 121 }); 122 123 124 jScrollPane1.setBorder(new javax.swing.border.BevelBorder (javax.swing.border.BevelBorder.RAISED)); 125 jScrollPane1.setPreferredSize(new java.awt.Dimension (300, 500)); 126 jTree1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener () 127 { 128 public void valueChanged(javax.swing.event.TreeSelectionEvent evt) 129 { 130 jTree1ValueChanged(evt); 131 } 132 }); 133 134 jScrollPane1.setViewportView(jTree1); 135 136 jSplitPane1.setRightComponent(jScrollPane2); 137 138 jScrollPane2.setPreferredSize(new java.awt.Dimension (300, 500)); 139 jScrollPane2.setViewportView(jTextPane1); 140 141 jSplitPane1.setLeftComponent(jScrollPane1); 142 143 JScrollPane documentScroller = new JScrollPane (); 144 documentScroller.setViewportView( documentPanel ); 146 147 getContentPane().add( jSplitPane1, java.awt.BorderLayout.CENTER ); 148 149 fileMenu.setText("File"); 150 openMenuItem.setText("Open"); 151 openMenuItem.setToolTipText("Open PDF file"); 152 openMenuItem.addActionListener(new java.awt.event.ActionListener () 153 { 154 public void actionPerformed(java.awt.event.ActionEvent evt) 155 { 156 openMenuItemActionPerformed(evt); 157 } 158 }); 159 160 fileMenu.add(openMenuItem); 161 162 saveMenuItem.setText("Save"); 163 165 saveAsMenuItem.setText("Save As ..."); 166 168 exitMenuItem.setText("Exit"); 169 exitMenuItem.addActionListener(new java.awt.event.ActionListener () 170 { 171 public void actionPerformed(java.awt.event.ActionEvent evt) 172 { 173 exitMenuItemActionPerformed(evt); 174 } 175 }); 176 177 fileMenu.add(exitMenuItem); 178 179 menuBar.add(fileMenu); 180 181 editMenu.setText("Edit"); 182 cutMenuItem.setText("Cut"); 183 editMenu.add(cutMenuItem); 184 185 copyMenuItem.setText("Copy"); 186 editMenu.add(copyMenuItem); 187 188 pasteMenuItem.setText("Paste"); 189 editMenu.add(pasteMenuItem); 190 191 deleteMenuItem.setText("Delete"); 192 editMenu.add(deleteMenuItem); 193 194 196 helpMenu.setText("Help"); 197 contentsMenuItem.setText("Contents"); 198 helpMenu.add(contentsMenuItem); 199 200 aboutMenuItem.setText("About"); 201 helpMenu.add(aboutMenuItem); 202 203 205 setJMenuBar(menuBar); 206 207 208 java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 209 setBounds((screenSize.width-700)/2, (screenSize.height-600)/2, 700, 600); 210 } 212 private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) 213 { 214 JFileChooser chooser = new JFileChooser (); 215 chooser.setCurrentDirectory(currentDir); 216 217 ExtensionFileFilter pdfFilter = new ExtensionFileFilter(new String [] {"pdf", "PDF"}, "PDF Files"); 218 chooser.setFileFilter(pdfFilter); 219 int result = chooser.showOpenDialog(PDFDebugger.this); 220 if (result == JFileChooser.APPROVE_OPTION) 221 { 222 String name = chooser.getSelectedFile().getPath(); 223 currentDir = new File (name).getParentFile(); 224 try 225 { 226 readPDFFile(name); 227 } 228 catch (Exception e) 229 { 230 e.printStackTrace(); 231 } 232 } 233 } 235 private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) 236 { 237 TreePath path = jTree1.getSelectionPath(); 238 if (path != null) 239 { 240 try 241 { 242 Object selectedNode = path.getLastPathComponent(); 243 String data=convertToString(selectedNode); 244 245 246 247 if (data != null) 248 { 249 jTextPane1.setText(data); 250 } 251 else 252 { 253 jTextPane1.setText( "" ); 254 } 255 } 256 catch (Exception e) 257 { 258 e.printStackTrace(); 259 } 260 } 261 } 263 private String convertToString( Object selectedNode ) 264 { 265 String data = null; 266 if(selectedNode instanceof COSBoolean) 267 { 268 data = "" + ((COSBoolean)selectedNode).getValue(); 269 } 270 else if( selectedNode instanceof COSFloat ) 271 { 272 data = "" + ((COSFloat)selectedNode).floatValue(); 273 } 274 else if( selectedNode instanceof COSNull ) 275 { 276 data = "null"; 277 } 278 else if( selectedNode instanceof COSInteger ) 279 { 280 data = "" + ((COSInteger)selectedNode).intValue(); 281 } 282 else if( selectedNode instanceof COSName ) 283 { 284 data = "" + ((COSName)selectedNode).getName(); 285 } 286 else if( selectedNode instanceof COSString ) 287 { 288 data = "" + ((COSString)selectedNode).getString(); 289 } 290 else if( selectedNode instanceof COSStream ) 291 { 292 try 293 { 294 COSStream stream = (COSStream)selectedNode; 295 InputStream ioStream = stream.getUnfilteredStream(); 296 ByteArrayOutputStream byteArray = new ByteArrayOutputStream (); 297 byte[] buffer = new byte[1024]; 298 int amountRead = 0; 299 while( (amountRead = ioStream.read( buffer, 0, buffer.length ) ) != -1 ) 300 { 301 byteArray.write( buffer, 0, amountRead ); 302 } 303 data = byteArray.toString(); 304 } 305 catch( IOException e ) 306 { 307 e.printStackTrace(); 308 } 309 } 310 else if( selectedNode instanceof MapEntry ) 311 { 312 data = convertToString( ((MapEntry)selectedNode).getValue() ); 313 } 314 else if( selectedNode instanceof ArrayEntry ) 315 { 316 data = convertToString( ((ArrayEntry)selectedNode).getValue() ); 317 } 318 return data; 319 } 320 321 private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) 322 { 323 System.exit(0); 324 } 325 326 329 private void exitForm(java.awt.event.WindowEvent evt) 330 { 331 System.exit(0); 332 } 333 334 339 public static void main(String [] args) throws Exception 340 { 341 PDFDebugger viewer = new PDFDebugger(); 342 if( args.length >0 ) 343 { 344 viewer.readPDFFile( args[0] ); 345 } 346 viewer.show(); 347 } 348 349 private void readPDFFile(String file) throws Exception 350 { 351 InputStream input = null; 352 File f = new File ( file ); 353 input = new FileInputStream (f); 354 PDDocument document = parseDocument( input ); 355 TreeModel model=new PDFTreeModel(document); 356 jTree1.setModel(model); 357 setTitle( "PDFBox - " + f.getAbsolutePath() ); 358 366 } 367 376 private static PDDocument parseDocument( InputStream input )throws IOException 377 { 378 PDDocument document = PDDocument.load( input ); 379 if( document.isEncrypted() ) 380 { 381 try 382 { 383 document.decrypt( "" ); 384 } 385 catch( InvalidPasswordException e ) 386 { 387 System.err.println( "Error: The document is encrypted." ); 388 } 389 catch( org.pdfbox.exceptions.CryptographyException e ) 390 { 391 e.printStackTrace(); 392 } 393 } 394 395 return document; 396 } 397 private javax.swing.JMenuItem aboutMenuItem; 399 private javax.swing.JMenuItem contentsMenuItem; 400 private javax.swing.JMenuItem copyMenuItem; 401 private javax.swing.JMenuItem cutMenuItem; 402 private javax.swing.JMenuItem deleteMenuItem; 403 private javax.swing.JMenu editMenu; 404 private javax.swing.JMenuItem exitMenuItem; 405 private javax.swing.JMenu fileMenu; 406 private javax.swing.JMenu helpMenu; 407 private javax.swing.JScrollPane jScrollPane1; 408 private javax.swing.JScrollPane jScrollPane2; 409 private javax.swing.JSplitPane jSplitPane1; 410 private javax.swing.JTextPane jTextPane1; 411 private javax.swing.JTree jTree1; 412 private javax.swing.JMenuBar menuBar; 413 private javax.swing.JMenuItem openMenuItem; 414 private javax.swing.JMenuItem pasteMenuItem; 415 private javax.swing.JMenuItem saveAsMenuItem; 416 private javax.swing.JMenuItem saveMenuItem; 417 private JPanel documentPanel = new JPanel (); 418 420 } | Popular Tags |