У меня есть сценарий, который читает строку на листе 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.
Вы сравниваете файл PDF с текстовым файлом? PDF полностью отличается. Пожалуйста, начните читать https://leanpub.com/itext_pdfabc/ (оно незакончено, но оно бесплатное). –