Untitled
unknown
plain_text
8 months ago
5.9 kB
3
Indexable
private void generateDvirDocument(DvirEntity dvir) throws IOException { try { InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(dvirProperties.getPdfTemplate()); PdfDocument pdfDoc = new PdfDocument(new PdfReader(resourceStream), new PdfWriter("output.pdf")); PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDoc, true); PdfPage page = pdfDoc.getFirstPage(); PdfCanvas canvas = new PdfCanvas(page); PdfFont font = PdfFontFactory.createFont(); var truckDvirEffects = dvirDefectRepository.findAllByType(DvirDefectType.TRUCK_DEFECT); var trailerDvirEffects = dvirDefectRepository.findAllByType(DvirDefectType.TRAILER_DEFECT); LocalDateTime dateTime = LocalDateTime.ofInstant(dvir.getDate(), ZoneId.systemDefault()); var formatedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy dd MMMM HH:mm")); createText(canvas, font, 88, 1305f, formatedDateTime); createText(canvas, font, 212, 1275f , String.valueOf(dvir.getTruck().getId())); createDvirEffectCheckboxes(pdfDoc, acroForm, canvas, 38f, 1220f, truckDvirEffects); createDvirEffectCheckboxes(pdfDoc, acroForm, canvas, 38f, 740f, trailerDvirEffects); markCheckboxes(acroForm, dvir.getDefects()); List<String> trailerIds = dvir.getTrailers().stream() .map(trailer -> String.valueOf(trailer.getId())) .collect(Collectors.toList()); String trailerIdsString = String.join(",", trailerIds); createText(canvas, font, 186, 792, trailerIdsString); createText(canvas, font, 110, 584, dvir.getComment()); createDefaultEnumCheckboxes(pdfDoc, canvas, acroForm); acroForm.getField(dvir.getStatus().getSlug()).setValue("On"); ImageData imageData = ImageDataFactory.create(dvir.getDriverSignature()); imageData.setHeight(30); imageData.setWidth(120); canvas.addImageAt(imageData, 890, 510, false); pdfDoc.close(); } catch (IOException e) { e.printStackTrace(); } } private void createDefaultEnumCheckboxes(PdfDocument pdfDoc, PdfCanvas canvas, PdfAcroForm acroForm) throws IOException { PdfButtonFormField conditionCheckbox = createCheckBox(pdfDoc, new Rectangle(40, 517, 18, 18), "CONDITION OF THE ABOVE VEHICLES IS STATISFACTORY", "NO_DEFECTS", "Off", 16, canvas); PdfButtonFormField correctedCheckbox = createCheckBox(pdfDoc, new Rectangle(40, 469, 18, 18), "ABOVE DEFECTS CORRECTED", "ABOVE_DEFECTS_CORRECTED", "Off", 16, canvas); PdfButtonFormField needCorrect = createCheckBox(pdfDoc, new Rectangle(40, 422, 18, 18), "ABOVE DEFECTS NEED NOT BE CORRECTED FOR SAFE OPERATION OF VEHICLE", "ABOVE_DEFECTS_NEED_TO_BE_CORRECTED", "Off", 16, canvas); acroForm.addField(conditionCheckbox); acroForm.addField(correctedCheckbox); acroForm.addField(needCorrect); } private void createText(PdfCanvas canvas, PdfFont font, float textX, float textY, String text) { canvas.beginText() .setFontAndSize(font, 14) .moveText(textX, textY) .showText(text) .endText(); } private void markCheckboxes(PdfAcroForm acroForm, List<DvirDefectEntity> defectList) { defectList.forEach(defect -> { acroForm.getField(defect.getSlug()).setValue("On"); }); } private void createDvirEffectCheckboxes(PdfDocument pdfDoc, PdfAcroForm acroForm, PdfCanvas canvas, float startX, float startY, List<DvirDefectEntity> dvirDefects) throws IOException { int chunkSize = Math.max(dvirDefects.size() / 3, 1); for (int col = 0; col < 3; col++) { int fromIndex = col * chunkSize; int toIndex = Math.min(fromIndex + chunkSize, dvirDefects.size()); List<DvirDefectEntity> sublist = dvirDefects.subList(fromIndex, toIndex); float x = startX + (col * 300); createCheckboxes(pdfDoc, acroForm, canvas, sublist, x, startY, 30f); } } private void createCheckboxes(PdfDocument pdfDoc, PdfAcroForm acroForm, PdfCanvas canvas, List<DvirDefectEntity> sublist, float startX, float startY, float offsetY) throws IOException { for (int i = 0; i < sublist.size(); i++) { var dvirObj = sublist.get(i); float x = startX; float y = startY - (i * offsetY); Rectangle checkboxRectangle = new Rectangle(x, y, 18, 18); PdfButtonFormField checkbox = createCheckBox(pdfDoc, checkboxRectangle, dvirObj.getName(), dvirObj.getSlug(), "Off", 14, canvas); acroForm.addField(checkbox); } } private PdfButtonFormField createCheckBox(PdfDocument pdfDoc, Rectangle rectangle, String name, String slug, String value, Integer fontSize, PdfCanvas canvas) throws IOException { PdfButtonFormField checkbox = PdfFormField.createCheckBox(pdfDoc, rectangle, slug, value); checkbox.setBorderColor(new DeviceGray(0.75f)); checkbox.setCheckType(PdfFormField.TYPE_CHECK); checkbox.regenerateField(); float textX = rectangle.getX() + rectangle.getWidth() + 5; float textY = rectangle.getY() + rectangle.getWidth() - 14; PdfFont font = PdfFontFactory.createFont(); canvas.beginText() .setFontAndSize(font, fontSize) .moveText(textX, textY) .showText(name) .endText(); return checkbox; }
Editor is loading...
Leave a Comment