From cfb1c52f83cb7dd8c8eb3ecb2bedd61dff4cc0ac Mon Sep 17 00:00:00 2001 From: nisha Date: Sat, 26 Oct 2024 09:05:22 +0530 Subject: [PATCH] Updated code for pdf correction --- .../gepafin/tendermanagement/dao/PdfDao.java | 125 ++++++++++++++---- 1 file changed, 97 insertions(+), 28 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java index efdc3798..bf585e19 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java @@ -17,6 +17,7 @@ import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +26,7 @@ import org.springframework.stereotype.Component; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.util.*; import java.util.List; import java.util.stream.Collectors; @@ -60,7 +62,7 @@ public class PdfDao { // writer.setPageEvent(pageEvent); document.open(); // pageEvent.setTotalPages(writer.getPageNumber()); - addLogo(document, "https://mementoresources.s3.eu-west-1.amazonaws.com/gepafin/logo.jpg"); // Add your image path here + addLogo(document, "logo.jpg"); // Add your image path here BaseColor customColor = new BaseColor(0, 128, 0); // Adjust RGB values as needed @@ -82,8 +84,6 @@ public class PdfDao { ApplicationGetResponseBean applicationGetResponseBean=applicationDao.getApplicationByFormId(request, applicationId, null); for(FormApplicationResponse formApplicationResponse: applicationGetResponseBean.getForm()) { - document.add(new Paragraph(formApplicationResponse.getLabel(),sectionFont)); - document.add(new Paragraph(" ")); // Add line break List fieldLabelValuePairRequests = getFormFieldsToLabels(formApplicationResponse,writer,document); addColoredLines(writer,document,greenColor); document.add(new Paragraph(" ")); // Add line break @@ -231,24 +231,70 @@ public class PdfDao { } } else { - PdfPCell valueCell = new PdfPCell(new Phrase(String.valueOf(value), valueFont)); - valueCell.setPadding(5f); // Increase padding for better spacing - valueCell.setPaddingLeft(leftMargin); // Increase left margin for value - valueCell.setBorder(Rectangle.NO_BORDER); // Remove border for value cell - valueCell.setMinimumHeight(30f); - valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE); - valueCell.setCellEvent(new RoundedCorners()); // Apply rounded corners - valueTable.addCell(valueCell); - document.add(valueTable); + String fieldValue=Utils.convertToString(value); + Image img = null; // This may throw MalformedURLException + if (fieldValue.equalsIgnoreCase("true")) { + // Use images for tick and cross + try { + img = Image.getInstance("true.jpg"); + } catch (IOException e) { + log.error("Error while uploading image for pdf for true"); + } + img.scaleAbsolute(15, 15); // Resize the image if needed + + PdfPCell cell = new PdfPCell(img); + cell.setPadding(5f); // Increase padding for better spacing + cell.setPaddingLeft(leftMargin); // Increase left margin for value + cell.setBorder(Rectangle.NO_BORDER); // Remove border for value cell + cell.setMinimumHeight(30f); + cell.setVerticalAlignment(Element.ALIGN_LEFT); + cell.setCellEvent(new RoundedCorners()); // Apply rounded corners + cell.setHorizontalAlignment(Element.ALIGN_LEFT); + valueTable.addCell(cell); + document.add(valueTable); + } + else if (fieldValue.equalsIgnoreCase("false")) { + // Use images for tick and cross + try { + img = Image.getInstance("false.jpg"); + } catch (IOException e) { + log.error("Error while uploading image for pdf for true"); + } + img.scaleAbsolute(15, 15); // Resize the image if needed + + PdfPCell cell = new PdfPCell(img); + cell.setPadding(5f); // Increase padding for better spacing + cell.setPaddingLeft(leftMargin); // Increase left margin for value + cell.setBorder(Rectangle.NO_BORDER); // Remove border for value cell + cell.setMinimumHeight(30f); + cell.setVerticalAlignment(Element.ALIGN_LEFT); + cell.setCellEvent(new RoundedCorners()); // Apply rounded corners + cell.setHorizontalAlignment(Element.ALIGN_LEFT); + valueTable.addCell(cell); + document.add(valueTable); + } + else { + PdfPCell valueCell = new PdfPCell(new Phrase(String.valueOf(value), valueFont)); + valueCell.setPadding(5f); // Increase padding for better spacing + valueCell.setPaddingLeft(leftMargin); // Increase left margin for value + valueCell.setBorder(Rectangle.NO_BORDER); // Remove border for value cell + valueCell.setMinimumHeight(30f); + valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE); + valueCell.setCellEvent(new RoundedCorners()); // Apply rounded corners + + valueTable.addCell(valueCell); + document.add(valueTable); + } + } - document.add(new Paragraph("\n")); // Add line break after each value } private Document createPdfTable(List> extractedData, Document document, ContentResponseBean contentResponseBean) throws DocumentException { // Create a PdfPTable with dynamic column count based on stateFieldMap size Map stateFieldMap = new HashMap<>(); + Map stateFieldBoolean = new HashMap<>(); // Populate stateFieldMap from contentResponseBean settings contentResponseBean.getSettings().stream() @@ -268,8 +314,23 @@ public class PdfDao { stateFieldMap.put(fieldName, fieldDataValue); } }); - - PdfPTable table = new PdfPTable(stateFieldMap.size()); // Number of columns equals the number of map entries + contentResponseBean.getSettings().stream() + .filter(setting -> "table_columns".equals(setting.getName())) // Check for "table_columns" + .map(SettingResponseBean::getValue) + .filter(Objects::nonNull) // Ensure value is not null + .filter(settingValue -> settingValue instanceof Map) // Ensure value is a Map + .map(settingValue -> (Map) settingValue) // Cast to Map + .map(valueMap -> (List>) valueMap.get("stateFieldData")) // Extract stateFieldData list + .filter(Objects::nonNull) // Ensure stateFieldData is not null + .flatMap(List::stream) // Flatten the list of field data maps + .forEach(fieldData -> { + String fieldName = (String) fieldData.get("name"); // Get the name field + Boolean predefined = (Boolean) fieldData.get("predefined"); // Get the predefined field + if (fieldName != null && fieldName != null) { + stateFieldBoolean.put(fieldName, predefined); + } + }); + PdfPTable table = new PdfPTable(stateFieldMap.size()); // Number of columns equals the number of map entries table.setWidthPercentage(100); // Set table width to 100% table.setTableEvent(new RoundedBorderEvent()); @@ -278,29 +339,37 @@ public class PdfDao { float maxTableHeight = 700f; // Maximum height of the table before a page break boolean headersAdded = false; // Flag to check if headers have been added + List trueKeys = new ArrayList<>(); + List falseKeys = new ArrayList<>(); + for (Map.Entry entry : stateFieldBoolean.entrySet()) { + if (Boolean.TRUE.equals(entry.getValue())) { + trueKeys.add(entry.getKey()); // Store true keys + } else { + falseKeys.add(entry.getKey()); // Store false keys + } + } + List orderedKeys = new ArrayList<>(trueKeys); + orderedKeys.addAll(falseKeys); // Iterate through extracted data to populate the table for (Map row : extractedData) { // Add headers once if (!headersAdded) { - for (Map.Entry stateField : stateFieldMap.entrySet()) { - String headerValue = stateField.getValue(); // Header text + for (String key : orderedKeys) { + String headerValue = stateFieldMap.get(key); // Header text + PdfPCell headerCell = new PdfPCell(new Phrase(headerValue)); // Create a new PdfPCell for the header + headerCell.setHorizontalAlignment(Element.ALIGN_CENTER); // Center align + headerCell.setVerticalAlignment(Element.ALIGN_MIDDLE); + headerCell.setBackgroundColor(new BaseColor(178, 190, 181)); // Light gray background for header - PdfPCell headerCell = new PdfPCell(new Phrase(headerValue)); // Create a new PdfPCell for the header - headerCell.setHorizontalAlignment(Element.ALIGN_CENTER); // Center align - headerCell.setVerticalAlignment(Element.ALIGN_MIDDLE); - headerCell.setBackgroundColor(new BaseColor(178, 190, 181)); // Light gray background for header - - table.addCell(headerCell); // Add the header cell to the table - } + table.addCell(headerCell); // Add the header cell to the table + } headersAdded = true; // Prevent headers from being added again } // Add data rows matching stateFieldMap keys for (Map.Entry stateField : stateFieldMap.entrySet()) { - String stateKey = stateField.getKey(); // Get the key from stateFieldMap - if (row.containsKey(stateKey)) { // If row contains the stateKey - Object value = row.get(stateKey); // Get the value from the row map - + for (String key : orderedKeys) { // Iterate over the ordered keys + Object value = row.getOrDefault(key, ""); // Fetch value or use empty string if key not present PdfPCell dynamicCell = new PdfPCell(new Phrase(value != null ? value.toString() : "", textFont)); dynamicCell.setBackgroundColor(new BaseColor(239, 243, 248)); // Light blue for the cell dynamicCell.setMinimumHeight(rowHeight);