예제 #1
0
        public async Task <ActionResult> DigitalSignatureReport(int reportId, [FromBody] DigitalSignatureViewModel digitalSignatureViewModel)
        {
            try
            {
                var report = _reportService.GetReport(reportId);

                byte[] signedPdfDocument = _digitalSignature.SetDigitalSignature(digitalSignatureViewModel, reportId);

                await _reportService.SignedReport(reportId);

                await _graphServiceFiles.CreateSignedFileInSharedDrive(Token, report.ReportType.Name, signedPdfDocument);

                return(Ok());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
        public byte[] SetDigitalSignature(DigitalSignatureViewModel digitalSignature, int reportId)
        {
            try
            {
                Report report           = _reportService.GetReport(reportId);
                byte[] pdfDocumentBytes = _documentService.GetSignedPdfDocument(report, report.SignerUser.FirstName, report.SignerUser.LastName);

                Stream streamCertificate = new FileStream(CertificatePath, FileMode.Open);

                PdfLoadedDocument pdfLoadedDocument = new PdfLoadedDocument(pdfDocumentBytes);
                PdfCertificate    pdfCertificate    = new PdfCertificate(streamCertificate, CertificatePassword);

                FileStream jpgFile = new FileStream(ImagePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

                PdfBitmap   bmp  = new PdfBitmap(jpgFile);
                PdfPageBase page = pdfLoadedDocument.Pages[0];

                PdfSignature signature = new PdfSignature(pdfLoadedDocument, page, pdfCertificate, "Signature");
                signature.Bounds = new RectangleF(new PointF(5, 5), page.Size);

                signature.ContactInfo  = report.SignerUser.UserName;
                signature.LocationInfo = digitalSignature.Location;
                signature.Reason       = digitalSignature.Reason;

                MemoryStream stream = new MemoryStream();

                pdfLoadedDocument.Save(stream);
                pdfLoadedDocument.Close(true);

                return(stream.ToArray());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }