2017-01-30 3 views
0

ich bin nicht so gut in Java, aber aufgrund der Tatsache, dass Talend Studio nicht unterstützt PDF-Splitting und Merging musste ich suchen eine andere Lösung.java.lang.ArrayIndexOutOfBoundsException: 0 bei pdfsplitter.SplitPDFFile.main (SplitPDFFile.java:19)

Um meine Situation zu erklären:

Die Aufgabe hier ist es, eine PDF-Datei mit n-Seiten in n-PDF-Dateien zu teilen. (Eins für jede Seite). Danach muss ich jede von dort PDF-Dateien mit einem anderen Fixed PDF zusammenführen. (Erstellung von Briefsendungen mit einzelnen Anfänge und feste Anhänger)

Das PDF, ich will, spalten wird automatisch in Talend erstellt „TJasperReportExec“ mit einer konkreten Vorlage verwendet, die Unterstützung ist nicht (afaik) die Spaltung von PDF-Dateien als auch .

Nach einigen Recherchen fand ich, dass Code:

package pdfsplitter; 

import java.io.FileOutputStream; 

import com.lowagie.text.Document; 
import com.lowagie.text.pdf.PdfCopy; 
import com.lowagie.text.pdf.PdfImportedPage; 
import com.lowagie.text.pdf.PdfReader; 

public class SplitPDFFile { 
/** 
* @param args 
*/ 
public static void main(String[] args) { 

    try { 
     String inFile = args[0].toLowerCase(); 
     System.out.println ("Reading " + inFile); 
     PdfReader reader = new PdfReader(inFile); 
     int n = reader.getNumberOfPages(); 
     System.out.println ("Number of pages : " + n); 
     int i = 0; 
     while (i < n) { 
      String outFile = inFile.substring(0, inFile.indexOf(".pdf")) 
       + "-" + String.format("%03d", i + 1) + ".pdf"; 
      System.out.println ("Writing " + outFile); 
      Document document = new Document(reader.getPageSizeWithRotation(1)); 
      PdfCopy writer = new PdfCopy(document, new FileOutputStream(outFile)); 
      document.open(); 
      PdfImportedPage page = writer.getImportedPage(reader, ++i); 
      writer.addPage(page); 
      document.close(); 
      writer.close(); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

    /* example : 
     java SplitPDFFile d:\temp\x\tx.pdf 

     Reading d:\temp\x\tx.pdf 
     Number of pages : 3 
     Writing d:\temp\x\tx-001.pdf 
     Writing d:\temp\x\tx-002.pdf 
     Writing d:\temp\x\tx-003.pdf 
    */ 

} 
} 

Die hier Fehler scheint der Wert von args [] nach der Definition des Namens des String zu sein.

Nach der Suche nach einer Lösung und versuchen, es auf verschiedene Arten zu beheben, wurde der Fehler nicht einmal behoben. Einige Ratschläge oder eine Verbindung mit einer richtigen Lösung wäre nett.

Vielen Dank im Voraus,

Ulonis

+0

'args [0]' ist der Wert des ersten Parameters auf die 'java' ausführbare gegeben, wenn diese Klasse startet, haben Sie ein zur Verfügung stellen? – Aaron

+0

Wenn Sie den Java-Code ausführen, müssen Sie zur Laufzeit Argumente übergeben. Es gibt nichts in args [] und daher Array außerhalb des Bereichs. Nehmen Sie das zum Beispiel - http://stackoverflow.com/questions/890966/what-is-string-args-parameter-in-main-method-java – yashpandey

+0

Beantwortete das Problem jetzt. Immer noch ein großes Danke für euch beide. :) – Ulonis

Antwort

0

vor ein paar Minuten, um die Lösung für mein Problem gefunden. Wie Aaron & hat yashpandey bereits gesagt: Es gab keinen Wert (in diesem Fall keine PDF-Datei) zum Teilen. hier

Meine Lösung ist:

public static void main(String[] args) { 

     try { 
      String s = "C:\\Users\\User\\PDFFile.pdf"; 
      String inFile = s.toLowerCase(); 
      System.out.println ("Reading " + inFile); 
      PdfReader reader = new PdfReader(inFile); 

ich die args gelöscht [0] und erstellt einen anderen String mit einem Fest programmierte Link zu dieser Datei. In diesem Fall auch möglich, da dieser Job automatisch auf einem Server gestartet wird und der Name dieser Datei immer gleich sein kann. Normalerweise hätte ich hier etwas Softcoding vorgezogen, um den Link zu bekommen, aber was auch immer. Es funktioniert und es tut was es zu tun hat.

Danke für die Vorschläge. Wenn ich die Lösung für mich nicht gefunden hätte, hätte ich sie nach Ihren Kommentaren bekommen.

Ulonis

Verwandte Themen