I use OpenOffice to create odt file,create form fields in this file, and save odf file as PDF file. Then use itext to fill data into pdf files.Every form field showing in each pdf. But when I merger pdf files, all form fields missing. Please help.
Code of set fields:
FileOutputStream fos = new FileOutputStream(outpath);
PdfReader reader= new PdfReader(templateinputsream);
PdfStamper stamp = new PdfStamper(reader, fos);
AcroFields form = stamp.getAcroFields();
setField(form, fieldsMap);
private void setField(AcroFields form, Map<String, String> map) {
Iterator<Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<String, String> entry = it.next();
String key = entry.getKey();
String value = entry.getValue();
try {
form.setField(key, value);
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
Code of merge pdf:
private void mergePdf(List<String> files, String savepath) {
try {
List<InputStream> pdfs = new ArrayList<InputStream>();
for (int i = 0; i < files.size(); i++) {
pdfs.add(new FileInputStream(files.get(i)));
}
OutputStream output = new FileOutputStream(savepath);
Document document = new Document(new PdfReader(files.get(0)).getPageSize(1));
concatPDFs(document, pdfs, output);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void concatPDFs(Document document, List<InputStream> streamOfPDFFiles, OutputStream outputStream) {
try {
List<InputStream> pdfs = streamOfPDFFiles;
List<PdfReader> readers = new ArrayList<PdfReader>();
int totalPages = 0;
Iterator<InputStream> iteratorPDFs = pdfs.iterator();
while (iteratorPDFs.hasNext()) {
InputStream pdf = iteratorPDFs.next();
PdfReader pdfReader = new PdfReader(pdf);
readers.add(pdfReader);
totalPages += pdfReader.getNumberOfPages();
}
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
PdfImportedPage page;
int pageOfCurrentReaderPDF = 0;
Iterator<PdfReader> iteratorPDFReader = readers.iterator();
while (iteratorPDFReader.hasNext()) {
PdfReader pdfReader = iteratorPDFReader.next();
while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
document.newPage();
pageOfCurrentReaderPDF++;
page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
cb.addTemplate(page, 0, 0);
}
pageOfCurrentReaderPDF = 0;
}
outputStream.flush();
document.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (document.isOpen())
document.close();
try {
if (outputStream != null)
outputStream.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}