Java tutorial
package com.santaanna.friendlyreader.pdfstod.GUI; /* PDFReader 1.6 Nyaste versionen. * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import org.apache.pdfbox.pdfviewer.ReaderBottomPanel; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.util.ExtensionFileFilter; import javax.swing.JFileChooser; import javax.swing.JScrollPane; import javax.swing.JPanel; import javax.swing.KeyStroke; import java.awt.print.PrinterException; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import java.util.List; import com.santaanna.friendlyreader.pdfstod.pdfstod3.PageWrapper; import com.santaanna.friendlyreader.pdfstod.pdfstod3.ReplaceStringStreamEngine; /** * An application to read PDF documents. This will provide Acrobat Reader like * funtionality. * * @author <a href="ben@benlitchfield.com">Ben Litchfield</a> * @version $Revision: 1.5 $ */ public class PDFReader extends javax.swing.JFrame { private File currentDir = new File("."); private javax.swing.JMenuItem aboutMenuItem; private javax.swing.JMenuItem contentsMenuItem; private javax.swing.JMenuItem exitMenuItem; private javax.swing.JMenu fileMenu; private javax.swing.JMenu helpMenu; 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; public SummarizerPanelPDF sumPan; public JPanel documentPanel = new JPanel(); public ReaderBottomPanel bottomStatusPanel = new ReaderBottomPanel(); public CogSumSim cogsumsim; // AH* xxx public AdobeReaderTester adobereadertester = new AdobeReaderTester(); public SummarizerPanelPDF getSummarizerPanel() { return sumPan; } public JPanel getDocumentPanel() { return documentPanel; } public void setCogSumSim(CogSumSim csi) { cogsumsim = csi; } public CogSumSim getCogSumSim() { return cogsumsim; } private static Boolean EasyReader; // AH* Visar om klassen anvnds med EasyReader. private PDDocument document = null; public List pages = null; public int currentPage = 0; private int numberOfPages = 0; private String currentFilename = null; private ReplaceStringStreamEngine rsse = null; private static String pdfname = ""; public static int sumslidval = 0; /** * Constructor. */ public PDFReader() { EasyReader = false; SkrivUt(4, "EasyReader = false."); initComponents(); //AH* Tillagt. try { rsse = new ReplaceStringStreamEngine(); } catch (java.io.IOException jiioe) { SkrivUt(0, "Kan inte initiera ReplaceStringStreamEngine"); } } /* Konstruktor fr anrop frn CogSumSim eller EasyReader. * */ public PDFReader(Boolean easyreader) { EasyReader = easyreader; initComponents(); //AH* Tillagt. try { rsse = new ReplaceStringStreamEngine(); } catch (java.io.IOException jiioe) { SkrivUt(0, "Kan inte initiera ReplaceStringStreamEngine"); } } /** * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { SkrivUt(4, "initComponents"); menuBar = new javax.swing.JMenuBar(); fileMenu = new javax.swing.JMenu(); openMenuItem = new javax.swing.JMenuItem(); exitMenuItem = new javax.swing.JMenuItem(); helpMenu = new javax.swing.JMenu(); contentsMenuItem = new javax.swing.JMenuItem(); aboutMenuItem = new javax.swing.JMenuItem(); printMenuItem = new javax.swing.JMenuItem(); viewMenu = new javax.swing.JMenu(); nextPageItem = new javax.swing.JMenuItem(); previousPageItem = new javax.swing.JMenuItem(); if (EasyReader) { SkrivUt(4, "EasyReader True, sumPan."); sumPan = new SummarizerPanelPDF(this, false); // AH* tillagd. } else { SkrivUt(4, "EasyReader False, sumPan."); sumPan = new SummarizerPanelPDF(this, true); // AH* tillagd. } sumPan.setSize(100, 30); // AH* tillagd. setTitle("PDFBox - PDF Reader"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitApplication(); } }); JScrollPane documentScroller = new JScrollPane(); documentScroller.setViewportView(documentPanel); getContentPane().add(sumPan, java.awt.BorderLayout.NORTH); // AH* SumPan. getContentPane().add(documentScroller, java.awt.BorderLayout.CENTER); getContentPane().add(bottomStatusPanel, java.awt.BorderLayout.SOUTH); fileMenu.setText("Arkiv"); openMenuItem.setText("ppna"); openMenuItem.setToolTipText("ppna PDF fil"); openMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openMenuItemActionPerformed(evt); } }); fileMenu.add(openMenuItem); printMenuItem.setText("Skriv Ut"); printMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { try { if (document != null) { document.print(); } } catch (PrinterException e) { e.printStackTrace(); } } }); fileMenu.add(printMenuItem); exitMenuItem.setText("Avsluta"); exitMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { exitApplication(); } }); fileMenu.add(exitMenuItem); menuBar.add(fileMenu); helpMenu.setText("Hjlp"); contentsMenuItem.setText("Innehll"); helpMenu.add(contentsMenuItem); aboutMenuItem.setText("Om..."); helpMenu.add(aboutMenuItem); viewMenu.setText("Visa"); nextPageItem.setText("Nsta sida"); nextPageItem.setAccelerator(KeyStroke.getKeyStroke('+')); nextPageItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nextPage(); } }); viewMenu.add(nextPageItem); previousPageItem.setText("Fregende sida"); previousPageItem.setAccelerator(KeyStroke.getKeyStroke('-')); previousPageItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { previousPage(); } }); viewMenu.add(previousPageItem); menuBar.add(viewMenu); menuBar.add(helpMenu); // AH* Avkommenterad. setJMenuBar(menuBar); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width - 700) / 2, (screenSize.height - 600) / 2, 700, 600); } /* PDFReaderMain anropar main i PDFReader klassen och lmnar * drmed ver kontrollen till detta program om anropet sker * frn EasyReader. */ public void PDFReaderMain() { try { if (EasyReader) { SkrivUt(4, "Exekvera main d EasyReader."); PDFReader.main(null); } } catch (java.lang.Exception jle) { SkrivUt(0, "Exception: PDFReader.main kunde inte exekveras."); } } /* SkrivUt styr om utskrift skall gras. */ public static void SkrivUt(int plats, String str) { switch (plats) { case 0: System.out.println(str); break; case 1: // System.out.println(str); break; case 2: // System.out.println(str); break; case 3: System.out.println(str); break; case 4: // System.out.println(str); break; case 5: System.out.println(str); break; case 6: System.out.println(str); break; case 7: System.out.println(str); break; default: System.out.println("Ingen match i Skrivut!"); break; } } // AH* Denna r borttagen i senare version! private void updateTitle() { setTitle("PDFBox - " + pdfname); // AH* currentFilename ); } public void nextPage() { if (currentPage < numberOfPages - 1) { currentPage++; int currtemp = currentPage + 1; sumPan.Sidantal.setText("" + currtemp + " Av " + numberOfPages); // updateTitle(); // AH* Borttagen i senare. showPage(currentPage); } } public void previousPage() { if (currentPage > 0) { int currtemp = currentPage; currentPage--; sumPan.Sidantal.setText("" + currtemp + " Av " + numberOfPages); // updateTitle(); // AH* Borttagen i senare. showPage(currentPage); } } private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(currentDir); ExtensionFileFilter pdfFilter = new ExtensionFileFilter(new String[] { "PDF" }, "PDF Files"); chooser.setFileFilter(pdfFilter); int result = chooser.showOpenDialog(PDFReader.this); if (result == JFileChooser.APPROVE_OPTION) { String name = chooser.getSelectedFile().getPath(); PrepareFile(name, false, false); // Andra argumentet anger om rsse skall anvndas! /* * Hr r koden kapad fr att ven kunna anvndas frn CogSumSim som * ocks anropar PrepareFile. currentDir = new File(name).getParentFile(); // AH* tillagd hantering av RSSE: xxx Hr kan vara fel! pdfname = name; // Spara namnet till senare! try { rsse = new ReplaceStringStreamEngine(); // AH* nyligen tillagd fr // att resetta rsse vid inlsning av ny fil! ***** Kan vara felet! rsse.doIt(name, "AHPrepout.pdf", false, 100, -1); // AH* Vid open skall ingen sammanfattning gras! } catch (java.io.IOException jaiie) { SkrivUt(0, "IOException i openMenuItemAction."); } catch (org.apache.pdfbox.exceptions.COSVisitorException cov) { SkrivUt(0, "COSVisitorException i openMenuItemAction."); } try { setTitle( "PDFBox - " + name); // AH* + f.getAbsolutePath() ); Flyttad hit. // AH* Nyare: openPDFFile("AHPrepout.pdf", 0); // AH* Tidigare vrde name. openPDFFile("AHPrepout.pdf"); // AH* Tidigare var 0 andra argumentet. // showPage( 0 ); } catch (Exception e) { e.printStackTrace(); } * */ } } /* PrepareFile metoden har extraherats fr att skapa ett API som EasyReader * kan anropa. */ public void PrepareFile(String filename, Boolean useRSSE, Boolean adobereader) { currentDir = new File(filename).getParentFile(); // AH* tillagd hantering av RSSE: xxx Hr kan vara fel! pdfname = filename; // Spara namnet till senare! if (useRSSE)// Skall filen bearbetas av rsse? { try { // SkrivUt(7, "useRSSE TRUE."); rsse = new ReplaceStringStreamEngine(); // AH* nyligen tillagd fr // att resetta rsse vid inlsning av ny fil! ***** Kan vara felet! rsse.doIt(filename, "AHPrepout.pdf", false, 100, -1); // AH* Vid open skall ingen sammanfattning gras! } catch (java.io.IOException jaiie) { SkrivUt(0, "IOException i openMenuItemAction."); } catch (org.apache.pdfbox.exceptions.COSVisitorException cov) { SkrivUt(0, "COSVisitorException i openMenuItemAction."); } try { setTitle("PDFBox - " + filename); // AH* + f.getAbsolutePath() ); Flyttad hit. // AH* Nyare: openPDFFile("AHPrepout.pdf", 0); // AH* Tidigare vrde name. if (!adobereader) openPDFFile("AHPrepout.pdf"); // AH* Tidigare var 0 andra argumentet. else { adobereadertester.executefile("AHPrepout.pdf"); // Kan ocks dlja PDFReader fnstret med // viewer.setVisible(true); } //Linkopia7 showPage(0); } catch (Exception e) { e.printStackTrace(); } } else // Ingen bearbetning med rsse anvnds. { try { // SkrivUt(7, "useRSSE FALSE."); setTitle("PDFBox - " + filename); // AH* + f.getAbsolutePath() ); Flyttad hit. // AH* Nyare: openPDFFile("AHPrepout.pdf", 0); // AH* Tidigare vrde name. if (!adobereader) openPDFFile(filename); // AH* Tidigare var 0 andra argumentet. else { adobereadertester.executefile(filename); // Kan ocks dlja PDFReader fnstret med // viewer.setVisible(true); } // showPage( 0 ); } catch (Exception e) { e.printStackTrace(); } } } // AH* Kan vara fel i nedanstende del! Anropas frn panelen d startknappen anv. public void UppdateraSammanfatta(int sumslidval, int nysida, int valdmening) { int valdsida = 0; // Sida med den valda meningen. if ((pdfname != null) && (pdfname != "")) { try { // Kanske terstlla rsse innan? if (rsse == null) // AH* senaste tillgget 120420. rsse = new ReplaceStringStreamEngine(); // AH* inlagd fr att testa om // programmet blir ok!+ ************* r detta OK??? SkrivUt(4, "Fre doIT i UppdateraSammanfatta."); if (sumslidval > 100) sumslidval = 100; rsse.doIt(pdfname, "AHPrepout.pdf", true, sumslidval, valdmening); SkrivUt(4, "Efter doIT i UppdateraSammanfatta."); // AH* Vid open skall ingen sammanfattning gras! // Ta reda p vad vald sida r! valdsida = ReplaceStringStreamEngine.valdsida; } catch (java.io.IOException jaiie) { SkrivUt(0, "IOException i openMenuItemAction."); } catch (org.apache.pdfbox.exceptions.COSVisitorException cov) { SkrivUt(0, "COSVisitorException i openMenuItemAction."); } try { // setTitle( "PDFBox - " + name); // AH* + f.getAbsolutePath() ); Flyttad hit. SkrivUt(4, "Fre openPDFFile i UppdateraSammanfatta."); openPDFFile("AHPrepout.pdf"); // AH* Tidigare name. Sid argument borta. SkrivUt(4, "Efter openPDFFile i UppdateraSammanfatta."); SkrivUt(4, ">>>>> ValdSida: " + valdsida); if ((valdsida != -1) && (valdmening != -1)) currentPage = valdsida; // Om en mening r vald, dess sida. else currentPage = nysida; if (cogsumsim != null) cogsumsim.showPage(currentPage); //AH* nytillagt. showPage(currentPage); } catch (Exception e) { e.printStackTrace(); } } } private void exitApplication() { try { if (document != null) { document.close(); } } catch (IOException io) { //do nothing because we are closing the application } this.setVisible(false); this.dispose(); } /** * @param args the command line arguments * * @throws Exception If anything goes wrong. */ public static void main(String[] args) throws Exception { SkrivUt(4, "Frst i main."); PDFReader viewer = new PDFReader(); SkrivUt(4, "Efter PDFReader() i main."); if (args.length > 0) { viewer.openPDFFile(args[0]); } if (!EasyReader) // AH* ! borttaget viewer.setVisible(true); // Felande rad! SkrivUt(4, "Sist."); } private void openPDFFile(String file) throws Exception { if (document != null) { document.close(); documentPanel.removeAll(); } InputStream input = null; File f = new File(file); input = new FileInputStream(f); document = parseDocument(input); pages = document.getDocumentCatalog().getAllPages(); numberOfPages = pages.size(); //AH* Sidantal till GUI: sumPan.Sidantal.setText("" + 1 + " Av " + numberOfPages); sumPan.sidnrantal = numberOfPages; currentFilename = f.getAbsolutePath(); // AH* Borttagen i senare version. currentPage = 0; updateTitle(); showPage(0); } public void showPage(int pageNumber) { int visadsida = pageNumber + 1; //AH* nytillagt. try { SkrivUt(4, "ShowPage i PDFReader."); currentPage = pageNumber; //AH* TIllagd fr att hlla reda p akt sida. PageWrapper wrapper = new PageWrapper(this); wrapper.displayPage((PDPage) pages.get(pageNumber)); // if (EasyReader) cogsumsim.setDocumentPanel( wrapper.getPanel()); //AH* // PageWrapper cswrapper = new PageWrapper(cogsumsim.easyreader); AH* // cogsumsim.wrapper.displayPage( (PDPage)pages.get(pageNumber) ); //AH* if (documentPanel.getComponentCount() > 0) { documentPanel.remove(0); if (EasyReader) // AH* tillagt. cogsumsim.getDocumentPanel().remove(0); } documentPanel.add(wrapper.getPanel()); if (EasyReader) // AH* tillagt. { cogsumsim.setDocumentPanel(documentPanel); // cogsumsim.getDocumentPanel().; } pack(); sumPan.Sidantal.setText("" + visadsida + " Av " + numberOfPages); // AH* nytt. } catch (IOException exception) { exception.printStackTrace(); } } /** * This will parse a document. * * @param input The input stream for the document. * * @return The document. * * @throws IOException If there is an error parsing the document. */ private static PDDocument parseDocument(InputStream input) throws IOException { PDDocument document = PDDocument.load(input); if (document.isEncrypted()) { try { document.decrypt(""); } catch (org.apache.pdfbox.exceptions.InvalidPasswordException e) { System.err.println("Error: The document is encrypted."); } catch (org.apache.pdfbox.exceptions.CryptographyException e) { e.printStackTrace(); } } return document; } /** * Get the bottom status panel. * * @return The bottom status panel. */ public ReaderBottomPanel getBottomStatusPanel() { return bottomStatusPanel; } }