Конкатенация iText Pdf формы не происходит, как ожидалось. Furthur ведет себя неожиданно
Со ссылкой на Слияние документов
- попытался реализовать это. Но первая страница показывается, как и ожидалось, следующие страницы будут наполовину заполнены и будут отображаться без какой-либо формы в формате PDF, то есть в виде формы.
Ниже мой фрагмент кода..
private void addInfo() { PdfReader reader = null, readerPage = null, pdfReaderExtraPage = null, pdfReaderExtraPage1 = null, readerD = null; //PdfCopyFields copy = null, copyD = null; FileOutputStream fosResDoc, fosFinalDoc; int indirectLaborDocCount = 1; int equipDocCount = 1; Document document = null, document2 = null; PdfCopy copyTemp = null, copyTemp2 = null; try { String resultDocPath = Constants.FOLDER_PATH + "ResultDoc.pdf"; fosResDoc = new FileOutputStream(resultDocPath); reader = new PdfReader(new FileInputStream(Constants.strFilePath)); //copy = new PdfCopyFields(fosResDoc); //copy.addDocument(reader); //Before this method i already set values of form for first page. This method is to add extra data/pages if any. //Add here am adding that using addDocument. document = new Document(); copyTemp = new PdfSmartCopy(document, fosResDoc); copyTemp.setMergeFields(); document.open(); copyTemp.addDocument(reader); boolean isNeededStudentComments = ((strStudentComments.length() > 0) && (strStudentComments.length() > (StudentCommentsMaxLength * StudentCommentsMaxLines))); boolean isNeededTeacherComments = ((strTeacherComments.length() > 0) && (strTeacherComments.length() > (TeacherCommentsMaxLength * TeacherCommentsMaxLines))); if (isNeededTeacherComments) { int commentsTableCount = 1; do { String extraPagePath = Constants.FOLDER_PATH + "ExtraPage" + commentsTableCount + ".pdf"; commentsTableCount++; readerPage = new PdfReader(Constants.strFilePath); stamper = new PdfStamper(readerPage, new FileOutputStream(extraPagePath), PdfWriter.VERSION_1_5); readerPage.setPageContent(1, readerPage.getPageContent(1)); stamper.close(); if (isNeededTeacherComments && (strTeacherComments.length() > 0)) { fillTeacherComments(); } changePdfFieldName(extraPagePath, commentsTableCount - 1); pdfReaderExtraPage1 = new PdfReader(extraPagePath); List<Integer> lst = new ArrayList<>(); lst.add(1); copy.addDocument(pdfReaderExtraPage1, lst); } while (populatedTeacherCommentsLength < strTeacherComments.length()); } if (isNeededStudentComments) { int commentsTableCount = 1; do { String extraPagePath = Constants.FOLDER_PATH + "ExtraPage" + commentsTableCount + ".pdf"; commentsTableCount++; readerPage = new PdfReader(Constants.strFilePath); stamper = new PdfStamper(readerPage, new FileOutputStream(extraPagePath), PdfWriter.VERSION_1_5); readerPage.setPageContent(1, readerPage.getPageContent(1)); stamper.close(); if (isNeededStudentComments && (strStudentComments.length() > 0)) { fillTeacherComments(); } changePdfFieldName(extraPagePath, commentsTableCount - 1); pdfReaderExtraPage1 = new PdfReader(extraPagePath); List<Integer> lst = new ArrayList<>(); lst.add(1); copyTemp.addDocument(pdfReaderExtraPage1); } while (populatedStudentCommentsLength < strStudentComments.length()); } copyTemp.close(); fosResDoc.close(); readerD = new PdfReader(new FileInputStream(resultDocPath)); fosFinalDoc = new FileOutputStream(Constants.strFilePath); document2 = new Document(); copyTemp2 = new PdfSmartCopy(document2, fosFinalDoc); document2.open(); copyTemp2.addDocument(readerD); fosFinalDoc.close(); } catch (Exception e) { e.printStackTrace(); } finally { if(document != null) document.close(); if(document2 != null) document2.close(); if(reader != null) { reader.close(); } if(readerPage != null) { readerPage.close(); } if(pdfReaderExtraPage != null) { pdfReaderExtraPage.close(); } if(pdfReaderExtraPage1 != null) { pdfReaderExtraPage1.close(); } if(readerD != null) { readerD.close(); } if(copyTemp != null) { copyTemp.close();} if(copyTemp2 != null) { copyTemp2.close(); } try { if(outputStream != null) { outputStream.close(); outputStream = null; } } catch (IOException ie) {ie.printStackTrace();} if(form != null) form = null; }
}
private void fillTeacherComments() { PdfReader pdfReaderExtraPage = null; FileOutputStream fileOuputStream = null; String tmpNotes = ""; try { pdfReaderExtraPage = new PdfReader(extraPagePath); outputStream = new ByteArrayOutputStream(); stamper = new PdfStamper(pdfReaderExtraPage, outputStream); form = stamper.getAcroFields(); form.setField(fieldKey, "Some information String"); stamper.close(); fileOuputStream = new FileOutputStream(extraPagePath); fileOuputStream.write(outputStream.toByteArray()); fileOuputStream.close(); } catch(Exception e) { System.out.println("fillExtraComments(): " +e.toString()); } finally { if(pdfReaderExtraPage != null) { pdfReaderExtraPage.close(); } try { if(outputStream != null) { outputStream.close(); outputStream = null; } } catch (Exception e) {e.printStackTrace();} if(form != null) form = null; }
}
Мое требование заключается в том, что у меня есть две таблицы комментариев в формате PDF, и максимум у нас есть только 8 строк, 4 для одной таблицы другой для другой таблицы.
И на уровне кода у меня есть два массива комментариев размером 10 каждый. Затем на первой странице добавляю 5 значений из каждого массива для формирования таблиц.
Далее я перебираю массив один индивидуально и добавляю в документ с именем abc.doc. Итерация другого массива индивидуально и добавляется с именем abc.doc
Таким образом, эти документы должны объединить и заполнить 5 строк в двух таблицах, каждая на одной и той же странице. Но первая страница отображается, как и ожидалось, следующие страницы будут выглядеть как наполовину заполненные и отображаться без какой-либо формы в формате PDF, то есть вида формы.