[BE][Scans] Match records with db & convert to PDF

master
Araozu 2023-11-16 12:06:53 -05:00
parent 605ee27b4f
commit 0fe2c53ffd
1 changed files with 98 additions and 2 deletions

View File

@ -265,9 +265,105 @@ async fn convert_scans_from_data(data: &Vec<(PathBuf, ScanInfo)>) -> Result<(),
}
};
for e in persons_info {
println!("\n{:?}", e);
// Match the results from DB with the data from the frontend,
// & convert the files to PDFs
for (_, info) in data {
let (person_info, timestamp) = match info {
ScanInfo::Full(dni, id, timestamp) => {
let person_info = persons_info.iter().find(|e| e.register_id == *id);
match person_info {
Some(p) => (p, timestamp),
None => {
log::error!("Register not found in data from DB: {} {}", id, dni);
continue;
}
}
}
ScanInfo::Partial(dni, timestamp) => {
let person_info = persons_info
.iter()
.find(|e| e.person_dni == *dni && e.register_id == 0);
match person_info {
Some(p) => (p, timestamp),
None => {
log::error!("Register not found in data from DB: {}", dni);
continue;
}
}
}
ScanInfo::Error(reason) => {
log::info!("Found an error while matching data with DB: {}", reason);
continue;
}
};
let filename = format!(
"{} {} {} - {} [{:X}].pdf",
person_info.person_names,
person_info.person_paternal_surname,
person_info.person_maternal_surname,
person_info.course_name,
person_info.register_id,
);
let image_path = PathBuf::from(format!("{}eeg_{}.jpg", SCAN_PATH, timestamp));
let output_path = PathBuf::from(format!("{}{}", SCAN_PATH, filename));
match convert_to_pdf(&image_path, &output_path) {
Ok(_) => {
log::info!("Converted file: {}", filename)
}
Err(reason) => {
log::error!("Error converting to pdf: {}", reason);
continue;
}
}
}
Ok(())
}
fn convert_to_pdf(image_path: &PathBuf, output_path: &PathBuf) -> Result<(), String> {
let img = match image::open(image_path) {
Ok(i) => i,
Err(err) => {
log::error!("Error opening image: {:?}", err);
return Err(format!("Error abriendo imagen"));
}
};
// Rotate image 45 degrees clockwise
let img = img.rotate270();
// Generate PDF
let (doc, page1, layer1) =
PdfDocument::new("Certificado - EEGSAC", Mm(297.0), Mm(210.0), "Layer 1");
let current_layer = doc.get_page(page1).get_layer(layer1);
let pdf_image = printpdf::image::Image::from_dynamic_image(&img);
let img_transform = printpdf::ImageTransform::default();
/*
This section of code assumes that the image is scaned at 200 DPI.
IF the image is scanned at a different DPI, this will give
wrong results.
*/
let img_transform = printpdf::ImageTransform {
dpi: Some(200.0),
..img_transform
};
pdf_image.add_to_layer(current_layer, img_transform);
let result = doc.save(&mut BufWriter::new(File::create(output_path).unwrap()));
match result {
Ok(_) => Ok(()),
Err(reason) => {
log::error!("Error saving pdf: {:?}", reason);
Err(format!("Error guardando pdf"))
}
}
}