Конкатенация 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, то есть вида формы.

0 ответов

Другие вопросы по тегам