Untitled
unknown
plain_text
a year ago
5.9 kB
10
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