public async void CreateInstruction(InstructionDraft instructionDraft) { var pdfCreated = _instructionPdfService.CreateInstructionPdf(instructionDraft); var instructions = new List <Instruction>(); var instructor = await GetUser(instructionDraft.Instructor); for (var i = 0; i < instructionDraft.Instructed.Count; i++) { var instructionPath = pdfCreated[i]; if (instructionPath is null) { continue; } var userDraft = instructionDraft.Instructed[i]; var user = await GetUser(userDraft); var instruction = new Instruction { DeviceId = instructionDraft.Device.Id, AllowedActivities = instructionDraft.OnlyFor, ForbiddenActivities = instructionDraft.ExceptFor, Path = instructionPath, InstructorId = instructor.Id, InstructedId = user.Id, CreatedAt = DateTime.Now, }; instruction = await _instructionDataService.Create(instruction); instructions.Add(instruction); } ArchiveOlderInstructions(instructions); }
public IList <string> CreateInstructionPdf(InstructionDraft instructionDraft) { var device = instructionDraft.Device; var instructionFolderPath = GetDeviceInstructionsPath(device); return((from userDraft in instructionDraft.Instructed let instructionPath = Path.Combine(instructionFolderPath, userDraft.FileName) select FillAndSavePdf(userDraft, instructionDraft, instructionPath)).ToList()); }
private string FillAndSavePdf(UserDraft userDraft, InstructionDraft instructionDraft, string instructionPath) { try { using var reader = new PdfReader(_templateFilePath); using var writer = new PdfWriter(instructionPath); using var pdf = new PdfDocument(reader, writer); var form = PdfAcroForm.GetAcroForm(pdf, true); var doc = new Document(pdf); form.SetGenerateAppearance(true); form.GetField("deviceName").SetValue(instructionDraft.Device.Name); form.GetField("deviceChief").SetValue(instructionDraft.Device.Chief?.FullName ?? string.Empty); form.GetField("onlyFor").SetValue(instructionDraft.OnlyFor ?? string.Empty); form.GetField("notFor").SetValue(instructionDraft.ExceptFor ?? string.Empty); form.GetField("instructor").SetValue(instructionDraft.Instructor.FullName); form.GetField("instructed").SetValue(userDraft.FullName); form.GetField("instructionDate").SetValue(DateTime.Today.ToString("d", CultureInfo.CurrentCulture)); //var signatureImage = PositionImage(form, "instructorSignature", instructionDraft.Instructor.Signature); //var instructedImage = PositionImage(form, "instructedSignature", userDraft.Signature); //doc.Add(signatureImage); //doc.Add(instructedImage); form.RemoveField("instructorSignature"); form.RemoveField("instructedSignature"); doc.Close(); pdf.Close(); } catch (Exception e) { _logger.Error(e, "Instruction pdf could not be filled or saved."); if (File.Exists(instructionPath)) { File.Delete(instructionPath); } return(null); } return(instructionPath); }