Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package mergevoucher; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfCopy; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.PdfTextExtractor; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; /** * * @author test */ public class MainJFrame extends javax.swing.JFrame { private File pretreatmentFile; private File[] voucherFiles; private File[] daystatementFiles; /** * Creates new form MainJFrame */ public MainJFrame() { initComponents(); this.setTitle("??"); this.setLocation(100, 100); this.setResizable(false); //image img = new image( "/img/up15.png"); } /** * 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jInternalFrame1 = new javax.swing.JInternalFrame(); jFileChooser1 = new javax.swing.JFileChooser(); jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel1 = new javax.swing.JPanel(); jBtnPrepareFile = new javax.swing.JButton(); jTextFile = new javax.swing.JTextField(); jSeparator1 = new javax.swing.JSeparator(); jBtnDeletePages = new javax.swing.JButton(); jTextPageNumbers = new javax.swing.JTextField(); jSeparator2 = new javax.swing.JSeparator(); jBtnReplaceContent = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jTextOriginalContent = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); jTextNewContent = new javax.swing.JTextField(); jPanel2 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jBtnAddVoucherFiles = new javax.swing.JButton(); jBtnMergeVoucherFiles = new javax.swing.JButton(); jBtnDelDaystatementFiles = new javax.swing.JButton(); jBtnMerge = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); jBtnDelVoucherFiles = new javax.swing.JButton(); jBtnAddDaystatementFiles = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); jListDaystatementFile = new javax.swing.JList(); jScrollPane2 = new javax.swing.JScrollPane(); jListVoucherFile = new javax.swing.JList(); jInternalFrame1.setVisible(true); javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout( jInternalFrame1.getContentPane()); jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout); jInternalFrame1Layout.setHorizontalGroup(jInternalFrame1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 0, Short.MAX_VALUE)); jInternalFrame1Layout.setVerticalGroup(jInternalFrame1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 0, Short.MAX_VALUE)); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setIconImage(this.getToolkit().getImage(getClass().getResource("img/icon.png"))); jTabbedPane1.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnPrepareFile.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnPrepareFile.setText("..."); jBtnPrepareFile.setToolTipText(""); jBtnPrepareFile.setName("jBtnPrepareFile"); // NOI18N jBtnPrepareFile.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jBtnPrepareFileMouseClicked(evt); } }); jBtnPrepareFile.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jBtnPrepareFileActionPerformed(evt); } }); jTextFile.setFont(new java.awt.Font("", 0, 12)); // NOI18N jTextFile.setToolTipText(""); jBtnDeletePages.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnDeletePages.setLabel(""); jBtnDeletePages.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jBtnDeletePagesActionPerformed(evt); } }); jTextPageNumbers.setFont(new java.awt.Font("", 0, 12)); // NOI18N jTextPageNumbers.setToolTipText("?"); jBtnReplaceContent.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnReplaceContent.setText("?"); jBtnReplaceContent.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jBtnReplaceContentActionPerformed(evt); } }); jLabel3.setFont(new java.awt.Font("", 0, 12)); // NOI18N jLabel3.setText(""); jLabel3.setToolTipText(""); jTextOriginalContent.setFont(new java.awt.Font("", 0, 12)); // NOI18N jTextOriginalContent.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jTextOriginalContentActionPerformed(evt); } }); jLabel4.setFont(new java.awt.Font("", 0, 12)); // NOI18N jLabel4.setText("?"); jLabel4.setToolTipText(""); jTextNewContent.setFont(new java.awt.Font("", 0, 12)); // NOI18N jTextNewContent.setToolTipText(""); jTextNewContent.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jTextNewContentActionPerformed(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGap(33, 33, 33).addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jBtnPrepareFile, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jBtnDeletePages, javax.swing.GroupLayout.DEFAULT_SIZE, 206, Short.MAX_VALUE) .addComponent(jBtnReplaceContent, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(24, 24, 24) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTextFile, javax.swing.GroupLayout.PREFERRED_SIZE, 466, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jTextPageNumbers, javax.swing.GroupLayout.PREFERRED_SIZE, 466, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(35, 35, 35)) .addGroup(jPanel1Layout.createSequentialGroup().addGap(70, 70, 70) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel3).addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jTextNewContent, javax.swing.GroupLayout.DEFAULT_SIZE, 609, Short.MAX_VALUE) .addComponent(jTextOriginalContent)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(jSeparator2, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING)); jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGap(51, 51, 51) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jBtnPrepareFile).addComponent(jTextFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(39, 39, 39) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(42, 42, 42) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jBtnDeletePages).addComponent(jTextPageNumbers, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 49, Short.MAX_VALUE) .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(34, 34, 34).addComponent(jBtnReplaceContent).addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextOriginalContent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3)) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4).addComponent(jTextNewContent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(47, 47, 47))); jTabbedPane1.addTab("?", jPanel1); jLabel1.setFont(new java.awt.Font("", 0, 14)); // NOI18N jLabel1.setText("??"); jLabel2.setFont(new java.awt.Font("", 0, 14)); // NOI18N jLabel2.setText("??"); jBtnAddVoucherFiles.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnAddVoucherFiles.setText("?"); jBtnAddVoucherFiles.setToolTipText(""); jBtnAddVoucherFiles.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jBtnAddVoucherFilesActionPerformed(evt); } }); jBtnMergeVoucherFiles.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnMergeVoucherFiles.setText("??"); jBtnMergeVoucherFiles.setToolTipText(""); jBtnDelDaystatementFiles.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnDelDaystatementFiles.setText("?"); jBtnDelDaystatementFiles.setToolTipText(""); jBtnMerge.setFont(new java.awt.Font("", 0, 14)); // NOI18N jBtnMerge.setText("???"); jBtnMerge.setToolTipText(""); jBtnMerge.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jBtnMergeActionPerformed(evt); } }); jLabel6.setText("jLabel6"); jBtnDelVoucherFiles.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnDelVoucherFiles.setText("?"); jBtnDelVoucherFiles.setToolTipText(""); jBtnDelVoucherFiles.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jBtnDelVoucherFilesActionPerformed(evt); } }); jBtnAddDaystatementFiles.setFont(new java.awt.Font("", 0, 12)); // NOI18N jBtnAddDaystatementFiles.setText("?"); jBtnAddDaystatementFiles.setToolTipText(""); jBtnAddDaystatementFiles.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jBtnAddDaystatementFilesActionPerformed(evt); } }); jListDaystatementFile.setModel(new javax.swing.AbstractListModel() { String[] strings = { "?pdf..." }; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); jListDaystatementFile.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(jListDaystatementFile); jListVoucherFile.setModel(new javax.swing.AbstractListModel() { String[] strings = { "?pdf..." }; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); jListVoucherFile.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane2.setViewportView(jListVoucherFile); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap() .addGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup().addGap(10, 10, 10) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 326, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jLabel1)) .addGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel2).addGap(230, 230, 230)) .addGroup(jPanel2Layout.createSequentialGroup().addGap(18, 18, 18) .addComponent(jScrollPane1)))) .addGroup(jPanel2Layout.createSequentialGroup().addGap(20, 20, 20) .addComponent(jBtnAddVoucherFiles, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jBtnDelVoucherFiles, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jBtnMergeVoucherFiles).addGap(18, 18, 18) .addComponent(jBtnAddDaystatementFiles, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jBtnDelDaystatementFiles, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jBtnMerge, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGap(19, 19, 19))); jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout .createSequentialGroup().addContainerGap() .addGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup().addGap(18, 18, 18) .addGroup(jPanel2Layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jBtnMergeVoucherFiles, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jBtnDelVoucherFiles, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jBtnAddVoucherFiles, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGroup(jPanel2Layout.createSequentialGroup().addGap(18, 18, 18) .addComponent(jBtnMerge, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup().addGap(399, 399, 399).addComponent( jBtnAddDaystatementFiles, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup().addGap(399, 399, 399).addComponent( jBtnDelDaystatementFiles, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addContainerGap(18, Short.MAX_VALUE))); jTabbedPane1.addTab("?", jPanel2); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jTabbedPane1)); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent( jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 475, javax.swing.GroupLayout.PREFERRED_SIZE)); pack(); }// </editor-fold>//GEN-END:initComponents private void jTextNewContentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextNewContentActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jTextNewContentActionPerformed private void jTextOriginalContentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextOriginalContentActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jTextOriginalContentActionPerformed private void jBtnReplaceContentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnReplaceContentActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jBtnReplaceContentActionPerformed private void jBtnPrepareFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnPrepareFileActionPerformed // TODO add your handling code here: FileFilter filter = new FileNameExtensionFilter("PDF file", "pdf"); jFileChooser1.setFileFilter(filter); //jFileChooser1.setMultiSelectionEnabled(true); jFileChooser1.setVisible(true); int returnVal = jFileChooser1.showOpenDialog(jInternalFrame1); if (returnVal == JFileChooser.APPROVE_OPTION) { pretreatmentFile = jFileChooser1.getSelectedFile(); } String fileName = (pretreatmentFile == null) ? "" : pretreatmentFile.getName(); jTextFile.setText(fileName); }//GEN-LAST:event_jBtnPrepareFileActionPerformed private void jBtnPrepareFileMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jBtnPrepareFileMouseClicked // TODO add your handling code here: }//GEN-LAST:event_jBtnPrepareFileMouseClicked private void jBtnAddVoucherFilesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnAddVoucherFilesActionPerformed // TODO add your handling code here: String fileName; String[] fileNames; //get files with jFileChooser FileFilter filter = new FileNameExtensionFilter("PDF file", "pdf"); jFileChooser1.setFileFilter(filter); jFileChooser1.setMultiSelectionEnabled(true); jFileChooser1.setVisible(true); int returnVal = jFileChooser1.showOpenDialog(jInternalFrame1); if (returnVal == JFileChooser.APPROVE_OPTION) { voucherFiles = jFileChooser1.getSelectedFiles(); } //At jList,display file names saved in ArrayList ArrayList<String> list = new ArrayList(); for (File file : voucherFiles) { if (file != null) { fileName = file.getName(); //System.out.println(fileName); list.add(fileName); } } fileNames = new String[list.size()]; fileNames = list.toArray(fileNames); jListVoucherFile.setListData(fileNames); }//GEN-LAST:event_jBtnAddVoucherFilesActionPerformed private void jBtnDelVoucherFilesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnDelVoucherFilesActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jBtnDelVoucherFilesActionPerformed private void jBtnMergeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnMergeActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jBtnMergeActionPerformed private void jBtnAddDaystatementFilesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnAddDaystatementFilesActionPerformed // TODO add your handling code here: String fileName; String[] fileNames; //get files with jFileChooser FileFilter filter = new FileNameExtensionFilter("PDF file", "pdf"); jFileChooser1.setFileFilter(filter); jFileChooser1.setMultiSelectionEnabled(true); jFileChooser1.setVisible(true); int returnVal = jFileChooser1.showOpenDialog(jInternalFrame1); if (returnVal == JFileChooser.APPROVE_OPTION) { daystatementFiles = jFileChooser1.getSelectedFiles(); } //At jList,display file names saved in ArrayList ArrayList<String> list = new ArrayList(); for (File file : daystatementFiles) { if (file != null) { fileName = file.getName(); //System.out.println(fileName); list.add(fileName); } } fileNames = new String[list.size()]; fileNames = list.toArray(fileNames); jListDaystatementFile.setListData(fileNames); }//GEN-LAST:event_jBtnAddDaystatementFilesActionPerformed private void jBtnDeletePagesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnDeletePagesActionPerformed // TODO add your handling code here: //get number of pages to be del String strPageNumber = jTextPageNumbers.getText(); if (strHasNumber(strPageNumber)) {//has page number to for pdf page? try { deletePages(pretreatmentFile, strPageNumber); //System.out.println("delete Page button clicked."); } catch (IOException | DocumentException ex) { Logger.getLogger(MainJFrame.class.getName()).log(Level.SEVERE, null, ex); } } else { System.out.println("Please input page numbers to be delete."); } }//GEN-LAST:event_jBtnDeletePagesActionPerformed private void deletePages(File file, String str) throws IOException, DocumentException { //open the old pdf file and open a blank new one String fullFileName = file.getPath(); //System.out.println(fullFileName); PdfReader reader = new PdfReader(fullFileName); Document document = new Document(reader.getPageSizeWithRotation(1)); String out = fullFileName.replaceFirst(".pdf", "(new).pdf"); PdfCopy copy = new PdfCopy(document, new FileOutputStream(out)); document.open(); int pdfPageNumber = reader.getNumberOfPages(); //get pdf page number //change pageNumber string to int array Boolean[] preservePages = getPages(pdfPageNumber, str); //copy pages except need delete to new pdf file for (int i = 1; i <= pdfPageNumber; i++) { //filter not preserve pages if (preservePages[i]) { //if preserve,copy;else bypass //String content = PdfTextExtractor.getTextFromPage(reader, i); //?i; copy.addPage(copy.getImportedPage(reader, i)); } } System.out.println("New pdf file is:" + fullFileName.replaceFirst(".pdf", "(new).pdf")); //close files reader.close(); document.close(); copy.close(); } private Boolean[] getPages(int pdfPageNumber, String str) { //parase a page number string to int array //filter the whole page number array , final Boolean NOTPRESERVE = false; final Boolean PRESERVE = true; Boolean[] pages = new Boolean[pdfPageNumber + 1]; //no page 0 in pdf file for (int i = 0; i <= pdfPageNumber; i++) { pages[i] = PRESERVE;//init all pages to preserve } str = str.replaceAll("", ","); String[] strPages = str.split(","); for (String strPage : strPages) { //pages to be delete set to NOTPRESERVE int n = strPage.indexOf("-"); if (n >= 0) { //page number range with "-"? int j = Integer.parseInt(strPage.substring(0, n)); int m = Integer.parseInt(strPage.substring(n + 1)); for (int i = j; i <= m; i++) { pages[i] = NOTPRESERVE; } } else { pages[Integer.parseInt(strPage)] = NOTPRESERVE; } } return (pages); } private static Boolean strHasNumber(String str) { if (str == null || str.equals("")) { return (false); } else { Boolean hasNumber = false; for (int i = 0; i <= 9; i++) { String s = i + ""; if (str.contains(s)) { hasNumber = true; break; } } return (hasNumber); } } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(MainJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(MainJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(MainJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MainJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MainJFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jBtnAddDaystatementFiles; private javax.swing.JButton jBtnAddVoucherFiles; private javax.swing.JButton jBtnDelDaystatementFiles; private javax.swing.JButton jBtnDelVoucherFiles; private javax.swing.JButton jBtnDeletePages; private javax.swing.JButton jBtnMerge; private javax.swing.JButton jBtnMergeVoucherFiles; private javax.swing.JButton jBtnPrepareFile; private javax.swing.JButton jBtnReplaceContent; private javax.swing.JFileChooser jFileChooser1; private javax.swing.JInternalFrame jInternalFrame1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel6; private javax.swing.JList jListDaystatementFile; private javax.swing.JList jListVoucherFile; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JSeparator jSeparator1; private javax.swing.JSeparator jSeparator2; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JTextField jTextFile; private javax.swing.JTextField jTextNewContent; private javax.swing.JTextField jTextOriginalContent; private javax.swing.JTextField jTextPageNumbers; // End of variables declaration//GEN-END:variables }