2013-07-12 6 views
0

У меня есть сценарий, который читает строку на листе excel, заполняет список массивов содержимым каждой ячейки в этой строке и записывает его в текстовый файл. Я хочу записать его в pdf-файл (используя iText), чтобы я мог включить изображение в файл. Проблема в том, что я все время получаю сообщение об ошибке, когда документ закрыт, а в документ не добавлены элементы. Вот соответствующий код:Невозможно написать в pdf с помощью iText

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 аль, Fname String) метод:

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.

+0

Вы сравниваете файл PDF с текстовым файлом? PDF полностью отличается. Пожалуйста, начните читать https://leanpub.com/itext_pdfabc/ (оно незакончено, но оно бесплатное). –

ответ

0

вы пишете каждый ряд в PDF-документ

ваша функция writePDF имеет поле:

document 

, который не инициализирован вокруг открытия файла (вместо того, чтобы я думаю, что это инициализируется во время строительства) инициализировать документ при открытии выходного файла

+0

Построил его за выходные, и да, это была проблема. Благодарю. –

Смежные вопросы