2017-05-05 54 views
2

我剛完成編程我的新項目。它應該提供一些關於手球的問卷。我將所有問題保存在HSQL數據庫中,並希望以隨機順序將它們導出爲PDF。在我的開發環境中,一切工作都很好。我可以通過提供的庫連接到我的HSQL數據庫,並且可以通過iText庫版本5.3.5構建一些PDF文檔。導出後,可運行JAR文件無法連接到iText庫(版本5.3.5)

但是,一旦我將項目導出爲可運行的JAR文件(庫中的文件夾),我無法再構建PDF。可笑地,我可以連接到我的數據庫,但不能構建PDFS。我認爲我的JAR文件無法連接到iText庫。

是這樣嗎? 如果我能做些什麼來改變它? 它還能做什麼?

在下面我去後我DBConnection的類和我的PDFCreator類:

的PDFCreator:

´int maxiID = db.ExecuteMaxiID(katalog); 
      int anzahl1 = anzahl; 
      int kontr = 0; 
      int pageNumber = 0; 

      if (anzahl == 0) { 
       anzahl = maxiID; 
       anzahl1 = 0; 
      } 

      int[] done = new int[anzahl]; // anzahl 
      for (int x = 0; x < anzahl; x++) { 
       done[x] = x + 1; 
      } 

      doc.open(); 
      doc.addCreationDate(); 
      Paragraph space = new Paragraph(); 

      // Image oben rechts 
      Image img = Image.getInstance("icon.png"); 
      img.scaleAbsoluteHeight(40); 
      img.scaleAbsoluteWidth(110); 
      img.getScaledWidth(); 
      img.setAbsolutePosition(460, 780); 
      doc.add(img); 
      space.add(" "); 

      // Titel 

      PdfPTable tittle = new PdfPTable(1); 
      tittle.setWidthPercentage(100); 

      PdfPCell titleCell = new PdfPCell(new Phrase("Handball-Fragen-Test", new Font(Font.FontFamily.TIMES_ROMAN, 20, Font.BOLD))); 
      titleCell.setHorizontalAlignment(Element.ALIGN_CENTER); 
      titleCell.setBorder(Rectangle.NO_BORDER); 
      PdfPCell name = new PdfPCell(new Phrase("Name: ")); 
      name.setBorder(Rectangle.NO_BORDER); 

      tittle.addCell(titleCell); 
      tittle.addCell(name); 
      doc.add(tittle); 

      doc.add(space); 
      doc.add(space); 
      doc.add(space); 

      // Eigentliche Fragen 

      String[][] liste = new String[7][anzahl]; // anzahl 
      liste = db.ExecuteGetSomeQuestions(anzahl1, katalog);// Anzahl katalog 

      PdfPTable table = new PdfPTable(2); 
      int[] wid = {1, 30}; 
      try { 
       table.setWidths(wid); 
      } catch (DocumentException e) { 

      } 
      table.setLockedWidth(false); 
      table.setWidthPercentage(100); 
      table.setKeepTogether(true); 

      PdfPCell frage; 
      PdfPCell a1; 
      PdfPCell a2; 
      PdfPCell a3; 
      PdfPCell platz; 
      PdfPCell smallSpace; 

      MyFooter event = new MyFooter(); 
      writer.setPageEvent(event); 

      for (int i = 0; i < anzahl; i++) { 
       int count = i + 1; 
       platz = new PdfPCell(new Phrase(" ")); 
       platz.setColspan(2); 
       platz.setBorder(Rectangle.NO_BORDER); 

       smallSpace = new PdfPCell(new Phrase(" ")); 
       smallSpace.setBorder(Rectangle.NO_BORDER); 

       List frageliste = new List(List.UNORDERED); 
       ListItem item = new ListItem(liste[1][i]); 
       frageliste.setListSymbol(count + ". "); 
       item.setAlignment(Element.ALIGN_UNDEFINED); 
       item.setLeading(15); 
       frageliste.add(item); 

       List a1list = new List(List.UNORDERED); 
       a1list.setListSymbol("a) "); 
       ListItem item1 = new ListItem(liste[2][i]); 
       item1.setAlignment(Element.ALIGN_UNDEFINED); 
       a1list.add(item1); 

       List a2list = new List(List.UNORDERED); 
       a2list.setListSymbol("b) "); 
       ListItem item2 = new ListItem(liste[3][i]); 
       item2.setAlignment(Element.ALIGN_UNDEFINED); 
       item.setLeading(15); 
       a2list.add(item2); 

       List a3list = new List(List.UNORDERED); 
       a3list.setListSymbol("c) "); 
       ListItem item3 = new ListItem(liste[4][i]); 
       item3.setAlignment(Element.ALIGN_UNDEFINED); 
       item.setLeading(15); 
       a3list.add(item3); 

       frage = new PdfPCell(); 
       frage.addElement(frageliste); 
       frage.setColspan(2); 
       frage.setBorder(Rectangle.NO_BORDER); 
       frage.setHorizontalAlignment(Element.ANCHOR); 

       a1 = new PdfPCell(); 
       a1.addElement(a1list); 
       a1.setBorder(Rectangle.NO_BORDER); 

       a2 = new PdfPCell(); 
       a2.addElement(a2list); 
       a2.setBorder(Rectangle.NO_BORDER); 

       a3 = new PdfPCell(); 
       a3.addElement(a3list); 
       a3.setBorder(Rectangle.NO_BORDER); 

       table.addCell(frage); 
       table.addCell(smallSpace); 
       table.addCell(a1); 
       table.addCell(smallSpace); 
       table.addCell(a2); 
       table.addCell(smallSpace); 
       table.addCell(a3); 
       table.addCell(platz); 
       table.addCell(platz); 

       doc.add(table); 

       table.deleteBodyRows(); 


       // Hier füge ich die Seitenzahl hinzu. 


       pageNumber = doc.getPageNumber(); 
       for (int j = 0; j < anzahl; j++) { 
        // Das Hier mache ich, da das hier eine for-Schleife ist und jede Frage als eine neue Tabelle hinzugefügt wird 
        // Dafür ist der Vergleich mit der Liste "done" da, damit jede Seitenzahl nur einmal hinzugefügt 
        if (done[j] == pageNumber) { 
         MyFooter event1 = new MyFooter(); 
         writer.setPageEvent(event1); 
         done[j] = 0; 
        } 
       } 
      } 

      // Der leere Lösungsbogen 

      doc.newPage(); 

      PdfPTable titLoes = new PdfPTable(1); 
      titLoes.setWidthPercentage(100); 

      PdfPCell titLoesCell = new PdfPCell(new Phrase("Lösungsbogen", new Font(Font.FontFamily.TIMES_ROMAN, 20, Font.BOLD))); 
      titLoesCell.setHorizontalAlignment(Element.ALIGN_CENTER); 
      titLoesCell.setBorder(Rectangle.NO_BORDER); 

      titLoes.addCell(titLoesCell); 
      titLoes.addCell(name); 
      doc.add(titLoes); 

      doc.add(space); 
      doc.add(space); 
      doc.add(space); 

      PdfPTable loesTab = new PdfPTable(6); 
      loesTab.setLockedWidth(false); 
      loesTab.setWidthPercentage(80); 
      loesTab.getDefaultCell().setVerticalAlignment(Element.ALIGN_CENTER); 
      loesTab.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); 

      int[] widths = {1, 2, 2, 2, 3, 4}; 
      try { 
       loesTab.setWidths(widths); 
      } catch (DocumentException e) { 

      } 

      PdfPCell count = new PdfPCell(); 
      PdfPCell hell = new PdfPCell(); 
      BaseColor bC = new BaseColor(245, 245, 245); 
      BaseColor bC2 = new BaseColor(220, 220, 220); 

      loesTab.addCell(count); 
      loesTab.addCell("A"); 
      loesTab.addCell("B"); 
      loesTab.addCell("C"); 
      loesTab.getDefaultCell().setBackgroundColor(bC2); 
      loesTab.addCell(""); 
      loesTab.getDefaultCell().setBackgroundColor(BaseColor.WHITE); 
      loesTab.addCell(hell); 

      for (int go = 0; go < anzahl; go++) { 
       int ind = go + 1; 
       if (ind % 2 == 0) { 
        loesTab.getDefaultCell().setBackgroundColor(bC); 
       } 
       loesTab.addCell("" + ind); 
       loesTab.addCell(""); 
       loesTab.addCell(""); 
       loesTab.addCell(""); 
       loesTab.getDefaultCell().setBackgroundColor(bC2); 
       loesTab.addCell(""); 
       loesTab.getDefaultCell().setBackgroundColor(BaseColor.WHITE); 
       if (ind % 2 == 0) { 
        loesTab.getDefaultCell().setBackgroundColor(bC); 
       } 
       loesTab.addCell(""); 
       loesTab.getDefaultCell().setBackgroundColor(BaseColor.WHITE); 
      } 

      doc.add(loesTab); 

      // Die Lösungen 

      doc.newPage(); 

      PdfPTable titLoes1 = new PdfPTable(1); 
      titLoes1.setWidthPercentage(100); 

      PdfPCell titLoesCell1 = new PdfPCell(new Phrase("Lösung", new Font(Font.FontFamily.TIMES_ROMAN, 20, Font.BOLD))); 
      titLoesCell1.setHorizontalAlignment(Element.ALIGN_CENTER); 
      titLoesCell1.setBorder(Rectangle.NO_BORDER); 

      titLoes1.addCell(titLoesCell1); 
      doc.add(titLoes1); 

      doc.add(space); 
      doc.add(space); 
      doc.add(space); 

      PdfPTable loesTab1 = new PdfPTable(7); 
      loesTab1.setLockedWidth(false); 
      loesTab1.setWidthPercentage(80); 
      loesTab1.getDefaultCell().setVerticalAlignment(Element.ALIGN_CENTER); 
      loesTab1.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); 

      int[] widths1 = {1, 2, 2, 2, 2, 3, 4}; 
      try { 
       loesTab1.setWidths(widths1); 
      } catch (DocumentException e) { 

      } 

      loesTab1.addCell(count); 
      loesTab1.addCell("Ur. ID"); 
      loesTab1.addCell("A"); 
      loesTab1.addCell("B"); 
      loesTab1.addCell("C"); 

      Font font = new Font(Font.FontFamily.UNDEFINED, 9); 

      loesTab1.getDefaultCell().setBackgroundColor(bC2); 
      loesTab1.addCell(""); 
      loesTab1.getDefaultCell().setBackgroundColor(BaseColor.WHITE); 
      loesTab1.addCell(hell); 

      for (int go = 0; go < anzahl; go++) { 

       boolean A = false; 
       boolean B = false; 
       boolean C = false; 

       String loesung = liste[5][go]; 
       int lenResult = 0; 
       String[] result = null; 
       if (loesung.contains(" ") == true) { 
        String[] zwischen = loesung.split(" "); 
        int lenZwischen = zwischen.length; 
        loesung = ""; 
        for (int i = 0; i < lenZwischen; i++) { 
         loesung += zwischen[i]; 
        } 

       } 

       result = loesung.split(","); 
       lenResult = result.length; 

       int ind = go + 1; 
       if (ind % 2 == 0) { 
        loesTab1.getDefaultCell().setBackgroundColor(bC); 
       } 
       loesTab1.addCell("" + ind); 
       Paragraph urid = new Paragraph(); 
       urid.setFont(font); 
       urid.add("" + liste[6][go]); 
       loesTab1.addCell(urid); 

       for (int i = 0; i < lenResult; i++) { 
        if (result[i].equals("a") == true) { 
         A = true; 
        } 
        if (result[i].equals("b") == true) { 
         B = true; 
        } 
        if (result[i].equals("c") == true) { 
         C = true; 
        } 
       } 
       if (A == true) { 
        loesTab1.addCell("X"); 
       } else { 
        loesTab1.addCell(""); 
       } 
       if (B == true) { 
        loesTab1.addCell("X"); 
       } else { 
        loesTab1.addCell(""); 
       } 
       if (C == true) { 
        loesTab1.addCell("X"); 
       } else { 
        loesTab1.addCell(""); 
       } 
       loesTab1.getDefaultCell().setBackgroundColor(bC2); 
       loesTab1.addCell(""); 
       loesTab1.getDefaultCell().setBackgroundColor(BaseColor.WHITE); 
       if (ind % 2 == 0) { 
        loesTab1.getDefaultCell().setBackgroundColor(bC); 
       } 
       loesTab1.addCell(""); 
       loesTab1.getDefaultCell().setBackgroundColor(BaseColor.WHITE); 
      } 

      doc.add(loesTab1); 
      doc.close(); 

      //System.out.println("Finished"); 
      String retit = "PDF gespeichert"; 
      return retit; 
     } catch (DocumentException | IOException e) { 
      String retit = "Fehler beim abspeichern"; 
      return retit; 
     } 
    }` 

DBConnection的:如果你需要

public void GetConnection() { 
    System.out.println("GOT CONNECTION"); 
    // Objekt von Klasse Pfad erstellen, um den absoluten Pfad der Datenbank zu bekommen (im falle Sie Kopieren das Programm an einen anderen Speicherort) 
    Pfad path = new Pfad(); 
    try { 

     // Es wird versucht der JDBC Treiber für HSQL aus der von mir importierten Bibliothek zu laden 
     Class.forName("org.hsqldb.jdbcDriver"); 
    } catch (ClassNotFoundException e) { 
     //PopUp //puElement = new //PopUp(); 
     //puElement.DrawPopUp("Fehler beim Laden von Treiber"); 
    } 

    con = null; 

    try { 
     try { 
      // Nun wird versucht mithilfe des Treibers eine Connection aufzubauen 
      con = DriverManager.getConnection("jdbc:hsqldb:file:" + path.Wo() + "; shutdown = true", "TKuschel", ""); 

     } catch (IOException | SQLException e) { 
      //PopUp //puElement = new //PopUp(); 
      //puElement.DrawPopUp("Datei nicht gefunden"); 
     } 
    } catch (Exception e) { 
     //PopUp //puElement = new //PopUp(); 
     //puElement.DrawPopUp("Fehler mit der Datenbank"); 
    } 
} 

public void CloseConnection() { 
    // Diese Methode ist wichtig, da Änderungen erst nach schließen der Connection in der Datenbank angewendet werden. Bis dorthin sind sie nur im Zugehörigen 
    // ResultSet gespeichert 
    try { 
     con.close(); 
    } catch (SQLException e) { 
     //PopUp //puElement = new //PopUp(); 
     //puElement.DrawPopUp("Fehler beim schließen der Datenbank"); 
    } 
} 



public String[][] GetSomeQuestions(int anzahl, String Katalog) { 
    // Deklarieren der Variablen 

    avaliableFragen.removeAll(avaliableFragen); 
    fragenIndex.removeAll(fragenIndex); 

    boolean kontrol = true; 
    int size = 0; 
    int columns = 0; 
    int maxiID = 0; 

    CloseGaps(Katalog); 

    if (anzahl > 0) { 
     Random roller = new Random(); 
     int maxID = MaxiID(Katalog); 
     int fuerRoller = maxID + 1; 
     // Hier bespiele ich die ArrayList avaliableFragen mit den ID's aller möglichen Fragen 
     for (int i = 0; i < maxID;) { 
      i = i + 1; 
      avaliableFragen.add(i); 
     } 
     while (kontrol == true) { 
      int rand = roller.nextInt(fuerRoller); 
      if (avaliableFragen.contains(rand) == true) { 
       int delete = avaliableFragen.indexOf(rand); 
       fragenIndex.add(rand); 
       avaliableFragen.remove(delete); 
       /* Hier würfele ich mit der Methode "nextInt(int)" der Klasse java.util.Random einen Wert zwischen 1 und maxID (einbegriffen) 
     * Da ich jede Frage nur einmal im Fragebogen haben möchte (sie wahrscheinlich auch) schaue ich ob die ID in meiner avaliableFragen liste 
       * vorhanden ist. Ist dem so, wird sie fragenIndex hinzugefügt und aus avaliableFragen gelöscht. Ist dem nicht so, und die gewürfelte ID 
       * ist in avaliableFragen nicht mehr vorhanden, wird sie auch fragenIndex nicht hinzugefügt und es wird eine neue ID gewürfelt. 
       */ 
      } 
      if (avaliableFragen.isEmpty() == true) { 
       kontrol = false; 
      } 
      if (fragenIndex.size() == anzahl) { 
       kontrol = false; 
      } 
      // Es soll solange gehen bis entweder die avaliableFragen liste leer ist oder die gewünschte Anzahl erreicht ist. 
      // Das es aufhören soll, wenn avaliableFragen leer ist, habe ich eingebaut, damit es keinen Fehler wirft, wenn eine Falsche angabe gemacht wurde. 
     } 
     size = fragenIndex.size(); 
    } 
    if (anzahl == 0) { 
     // Es gibt eine Funktion sich den kompletten Katalog als Pdf, sortiert ausgeben zu lassen, damit man herausfinden kann, welche Fragen man löschen möchte 
     // suchen kann ob eine bestimmte Frage vorhanden ist etc. 
     // Dazu wird beim Drücken eines Buttons (KatalogBearbeiten Button "BrowseSpeicherort") der Wer 0 für die Anzahl weitergegeben. In dem Fall 
     // passiert eben das Folgende. 

     CloseGaps(Katalog); 
     maxiID = MaxiID(Katalog); 
     for (int i = 0; i <= maxiID;) { 
      i = i + 1; 
      fragenIndex.add(i); 
     } 
     size = maxiID; 
    } 

    // Hier werden die Listen initialisiert, die ich später auch returnen werde. Ihnen werden die Werte der Reihen im folgendn try-catch Block übergeben 
    String[][] FragKat1 = new String[7][size]; 
    String[][] FragKat2 = new String[10][size]; 

    try { 

     for (int i = 0; i < size; i++) { 
      String sql = ("SELECT * FROM " + Katalog + " WHERE ID = " + fragenIndex.get(i)); 
      ResultSet rs = ExecuteGetSQL(sql); 
      while (rs.next()) { 
       columns = rs.getMetaData().getColumnCount(); 
       if (columns == 7) { 
        FragKat1[0][i] = rs.getString(1); 
        FragKat1[1][i] = rs.getString(2); 
        FragKat1[2][i] = rs.getString(3); 
        FragKat1[3][i] = rs.getString(4); 
        FragKat1[4][i] = rs.getString(5); 
        FragKat1[5][i] = rs.getString(6); 
        FragKat1[6][i] = rs.getString(7); 
       } 
       if (columns == 10) { 
        FragKat2[0][i] = rs.getString(1); 
        FragKat2[1][i] = rs.getString(2); 
        FragKat2[2][i] = rs.getString(3); 
        FragKat2[3][i] = rs.getString(4); 
        if (!"leer".equals(rs.getString(4))) { 
         FragKat2[4][i] = rs.getString(5); 
        } 
        if (!"leer".equals(rs.getString(6))) { 
         FragKat2[5][i] = rs.getString(6); 
        } 
        if (!"leer".equals(rs.getString(7))) { 
         FragKat2[6][i] = rs.getString(7); 
        } 
        if (!"leer".equals(rs.getString(8))) { 
         FragKat2[7][i] = rs.getString(8); 
        } 
        FragKat2[8][i] = rs.getString(9); 
        FragKat2[9][i] = rs.getString(10); 
       } 
      } 
      rs.close(); 
     } 
    } catch (SQLException w) { 

    } 
    if (columns == 7) { 
     return FragKat1; 
    } 
    if (columns == 10) { 
     return FragKat2; 
    } 
    return null; 

不要猶豫評論一些其他信息。請幫助我我有點絕望。

+0

有沒有我的完整課只是(我想)所需的代碼。 –

+0

如果您需要更多,請不要猶豫,問我。我只是想解決這個問題 –

回答

0

沒有進一步的澄清,這是一個相當廣泛的錯誤。 您可能已經聲明這是一個依賴性問題。如果你正在使用maven,也許它沒有正確配置在產品上。電腦,它不能從中央倉庫下載適當的jar。

如果您沒有使用任何構建工具,Manuel的答案將是最好的方法。

+0

我認爲我們可以在這裏關閉它。我剛剛發現了這個錯誤。它真的是一個簡單的....我添加了一些圖像到我的PDF文件,但忘了把它放到jar文件夾中,所以它拋出了一個錯誤。但是,非常感謝你們,你們是最棒的 –

+0

我很高興你們成功了。要真正關閉它,請接受我的答案,或將此評論發佈爲答案並接受。將來可能會幫助某人。 –