diff --git a/EnvelopeGenerator.CommonServices/EnvelopeGenerator.CommonServices.vbproj b/EnvelopeGenerator.CommonServices/EnvelopeGenerator.CommonServices.vbproj index 33142ec8..c74cf276 100644 --- a/EnvelopeGenerator.CommonServices/EnvelopeGenerator.CommonServices.vbproj +++ b/EnvelopeGenerator.CommonServices/EnvelopeGenerator.CommonServices.vbproj @@ -563,6 +563,10 @@ {63e32615-0eca-42dc-96e3-91037324b7c7} EnvelopeGenerator.Infrastructure + + {211619f5-ae25-4ba5-a552-bacafe0632d3} + EnvelopeGenerator.PdfEditor + diff --git a/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb b/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb index b2b1157d..50d6d0bf 100644 --- a/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb +++ b/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb @@ -5,6 +5,7 @@ Imports DigitalData.Modules.Logging Imports GdPicture14 Imports Newtonsoft.Json Imports EnvelopeGenerator.CommonServices.Jobs.FinalizeDocument.FinalizeDocumentExceptions +Imports DevExpress.DataProcessing Namespace Jobs.FinalizeDocument Public Class PDFBurner @@ -40,11 +41,13 @@ Namespace Jobs.FinalizeDocument ' Add annotation to PDF For Each oJSON In pInstantJSONList - If AddInstantJSONAnnotationToPDF(oJSON) = False Then + Try + AddInstantJSONAnnotationToPDF(oJSON) + Catch ex As Exception Logger.Warn($"Error in AddInstantJSONAnnotationToPDF - oJson: ") Logger.Warn(oJSON) - Throw New BurnAnnotationException($"Adding Annotation failed") - End If + Throw New BurnAnnotationException($"Adding Annotation failed", ex) + End Try Next oResult = Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True) If oResult <> GdPictureStatus.OK Then @@ -65,125 +68,94 @@ Namespace Jobs.FinalizeDocument End Using End Function - Private Function AddInstantJSONAnnotationToPDF(pInstantJSON As String) As Boolean - Try - Dim oAnnotationData = JsonConvert.DeserializeObject(Of AnnotationData)(pInstantJSON) - oAnnotationData.annotations.Reverse() + Private Function AddInstantJSONAnnotationToPDF(pInstantJSON As String) As Void + Dim oAnnotationData = JsonConvert.DeserializeObject(Of AnnotationData)(pInstantJSON) + oAnnotationData.annotations.Reverse() - Dim sigAnnotType = oAnnotationData.annotations.ElementAt(1).type - Dim yPosOfSigAnnot = oAnnotationData.annotations.ElementAt(2).bbox.ElementAt(1) - 71.84002685546875 + 7 - Dim isSeal = True 'First element is signature seal + Dim sigAnnotType = oAnnotationData.annotations.ElementAt(1).type + Dim yPosOfSigAnnot = oAnnotationData.annotations.ElementAt(2).bbox.ElementAt(1) - 71.84002685546875 + 7 + Dim isSeal = True 'First element is signature seal - Dim formFieldIndex = 0 - For Each oAnnotation In oAnnotationData.annotations - Logger.Debug("Adding AnnotationID: " + oAnnotation.id) + Dim formFieldIndex = 0 + For Each oAnnotation In oAnnotationData.annotations + Logger.Debug("Adding AnnotationID: " + oAnnotation.id) - Select Case oAnnotation.type - Case ANNOTATION_TYPE_IMAGE + Select Case oAnnotation.type + Case ANNOTATION_TYPE_IMAGE - If (isSeal) Then - oAnnotation.bbox.Item(1) = yPosOfSigAnnot - End If + If (isSeal) Then + oAnnotation.bbox.Item(1) = yPosOfSigAnnot + End If - AddImageAnnotation(oAnnotation, oAnnotationData.attachments) + AddImageAnnotation(oAnnotation, oAnnotationData.attachments) + Exit Select - Case ANNOTATION_TYPE_INK - AddInkAnnotation(oAnnotation) + Case ANNOTATION_TYPE_INK + AddInkAnnotation(oAnnotation) + Exit Select - Case ANNOTATION_TYPE_WIDGET - 'Add form field values - Dim formFieldValue = oAnnotationData.formFieldValues.FirstOrDefault(Function(fv) fv.name = oAnnotation.id) - If formFieldValue IsNot Nothing AndAlso Not _pdfBurnerParams.IgnoredLabels.Contains(formFieldValue.value) Then - AddFormFieldValue(oAnnotation, formFieldValue, formFieldIndex) - formFieldIndex += 1 - End If - End Select + Case ANNOTATION_TYPE_WIDGET + 'Add form field values + Dim formFieldValue = oAnnotationData.formFieldValues.FirstOrDefault(Function(fv) fv.name = oAnnotation.id) + If formFieldValue IsNot Nothing AndAlso Not _pdfBurnerParams.IgnoredLabels.Contains(formFieldValue.value) Then + AddFormFieldValue(oAnnotation, formFieldValue, formFieldIndex) + formFieldIndex += 1 + End If + Exit Select + End Select - isSeal = False - Next - - Return True - Catch ex As Exception - Logger.Warn("Could not create annotation from InstantJSON") - Logger.Error(ex) - Return False - End Try + isSeal = False + Next End Function - Private Function AddImageAnnotation(pAnnotation As Annotation, pAttachments As Dictionary(Of String, Attachment), Optional yOffset As Double = 0) As Boolean - Try - Dim oAttachment = pAttachments.Where(Function(a) a.Key = pAnnotation.imageAttachmentId). - SingleOrDefault() + Private Function AddImageAnnotation(pAnnotation As Annotation, pAttachments As Dictionary(Of String, Attachment), Optional yOffset As Double = 0) As Void + Dim oAttachment = pAttachments.Where(Function(a) a.Key = pAnnotation.imageAttachmentId). + SingleOrDefault() - ' Convert pixels to Inches - Dim oBounds = pAnnotation.bbox.Select(AddressOf ToInches).ToList() + ' Convert pixels to Inches + Dim oBounds = pAnnotation.bbox.Select(AddressOf ToInches).ToList() - Dim oX = oBounds.Item(0) - Dim oY = oBounds.Item(1) + yOffset - Dim oWidth = oBounds.Item(2) - Dim oHeight = oBounds.Item(3) + Dim oX = oBounds.Item(0) + Dim oY = oBounds.Item(1) + yOffset + Dim oWidth = oBounds.Item(2) + Dim oHeight = oBounds.Item(3) - Manager.SelectPage(pAnnotation.pageIndex + 1) - Manager.AddEmbeddedImageAnnotFromBase64(oAttachment.Value.binary, oX, oY, oWidth, oHeight) - - Return True - Catch ex As Exception - Logger.Warn("Could not add image annotation!") - Logger.Error(ex) - - Return False - End Try + Manager.SelectPage(pAnnotation.pageIndex + 1) + Manager.AddEmbeddedImageAnnotFromBase64(oAttachment.Value.binary, oX, oY, oWidth, oHeight) End Function - Private Function AddInkAnnotation(pAnnotation As Annotation) As Boolean - Try - Dim oSegments = pAnnotation.lines.points - Dim oColor = ColorTranslator.FromHtml(pAnnotation.strokeColor) - Manager.SelectPage(pAnnotation.pageIndex + 1) + Private Function AddInkAnnotation(pAnnotation As Annotation) As Void + Dim oSegments = pAnnotation.lines.points + Dim oColor = ColorTranslator.FromHtml(pAnnotation.strokeColor) + Manager.SelectPage(pAnnotation.pageIndex + 1) - For Each oSegment As List(Of List(Of Single)) In oSegments - Dim oPoints = oSegment. - Select(AddressOf ToPointF). - ToArray() - - Manager.AddFreeHandAnnot(oColor, oPoints) - Next - - Return True - Catch ex As Exception - Logger.Warn("Could not add image annotation!") - Logger.Error(ex) - - Return False - End Try + For Each oSegment As List(Of List(Of Single)) In oSegments + Dim oPoints = oSegment. + Select(AddressOf ToPointF). + ToArray() + Manager.AddFreeHandAnnot(oColor, oPoints) + Next End Function - Private Function AddFormFieldValue(pAnnotation As Annotation, formFieldValue As FormFieldValue, index As Integer) As Boolean - Try - ' Convert pixels to Inches - Dim oBounds = pAnnotation.bbox.Select(AddressOf ToInches).ToList() + Private Function AddFormFieldValue(pAnnotation As Annotation, formFieldValue As FormFieldValue, index As Integer) As Void + ' Convert pixels to Inches + Dim oBounds = pAnnotation.bbox.Select(AddressOf ToInches).ToList() - Dim oX = oBounds.Item(0) - Dim oY = oBounds.Item(1) + _pdfBurnerParams.YOffset * index + _pdfBurnerParams.TopMargin - Dim oWidth = oBounds.Item(2) - Dim oHeight = oBounds.Item(3) + Dim oX = oBounds.Item(0) + Dim oY = oBounds.Item(1) + _pdfBurnerParams.YOffset * index + _pdfBurnerParams.TopMargin + Dim oWidth = oBounds.Item(2) + Dim oHeight = oBounds.Item(3) - Manager.SelectPage(pAnnotation.pageIndex + 1) - ' Add the text annotation - Dim ant = Manager.AddTextAnnot(oX, oY, oWidth, oHeight, formFieldValue.value) + Manager.SelectPage(pAnnotation.pageIndex + 1) + ' Add the text annotation + Dim ant = Manager.AddTextAnnot(oX, oY, oWidth, oHeight, formFieldValue.value) - ' Set the font properties - ant.FontName = _pdfBurnerParams.FontName - ant.FontSize = _pdfBurnerParams.FontSize - ant.FontStyle = _pdfBurnerParams.FontStyle - Manager.SaveAnnotationsToPage() - Return True - Catch ex As Exception - Logger.Warn("Could not add image annotation!") - Logger.Error(ex) - Return False - End Try + ' Set the font properties + ant.FontName = _pdfBurnerParams.FontName + ant.FontSize = _pdfBurnerParams.FontSize + ant.FontStyle = _pdfBurnerParams.FontStyle + Manager.SaveAnnotationsToPage() End Function Private Function ToPointF(pPoints As List(Of Single)) As PointF