I am struggling with replacing a text after the merge of document. I have one document which is created through IText from scratch. In this first pdf I am able to replace any text any time. The code for string replacement is below.
URL resource = CobAccountOpeningLetterFieldServiceTest.class.getResource(SAMPLE_GENERATED_DOCUMENT);
Date date = CobModelUtils.getUtilDateFromString("Nov 02, 2017");
String region = "en";
String dateFromLocale = getDateFromLocale(region, date);
PdfReader reader = new PdfReader(resource);
PdfDictionary dict = reader.getPageN(1);
PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
if (object instanceof PRStream) {
PRStream stream = (PRStream) object;
byte[] data = PdfReader.getStreamBytes(stream);
String dataString = new String(data, CHARACTER_ENCODING_SET);
System.out.println(dataString);
dataString = dataString.replace(TEMPORARY_DATE_PLACE_HOLDER, dateFromLocale);
stream.setData(dataString.getBytes(CHARACTER_ENCODING_SET));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT4));
stamper.close();
reader.close();
This individually works fine, but when I merge any other document in it, the string replacement stops working on new PDF.
Code for merging the pdf is
private InputStream mergeDocument(List<InputStream> documentToMerge) throws DocumentException, IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, byteArrayOutputStream);
document.open();
PdfContentByte cb = pdfWriter.getDirectContent();
for (InputStream inputStream : documentToMerge) {
PdfReader pdfReader = new PdfReader(inputStream);
PdfReader.unethicalreading = true;
for (int pageOfCurrentReaderPDF = 1; pageOfCurrentReaderPDF <= pdfReader.getNumberOfPages(); pageOfCurrentReaderPDF++) {
Rectangle r = pdfReader.getPageSize(pdfReader.getPageN(pageOfCurrentReaderPDF));
document.setPageSize(r);
document.newPage();
PdfImportedPage page = pdfWriter.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
cb.addTemplate(page, 0, 0);
}
}
byteArrayOutputStream.flush();
document.close();
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
}
Any one have faced this issue earlier. Please guide, thanks,