0

Excel シートの行を読み取り、その行の各セルの内容を配列リストに入力し、それをテキスト ファイルに書き込むスクリプトがあります。ファイルに画像を含めることができるように、(iText を使用して) PDF ファイルに書き込めるようにしたいと考えています。問題は、ドキュメントが閉じられており、ドキュメントに「要素を追加できません」というエラーが表示され続けることです。関連するコードは次のとおりです。

    public File processFile(File excelWorkbook) throws FileNotFoundException, IOException, DocumentException{

    System.out.println("Processing file...");
    FileInputStream fileInputStream = new FileInputStream(excelWorkbook);
    HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
    HSSFSheet firstSheet = workbook.getSheetAt(0);
    Iterator<Row> rowIterator = firstSheet.iterator();
    System.out.println("Please choose output file name.");
    String fName = this.chooseFileName();
    try{
    for(int cntr=1; cntr<=firstSheet.getPhysicalNumberOfRows(); cntr++){
        ArrayList<String> values = new ArrayList<String>();
        Row currentRow = firstSheet.getRow(cntr);

        for(int cntr2 = 0; cntr2<currentRow.getLastCellNum(); cntr2++){
            Cell currentCell = currentRow.getCell(cntr2, Row.RETURN_NULL_AND_BLANK);
            if(currentCell==null){
                //cell doesn't have anything in there
                values.add("-not in excel file-");
                continue;
            }else{
              switch(currentCell.getCellType()){
                case Cell.CELL_TYPE_STRING:
                    values.add(currentCell.getStringCellValue());
                    break;
                case Cell.CELL_TYPE_NUMERIC:

                    double num = currentCell.getNumericCellValue();
                    String numString = String.valueOf(num);
                    values.add(numString);
                    break;
              }
            }

        }
        //libF = writeArrayListToFile(values, fName);
        writePDF(values, fName);//the method that writes to pdf
    }

    }catch (NullPointerException e){
        System.out.println("Cell is null.");
        //e.printStackTrace();
    }
        fileInputStream.close();
        return libF;
}

writePDF(ArrayList al, String fName) メソッドは次のとおりです。

    public void writePDF(ArrayList<String> al, String filepath) throws FileNotFoundException, DocumentException{
    PdfWriter.getInstance(document, new FileOutputStream(filepath));
    document.open();
    document.add(new Paragraph("Library"));
    for(String i: al){
        document.add(new Phrase(i+"\n"));
    }
    document.close();
}

このファイルに連続して書き込めないのはなぜですか? テキスト ファイルに書き込むと、簡単に閉じて再度開くことができるので、Excel スプレッドシートからすべての情報をテキスト ファイルに取得できます。同じことがpdfファイルには当てはまらないようです。簡単に開閉できません。コードを変更する方法を教えてもらえますか? 私が望むのは、スクリプトが Excel シートの行を読み取り、セルの内容を配列リストに追加し、その直後に配列リストを pdf ドキュメントに追加することだけです。すべての行に対してこれを行う必要があります。これはテキストファイルでは機能しますが、pdf では機能しません。

4

1 に答える 1