java.lang.ArrayIndexOutOfBoundsException:0 at pdfsplitter.SplitPDFFile.main(SplitPDFFile.java:19)

时间:2017-01-30 09:41:25

标签: split

我在Java方面不是那么好但是因为Talend Studio不支持PDF分割和合并,我不得不寻找另一种解决方案。

解释我的情况:

此处的任务是将具有n页的PDF拆分为n-PDF文件。 (每页一个)。 之后,我需要将每个PDF文件与另一个固定PDF合并。  (创建具有个别开头和固定跟随的信件)

我希望分割的PDF是在Talend中使用" TJasperReportExec"自动创建的。使用具体的模板,它不支持(afaik)PDF文件的分割。

经过一番研究后我发现代码:

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
     */

}
}

在定义字符串名称后,此处的错误似乎是args [ 0 ]的值。

在搜索解决方案并尝试以不同方式修复它之后,错误没有得到修复一次。 一些建议或与适当解决方案的链接会很好。

提前致谢,

Ulonis

1 个答案:

答案 0 :(得分:0)

几分钟前找到解决我问题的方法。像Aaron&amp; yashpandey已经告诉:没有给予分割的值(在这种情况下没有pdf文件)。

我的解决方案是:

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);

我删除了args [0]并创建了另一个带有该文件硬编码链接的String。在这种情况下也是可能的,因为此作业将在服务器上自动启动,并且此文件的名称可以每次都相同。通常我会在这里首选一些软编码以获得链接,但无论如何。它有效,它可以做到它。

感谢您的建议。如果我没有找到自己的解决方案,我会在你的评论之后得到它。

Ulonis