Compare commits

...

4 Commits

Author SHA1 Message Date
Jonathan Jenne
d6e3ff3875 add support for more templates 2023-11-17 13:49:00 +01:00
Jonathan Jenne
4bd178d856 Handle vector based signatures 2023-11-17 13:48:39 +01:00
Jonathan Jenne
2b7cd4a209 clean up pages, dont send the document to server 2023-11-17 13:46:38 +01:00
Jonathan Jenne
89e6903c0b update pspdfkit to 2023.5.2 2023-11-17 08:42:39 +01:00
964 changed files with 2046 additions and 1682 deletions

View File

@@ -1,20 +1,18 @@
Imports DigitalData.Modules.Base
Public Class EmailTemplate
Inherits BaseModel
Private _firstBodyTemplate As List(Of String)
Private _DocumentReceivedBodyTemplate As List(Of String)
Private _DocumentSignedBodyTemplate As List(Of String)
Private _DocumentCompletedBodyTemplate As List(Of String)
Private _replaceDictionary As Dictionary(Of String, String)
Public Sub New(pState As State)
MyBase.New(pState)
InitTemplate()
Public Sub New()
InitTemplates()
End Sub
Private Sub InitTemplate()
_firstBodyTemplate = New List(Of String) From {
Private Sub InitTemplates()
_DocumentReceivedBodyTemplate = New List(Of String) From {
"Guten Tag, <NAME_RECEIVER>,",
"",
"<NAME_SENDER> hat Ihnen ein Dokument zum <SIGNATURE_TYPE> gesendet.",
@@ -26,6 +24,24 @@ Public Class EmailTemplate
"Mit freundlichen Grüßen",
"<NAME_SENDER>"
}
_DocumentSignedBodyTemplate = New List(Of String) From {
"Guten Tag, <NAME_RECEIVER>",
"",
"Ihre Unterschrift auf dem Dokument <DOCUMENT_TITLE> wurde verarbeitet.",
"",
"Mit freundlichen Grüßen",
"<NAME_SENDER>"
}
_DocumentCompletedBodyTemplate = New List(Of String) From {
"Guten Tag, <NAME_RECEIVER>",
"",
"Das Dokument <DOCUMENT_TITLE> wurde von allen Beteiligten unterschrieben.",
"",
"Mit freundlichen Grüßen",
"<NAME_SENDER>"
}
End Sub
Private Sub InitDictionary(pEmailData As EmailData)
@@ -35,17 +51,30 @@ Public Class EmailTemplate
{"<SIGNATURE_TYPE>", "signieren"},
{"<LINK_TO_DOCUMENT>", pEmailData.SignatureLink},
{"<LINK_TO_DOCUMENT_TEXT>", $"{pEmailData.SignatureLink.Truncate(40)}.."},
{"<DOCUMENT_TITLE>", pEmailData.EmailSubject},
{"<MESSAGE>", pEmailData.Message}
}
End Sub
Public Sub FillEmailBody(pEmailData As EmailData)
Public Sub FillDocumentReceivedEmailBody(pEmailData As EmailData)
FillEmailBody(pEmailData, _DocumentReceivedBodyTemplate)
End Sub
Public Sub FillDocumentSignedEmailBody(pEmailData As EmailData)
FillEmailBody(pEmailData, _DocumentSignedBodyTemplate)
End Sub
Public Sub FillDocumentCompletedEmailBody(pEmailData As EmailData)
FillEmailBody(pEmailData, _DocumentCompletedBodyTemplate)
End Sub
Public Sub FillEmailBody(pEmailData As EmailData, pTemplate As List(Of String))
InitDictionary(pEmailData)
Dim resultBody As String = ""
For Each lineItem As String In _firstBodyTemplate
For Each lineItem As String In pTemplate
Dim oLineValue As String = lineItem
For Each dictItem As KeyValuePair(Of String, String) In _replaceDictionary
If oLineValue.Contains(dictItem.Key) Then

View File

@@ -23,8 +23,8 @@ Public Class EnvelopeEditorController
MyBase.New(pState)
Envelope = pEnvelope
Envelope.Documents = DocumentModel.List(pEnvelope.Id)
Envelope.Receivers = ReceiverModel.ListEnvelopeReceivers(pEnvelope.Id)
Envelope.Documents = DocumentModel.List(pEnvelope.Id).ToList()
Envelope.Receivers = ReceiverModel.ListEnvelopeReceivers(pEnvelope.Id).ToList()
Thumbnail = New Thumbnail(pState.LogConfig)
End Sub
@@ -46,8 +46,8 @@ Public Class EnvelopeEditorController
.SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, Envelope.Uuid, receiverItem.Signature)
}
Dim oTemplate As New EmailTemplate(State)
oTemplate.FillEmailBody(oEmailData)
Dim oTemplate As New EmailTemplate()
oTemplate.FillDocumentReceivedEmailBody(oEmailData)
If EmailModel.Insert(oEmailData) = False Then
Logger.Error("EMail data could not be inserted.")

View File

@@ -66,14 +66,14 @@ Partial Public Class frmEnvelopeEditor
Me.EnvelopeReceiverBindingSource = New System.Windows.Forms.BindingSource(Me.components)
Me.ViewReceivers = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.colColor = New DevExpress.XtraGrid.Columns.GridColumn()
Me.RepositoryItemPictureEdit2 = New DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit()
Me.RepositoryItemColorEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemColorEdit()
Me.colEmail = New DevExpress.XtraGrid.Columns.GridColumn()
Me.RepositoryItemEmailEdit = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit()
Me.colName = New DevExpress.XtraGrid.Columns.GridColumn()
Me.RepositoryItemPictureEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit()
Me.RepositoryItemColorPickEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemColorPickEdit()
Me.RepositoryItemColorEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemColorEdit()
Me.RepositoryItemImageEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemImageEdit()
Me.RepositoryItemPictureEdit2 = New DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit()
Me.LayoutControlGroup2 = New DevExpress.XtraLayout.LayoutControlGroup()
Me.LayoutControlGroup3 = New DevExpress.XtraLayout.LayoutControlGroup()
Me.LayoutControlItem2 = New DevExpress.XtraLayout.LayoutControlItem()
@@ -115,12 +115,12 @@ Partial Public Class frmEnvelopeEditor
CType(Me.GridReceivers, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.EnvelopeReceiverBindingSource, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.ViewReceivers, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemPictureEdit2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemColorEdit1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemEmailEdit, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemPictureEdit1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemColorPickEdit1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemColorEdit1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemImageEdit1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemPictureEdit2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlGroup2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlGroup3, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem2, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -413,10 +413,11 @@ Partial Public Class frmEnvelopeEditor
Me.colColor.Name = "colColor"
Me.colColor.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.[False]
'
'RepositoryItemPictureEdit2
'RepositoryItemColorEdit1
'
Me.RepositoryItemPictureEdit2.Name = "RepositoryItemPictureEdit2"
Me.RepositoryItemPictureEdit2.SvgImageSize = New System.Drawing.Size(16, 16)
resources.ApplyResources(Me.RepositoryItemColorEdit1, "RepositoryItemColorEdit1")
Me.RepositoryItemColorEdit1.Buttons.AddRange(New DevExpress.XtraEditors.Controls.EditorButton() {New DevExpress.XtraEditors.Controls.EditorButton(CType(resources.GetObject("RepositoryItemColorEdit1.Buttons"), DevExpress.XtraEditors.Controls.ButtonPredefines))})
Me.RepositoryItemColorEdit1.Name = "RepositoryItemColorEdit1"
'
'colEmail
'
@@ -451,18 +452,17 @@ Partial Public Class frmEnvelopeEditor
Me.RepositoryItemColorPickEdit1.ReadOnly = True
Me.RepositoryItemColorPickEdit1.ShowDropDown = DevExpress.XtraEditors.Controls.ShowDropDown.Never
'
'RepositoryItemColorEdit1
'
resources.ApplyResources(Me.RepositoryItemColorEdit1, "RepositoryItemColorEdit1")
Me.RepositoryItemColorEdit1.Buttons.AddRange(New DevExpress.XtraEditors.Controls.EditorButton() {New DevExpress.XtraEditors.Controls.EditorButton(CType(resources.GetObject("RepositoryItemColorEdit1.Buttons"), DevExpress.XtraEditors.Controls.ButtonPredefines))})
Me.RepositoryItemColorEdit1.Name = "RepositoryItemColorEdit1"
'
'RepositoryItemImageEdit1
'
resources.ApplyResources(Me.RepositoryItemImageEdit1, "RepositoryItemImageEdit1")
Me.RepositoryItemImageEdit1.Buttons.AddRange(New DevExpress.XtraEditors.Controls.EditorButton() {New DevExpress.XtraEditors.Controls.EditorButton(CType(resources.GetObject("RepositoryItemImageEdit1.Buttons"), DevExpress.XtraEditors.Controls.ButtonPredefines))})
Me.RepositoryItemImageEdit1.Name = "RepositoryItemImageEdit1"
'
'RepositoryItemPictureEdit2
'
Me.RepositoryItemPictureEdit2.Name = "RepositoryItemPictureEdit2"
Me.RepositoryItemPictureEdit2.SvgImageSize = New System.Drawing.Size(16, 16)
'
'LayoutControlGroup2
'
Me.LayoutControlGroup2.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.[True]
@@ -609,12 +609,12 @@ Partial Public Class frmEnvelopeEditor
CType(Me.GridReceivers, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.EnvelopeReceiverBindingSource, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.ViewReceivers, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemPictureEdit2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemColorEdit1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemEmailEdit, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemPictureEdit1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemColorPickEdit1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemColorEdit1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemImageEdit1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RepositoryItemPictureEdit2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlGroup2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlGroup3, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem2, System.ComponentModel.ISupportInitialize).EndInit()

View File

@@ -447,7 +447,7 @@
<value>0, 0</value>
</data>
<metadata name="EnvelopeReceiverBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>338, 17</value>
<value>17, 95</value>
</metadata>
<data name="GridReceivers.Location" type="System.Drawing.Point, System.Drawing">
<value>14, 35</value>
@@ -787,13 +787,13 @@
<value>0</value>
</data>
<metadata name="FrmEditorBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>801, 17</value>
<value>17, 173</value>
</metadata>
<metadata name="EnvelopeDocumentBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>564, 17</value>
<value>17, 134</value>
</metadata>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>196, 17</value>
<value>17, 56</value>
</metadata>
<data name="OpenFileDialog1.Filter" xml:space="preserve">
<value>PDF Files|*.pdf</value>
@@ -972,11 +972,11 @@
<data name="&gt;&gt;colColor.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RepositoryItemPictureEdit2.Name" xml:space="preserve">
<value>RepositoryItemPictureEdit2</value>
<data name="&gt;&gt;RepositoryItemColorEdit1.Name" xml:space="preserve">
<value>RepositoryItemColorEdit1</value>
</data>
<data name="&gt;&gt;RepositoryItemPictureEdit2.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<data name="&gt;&gt;RepositoryItemColorEdit1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.Repository.RepositoryItemColorEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colEmail.Name" xml:space="preserve">
<value>colEmail</value>
@@ -1008,18 +1008,18 @@
<data name="&gt;&gt;RepositoryItemColorPickEdit1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.Repository.RepositoryItemColorPickEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RepositoryItemColorEdit1.Name" xml:space="preserve">
<value>RepositoryItemColorEdit1</value>
</data>
<data name="&gt;&gt;RepositoryItemColorEdit1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.Repository.RepositoryItemColorEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RepositoryItemImageEdit1.Name" xml:space="preserve">
<value>RepositoryItemImageEdit1</value>
</data>
<data name="&gt;&gt;RepositoryItemImageEdit1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.Repository.RepositoryItemImageEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RepositoryItemPictureEdit2.Name" xml:space="preserve">
<value>RepositoryItemPictureEdit2</value>
</data>
<data name="&gt;&gt;RepositoryItemPictureEdit2.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;LayoutControlGroup2.Name" xml:space="preserve">
<value>LayoutControlGroup2</value>
</data>

View File

@@ -61,6 +61,10 @@
<Reference Include="DigitalData.Controls.DocumentViewer">
<HintPath>..\..\DDMonorepo\Controls.DocumentViewer\bin\Debug\DigitalData.Controls.DocumentViewer.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Base, Version=1.3.6.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DDModules\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Database">
<HintPath>..\..\DDModules\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
</Reference>
@@ -119,6 +123,7 @@
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="PDFBurner.vb" />
<EmbeddedResource Include="frmFieldEditor.resx">
<DependentUpon>frmFieldEditor.vb</DependentUpon>
</EmbeddedResource>

View File

@@ -0,0 +1,162 @@
Imports DevExpress.Pdf
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging
Imports EnvelopeGenerator.PDFBurner
Imports GdPicture14
Imports Newtonsoft.Json
Public Class PDFBurner
Inherits BaseClass
Private ReadOnly LicenseKey As String
Private ReadOnly Manager As AnnotationManager
Private ReadOnly LicenseManager As LicenseManager
Private Const ANNOTATION_TYPE_IMAGE = "pspdfkit/image"
Private Const ANNOTATION_TYPE_INK = "pspdfkit/ink"
Public Sub New(pLogConfig As LogConfig, pGDPictureLicenseKey As String)
MyBase.New(pLogConfig)
LicenseKey = pGDPictureLicenseKey
LicenseManager = New LicenseManager()
LicenseManager.RegisterKEY(pGDPictureLicenseKey)
Manager = New AnnotationManager()
End Sub
Public Function BurnInstantJSONAnnotationsToPDF(pSourcePath As String, pInstantJSONList As List(Of String), pDestinationPath As String) As Boolean
If Manager.InitFromFile(pSourcePath) <> GdPictureStatus.OK Then
Logger.Warn("Could not open file [{0}] for burning.", pSourcePath)
Return False
End If
For Each oJSON In pInstantJSONList
If AddInstantJSONAnnotationToPDF(oJSON) = False Then
Logger.Warn("Adding Annotation failed. Exiting")
Return False
End If
Next
Try
Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True)
Manager.SaveDocumentToPDF(pDestinationPath)
Manager.Close()
Return True
Catch ex As Exception
Logger.Warn("Could not burn and save annotations to file [{0}]!", pDestinationPath)
Logger.Error(ex)
Return False
End Try
End Function
Private Function AddInstantJSONAnnotationToPDF(pInstantJSON As String) As Boolean
Try
Dim oAnnotationData = JsonConvert.DeserializeObject(Of AnnotationData)(pInstantJSON)
For Each oAnnotation In oAnnotationData.annotations
Select Case oAnnotation.type
Case ANNOTATION_TYPE_IMAGE
AddImageAnnotation(oAnnotation, oAnnotationData.attachments)
Case ANNOTATION_TYPE_INK
AddInkAnnotation(oAnnotation)
End Select
Next
Return True
Catch ex As Exception
Logger.Warn("Could not create annotation from InstantJSON")
Logger.Error(ex)
Return False
End Try
End Function
Private Function AddImageAnnotation(pAnnotation As Annotation, pAttachments As Dictionary(Of String, Attachment)) As Boolean
Try
Dim oAttachment = pAttachments.Where(Function(a) a.Key = pAnnotation.imageAttachmentId).
SingleOrDefault()
' Convert pixels to Inches
Dim oBounds = pAnnotation.bbox.Select(AddressOf ToInches).ToList()
Dim oX = oBounds.Item(0)
Dim oY = oBounds.Item(1)
Dim oWidth = oBounds.Item(2)
Dim oHeight = oBounds.Item(3)
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
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)
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
End Function
Private Function ToPointF(pPoints As List(Of Single)) As PointF
Dim oPoints = pPoints.Select(AddressOf ToInches).ToList()
Return New PointF(oPoints.Item(0), oPoints.Item(1))
End Function
Private Function ToInches(pValue As Double) As Double
Return pValue / 72
End Function
Private Function ToInches(pValue As Single) As Single
Return pValue / 72
End Function
Friend Class AnnotationData
Public Property annotations As List(Of Annotation)
Public Property attachments As Dictionary(Of String, Attachment)
End Class
Friend Class Annotation
Public Property id As String
Public Property bbox As List(Of Double)
Public Property type As String
Public Property isSignature As Boolean
Public Property imageAttachmentId As String
Public Property lines As Lines
Public Property pageIndex As Integer
Public Property strokeColor As String
End Class
Friend Class Lines
Public Property points As List(Of List(Of List(Of Single)))
End Class
Friend Class Attachment
Public Property binary As String
Public Property contentType As String
End Class
End Class

View File

@@ -1,9 +1,9 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class frmFinalizePDF
Inherits System.Windows.Forms.Form
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
@@ -20,20 +20,20 @@ Partial Class frmFinalizePDF
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.txtReceiver = New System.Windows.Forms.TextBox()
Me.txtEnvelope = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.Label2 = New System.Windows.Forms.Label()
Me.Button1 = New System.Windows.Forms.Button()
Me.PictureBox1 = New System.Windows.Forms.PictureBox()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.Button2 = New System.Windows.Forms.Button()
Me.txtResult = New System.Windows.Forms.TextBox()
Me.SuspendLayout()
'
'txtReceiver
'
Me.txtReceiver.Location = New System.Drawing.Point(57, 65)
Me.txtReceiver.Location = New System.Drawing.Point(15, 65)
Me.txtReceiver.Name = "txtReceiver"
Me.txtReceiver.Size = New System.Drawing.Size(100, 20)
Me.txtReceiver.TabIndex = 0
@@ -41,7 +41,7 @@ Partial Class frmFinalizePDF
'
'txtEnvelope
'
Me.txtEnvelope.Location = New System.Drawing.Point(57, 23)
Me.txtEnvelope.Location = New System.Drawing.Point(15, 23)
Me.txtEnvelope.Name = "txtEnvelope"
Me.txtEnvelope.Size = New System.Drawing.Size(100, 20)
Me.txtEnvelope.TabIndex = 0
@@ -50,7 +50,7 @@ Partial Class frmFinalizePDF
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(54, 9)
Me.Label1.Location = New System.Drawing.Point(12, 9)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(61, 13)
Me.Label1.TabIndex = 1
@@ -59,7 +59,7 @@ Partial Class frmFinalizePDF
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(54, 46)
Me.Label2.Location = New System.Drawing.Point(12, 46)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(59, 13)
Me.Label2.TabIndex = 1
@@ -67,27 +67,37 @@ Partial Class frmFinalizePDF
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(57, 102)
Me.Button1.Location = New System.Drawing.Point(15, 102)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 23)
Me.Button1.Size = New System.Drawing.Size(166, 23)
Me.Button1.TabIndex = 2
Me.Button1.Text = "Energie!"
Me.Button1.Text = "Write Annotations to PDF"
Me.Button1.UseVisualStyleBackColor = True
'
'PictureBox1
'Button2
'
Me.PictureBox1.Location = New System.Drawing.Point(384, 92)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(341, 170)
Me.PictureBox1.TabIndex = 3
Me.PictureBox1.TabStop = False
Me.Button2.Location = New System.Drawing.Point(15, 131)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(166, 23)
Me.Button2.TabIndex = 3
Me.Button2.Text = "Merge Json"
Me.Button2.UseVisualStyleBackColor = True
'
'TextBox1
'
Me.txtResult.Location = New System.Drawing.Point(333, 12)
Me.txtResult.Multiline = True
Me.txtResult.Name = "TextBox1"
Me.txtResult.Size = New System.Drawing.Size(455, 426)
Me.txtResult.TabIndex = 4
'
'frmFinalizePDF
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(800, 450)
Me.Controls.Add(Me.PictureBox1)
Me.Controls.Add(Me.txtResult)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Label1)
@@ -95,7 +105,6 @@ Partial Class frmFinalizePDF
Me.Controls.Add(Me.txtReceiver)
Me.Name = "frmFinalizePDF"
Me.Text = "frmFinalizePDF"
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
@@ -106,5 +115,6 @@ Partial Class frmFinalizePDF
Friend WithEvents Label1 As Label
Friend WithEvents Label2 As Label
Friend WithEvents Button1 As Button
Friend WithEvents PictureBox1 As PictureBox
Friend WithEvents Button2 As Button
Friend WithEvents txtResult As TextBox
End Class

View File

@@ -4,6 +4,7 @@ Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports GdPicture14
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class frmFinalizePDF
Private Const CONNECTIONSTRING = "Server=sDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=+bk8oAbbQP1AzoHtvZUbd+Mbok2f8Fl4miEx1qssJ5yEaEWoQJ9prg4L14fURpPnqi1WMNs9fE4=;"
@@ -13,84 +14,70 @@ Public Class frmFinalizePDF
Private Viewer As GdPicture14.GdViewer
Private Manager As AnnotationManager
Private PDFBurner As PDFBurner
Private Sub frmFinalizePDF_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LogConfig = New LogConfig(LogConfig.PathType.CustomPath, Application.StartupPath)
Database = New MSSQLServer(LogConfig, MSSQLServer.DecryptConnectionString(CONNECTIONSTRING))
PDFBurner = New PDFBurner(LogConfig, "21182889975216572111813147150675976632")
Manager = New AnnotationManager()
Dim oLicense = New LicenseManager()
oLicense.RegisterKEY("21182889975216572111813147150675976632")
End Sub
Private Function LoadAnnotationData() As String
Private Function LoadAnnotationDataForReceiver() As String
Dim oSql = $"SELECT VALUE FROM [TBSIG_DOCUMENT_STATUS] WHERE ENVELOPE_ID = {txtEnvelope.Text} AND RECEIVER_ID = {txtReceiver.Text}"
Return Database.GetScalarValue(oSql)
End Function
Private Function LoadAnnotationDataForEnvelope() As DataTable
Dim oSql = $"SELECT VALUE FROM [TBSIG_DOCUMENT_STATUS] WHERE ENVELOPE_ID = {txtEnvelope.Text}"
Return Database.GetDatatable(oSql)
End Function
Private Function LoadEnvelopeDocument() As String
Dim oSql = $"SELECT FILEPATH FROM [TBSIG_ENVELOPE_DOCUMENT] WHERE ENVELOPE_ID = {txtEnvelope.Text}"
Return Database.GetScalarValue(oSql)
End Function
Public Class AnnotationData
Public Property annotations As List(Of Annotation)
Public Property attachments As Dictionary(Of String, Attachment)
End Class
Public Class Annotation
Public Property id As String
Public Property bbox As List(Of Double)
Public Property type As String
Public Property isSignature As Boolean
Public Property imageAttachmentId As String
End Class
Public Class Attachment
Public Property binary As String
Public Property contentType As String
End Class
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim oAnnotationData = LoadAnnotationData()
Dim oDocumentPath = LoadEnvelopeDocument()
Dim oTable = LoadAnnotationDataForEnvelope()
Dim oJsonList = oTable.Rows.
Cast(Of DataRow).
Select(Function(r As DataRow) r.Item("VALUE").ToString()).
ToList()
Dim oConverter = JsonConvert.DeserializeObject(Of AnnotationData)(oAnnotationData)
PDFBurner.BurnInstantJSONAnnotationsToPDF(oDocumentPath, oJsonList, $"{oDocumentPath}.burned.pdf")
End Sub
Dim oImages = oConverter.annotations.Where(Function(a) a.type = "pspdfkit/image").ToList()
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Try
Dim oTable = LoadAnnotationDataForEnvelope()
Dim oJsonList = oTable.Rows.
Cast(Of DataRow).
Select(Function(r As DataRow) r.Item("VALUE").ToString()).
Select(Function(s As String) JObject.Parse(s)).
ToList()
Manager.InitFromFile(Application.StartupPath & "/source.pdf")
Dim oJObject1 = oJsonList.First()
Dim oJObject2 = oJsonList.ElementAt(1)
For Each oImage In oImages
Dim oAttachment = oConverter.attachments.Where(Function(a) a.Key = oImage.imageAttachmentId).Single()
Dim oBytes = Convert.FromBase64String(oAttachment.Value.binary)
oJObject1.Merge(oJObject2)
txtResult.Text = oJObject1.ToString()
'Using oStream As New MemoryStream(oBytes)
' Using oFileStream As New FileStream($"{oImage.imageAttachmentId}.png", FileMode.OpenOrCreate)
' oStream.CopyTo(oFileStream)
' oStream.Flush()
' End Using
'End Using
Dim x = oImage.bbox.Item(0) / 72
Dim y = oImage.bbox.Item(1) / 72
Dim w = oImage.bbox.Item(2) / 72
Dim h = oImage.bbox.Item(3) / 72
Catch ex As Exception
Manager.AddEmbeddedImageAnnotFromBase64(oAttachment.Value.binary, x, y, w, h)
Next
Manager.SaveDocumentToPDF("pdf.pdf")
Manager.Close()
End Try
End Sub
End Class

View File

@@ -0,0 +1,192 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using DigitalData.Modules.Base;
using DigitalData.Modules.Logging;
using GdPicture14;
using Newtonsoft.Json;
namespace EnvelopeGenerator.Web.Classes
{
public partial class PDFBurner : BaseClass
{
private readonly string LicenseKey;
private readonly AnnotationManager Manager;
private readonly LicenseManager LicenseManager;
private const string ANNOTATION_TYPE_IMAGE = "pspdfkit/image";
private const string ANNOTATION_TYPE_INK = "pspdfkit/ink";
public PDFBurner(LogConfig pLogConfig, string pGDPictureLicenseKey) : base(pLogConfig)
{
LicenseKey = pGDPictureLicenseKey;
LicenseManager = new LicenseManager();
LicenseManager.RegisterKEY(pGDPictureLicenseKey);
Manager = new AnnotationManager();
}
public bool BurnInstantJSONAnnotationsToPDF(string pSourcePath, List<string> pInstantJSONList, string pDestinationPath)
{
if (Manager.InitFromFile(pSourcePath) != GdPictureStatus.OK)
{
Logger.Warn("Could not open file [{0}] for burning.", pSourcePath);
return false;
}
foreach (var oJSON in pInstantJSONList)
{
if (AddInstantJSONAnnotationToPDF(oJSON) == false)
{
Logger.Warn("Adding Annotation failed. Exiting");
return false;
}
}
try
{
Manager.BurnAnnotationsToPage(RemoveInitialAnnots: true, VectorMode: true);
Manager.SaveDocumentToPDF(pDestinationPath);
Manager.Close();
return true;
}
catch (Exception ex)
{
Logger.Warn("Could not burn and save annotations to file [{0}]!", pDestinationPath);
Logger.Error(ex);
return false;
}
}
private bool AddInstantJSONAnnotationToPDF(string pInstantJSON)
{
try
{
var oAnnotationData = JsonConvert.DeserializeObject<AnnotationData>(pInstantJSON);
foreach (Annotation oAnnotation in oAnnotationData.annotations)
{
switch (oAnnotation.type)
{
case ANNOTATION_TYPE_IMAGE:
{
AddImageAnnotation(oAnnotation, oAnnotationData.attachments);
break;
}
case ANNOTATION_TYPE_INK:
{
AddInkAnnotation(oAnnotation);
break;
}
}
}
return true;
}
catch (Exception ex)
{
Logger.Warn("Could not create annotation from InstantJSON");
Logger.Error(ex);
return false;
}
}
private bool AddImageAnnotation(Annotation pAnnotation, Dictionary<string, Attachment> pAttachments)
{
try
{
var oAttachment = pAttachments.Where(a => (a.Key ?? "") == (pAnnotation.imageAttachmentId ?? "")).SingleOrDefault();
// Convert pixels to Inches
var oBounds = pAnnotation.bbox.Select(ToInches).ToList();
float oX = oBounds[0];
float oY = oBounds[1];
float oWidth = oBounds[2];
float oHeight = oBounds[3];
Manager.AddEmbeddedImageAnnotFromBase64(oAttachment.Value.binary, oX, oY, oWidth, oHeight);
return true;
}
catch (Exception ex)
{
Logger.Warn("Could not add image annotation!");
Logger.Error(ex);
return false;
}
}
private bool AddInkAnnotation(Annotation pAnnotation)
{
try
{
var oSegments = pAnnotation.lines.points;
var oColor = ColorTranslator.FromHtml(pAnnotation.strokeColor);
Manager.SelectPage(pAnnotation.pageIndex);
foreach (List<List<float>> oSegment in oSegments)
{
var oPoints = oSegment.Select(ToPointF).ToArray();
Manager.AddFreeHandAnnot(oColor, oPoints);
}
return true;
}
catch (Exception ex)
{
Logger.Warn("Could not add image annotation!");
Logger.Error(ex);
return false;
}
}
private PointF ToPointF(List<float> pPoints)
{
var oPoints = pPoints.Select(ToInches).ToList();
return new PointF(oPoints[0], oPoints[1]);
}
private float ToInches(float pValue)
{
return pValue / 72f;
}
internal partial class AnnotationData
{
public List<Annotation> annotations { get; set; }
public Dictionary<string, Attachment> attachments { get; set; }
}
internal partial class Annotation
{
public string id { get; set; }
public List<float> bbox { get; set; }
public string type { get; set; }
public bool isSignature { get; set; }
public string imageAttachmentId { get; set; }
public Lines lines { get; set; }
public int pageIndex { get; set; }
public string strokeColor { get; set; }
}
internal partial class Lines
{
public List<List<List<float>>> points { get; set; }
}
internal partial class Attachment
{
public string binary { get; set; }
public string contentType { get; set; }
}
}
}

View File

@@ -7,6 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.2.5" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
@@ -32,6 +33,9 @@
<Reference Include="DigitalData.Modules.Logging">
<HintPath>..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
</Reference>
<Reference Include="GdPicture.NET.14">
<HintPath>D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

View File

@@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Privacy Policy";
ViewData["Title"] = "Dokument unterschrieben";
}
<div id="page-success" class="container p-5">
@@ -10,11 +10,11 @@
<path d="M15.354 3.354a.5.5 0 0 0-.708-.708L8 9.293 5.354 6.646a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l7-7z" />
</svg>
</div>
<h1>Umschlag erfolgreich signiert!</h1>
<h1>Dokument erfolgreich signiert!</h1>
</header>
<section class="text-center">
<p>Sie haben das Dokument erfolgreich signiert. Im Anschluss erhalten Sie eine schriftliche Bestätigung.</p>
<p>Sie haben das Dokument signiert. Im Anschluss erhalten Sie eine schriftliche Bestätigung.</p>
</section>

View File

@@ -20,18 +20,5 @@
}
</ul>
</section>
<section>
<a href="#" id="url" target="_blank">Show image</a>
<img src="#" id="img" />
</section>
<script>
document.addEventListener("DOMContentLoaded", function() {
const anno = new Annotation()
anno.createAnnotationFrameBlob("Deine Mudda", 200, 80).then(url => document.getElementById("img").src = url)
})
</script>
</div>

View File

@@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Privacy Policy";
ViewData["Title"] = "Dokument unterschreiben";
}
<script>

View File

@@ -64,8 +64,7 @@
id: id,
pageIndex: pageIndex,
formFieldName: id,
boundingBox: new PSPDFKit.Geometry.Rect({ width, height, top, left }),
backgroundColor: new PSPDFKit.Color({ r: 225, g: 29, b: 72 })
boundingBox: new PSPDFKit.Geometry.Rect({ width, height, top, left })
})
return annotation

View File

@@ -185,19 +185,6 @@ class App {
return false;
}
// Flatten the annotations and save the document to disk
try {
const buffer = await this.Instance.exportPDF({ flatten: true });
const postDocumentResult = await this.Network.postDocument(this.envelopeKey, this.currentDocument.id, buffer);
if (postDocumentResult === false) {
return false;
}
} catch (e) {
console.error(e);
return false;
}
return true;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[3005],{12282:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{cs:{categories:{cardinal:["one","few","many","other"],ordinal:["other"]},fn:function(a,e){var l=String(a).split("."),t=l[0],n=!l[1];return e?"other":1==a&&n?"one":t>=2&&t<=4&&n?"few":n?"other":"many"}}},availableLocales:["cs"]})}}]);

View File

@@ -0,0 +1,13 @@
/*!
* PSPDFKit for Web 2023.5.2 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[3005],{12282:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{cs:{categories:{cardinal:["one","few","many","other"],ordinal:["other"]},fn:function(a,e){var l=String(a).split("."),t=l[0],n=!l[1];return e?"other":1==a&&n?"one":t>=2&&t<=4&&n?"few":n?"other":"many"}}},availableLocales:["cs"]})}}]);

View File

@@ -0,0 +1,13 @@
/*!
* PSPDFKit for Web 2023.5.2 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[7050],{26873:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{cy:{categories:{cardinal:["zero","one","two","few","many","other"],ordinal:["zero","one","two","few","many","other"]},fn:function(e,a){return a?0==e||7==e||8==e||9==e?"zero":1==e?"one":2==e?"two":3==e||4==e?"few":5==e||6==e?"many":"other":0==e?"zero":1==e?"one":2==e?"two":3==e?"few":6==e?"many":"other"}}},availableLocales:["cy"]})}}]);

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[7050],{26873:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{cy:{categories:{cardinal:["zero","one","two","few","many","other"],ordinal:["zero","one","two","few","many","other"]},fn:function(e,a){return a?0==e||7==e||8==e||9==e?"zero":1==e?"one":2==e?"two":3==e||4==e?"few":5==e||6==e?"many":"other":0==e?"zero":1==e?"one":2==e?"two":3==e?"few":6==e?"many":"other"}}},availableLocales:["cy"]})}}]);

View File

@@ -0,0 +1,13 @@
/*!
* PSPDFKit for Web 2023.5.2 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[752],{5407:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{da:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,l){var e=String(a).split("."),t=e[0],n=Number(e[0])==a;return l||1!=a&&(n||0!=t&&1!=t)?"other":"one"}}},availableLocales:["da"]})}}]);

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[752],{5407:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{da:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,l){var e=String(a).split("."),t=e[0],n=Number(e[0])==a;return l||1!=a&&(n||0!=t&&1!=t)?"other":"one"}}},availableLocales:["da"]})}}]);

View File

@@ -0,0 +1,13 @@
/*!
* PSPDFKit for Web 2023.5.2 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[8869],{60333:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{de:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,e){var l=!String(a).split(".")[1];return e?"other":1==a&&l?"one":"other"}}},availableLocales:["de"]})}}]);

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[8869],{60333:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{de:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,e){var l=!String(a).split(".")[1];return e?"other":1==a&&l?"one":"other"}}},availableLocales:["de"]})}}]);

View File

@@ -0,0 +1,13 @@
/*!
* PSPDFKit for Web 2023.5.2 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[1882],{80056:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{el:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,e){return e?"other":1==a?"one":"other"}}},availableLocales:["el"]})}}]);

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[1882],{80056:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{el:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,e){return e?"other":1==a?"one":"other"}}},availableLocales:["el"]})}}]);

View File

@@ -0,0 +1,13 @@
/*!
* PSPDFKit for Web 2023.5.2 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[5014],{32778:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{en:{categories:{cardinal:["one","other"],ordinal:["one","two","few","other"]},fn:function(e,a){var l=String(e).split("."),t=!l[1],n=Number(l[0])==e,o=n&&l[0].slice(-1),r=n&&l[0].slice(-2);return a?1==o&&11!=r?"one":2==o&&12!=r?"two":3==o&&13!=r?"few":"other":1==e&&t?"one":"other"}}},availableLocales:["en"]})}}]);

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[5014],{32778:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{en:{categories:{cardinal:["one","other"],ordinal:["one","two","few","other"]},fn:function(e,a){var l=String(e).split("."),t=!l[1],n=Number(l[0])==e,o=n&&l[0].slice(-1),r=n&&l[0].slice(-2);return a?1==o&&11!=r?"one":2==o&&12!=r?"two":3==o&&13!=r?"few":"other":1==e&&t?"one":"other"}}},availableLocales:["en"]})}}]);

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[1252],{53802:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{es:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,e){return e?"other":1==a?"one":"other"}}},availableLocales:["es"]})}}]);

View File

@@ -0,0 +1,13 @@
/*!
* PSPDFKit for Web 2023.5.2 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[1252],{53802:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{es:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,e){return e?"other":1==a?"one":"other"}}},availableLocales:["es"]})}}]);

View File

@@ -1,13 +0,0 @@
/*!
* PSPDFKit for Web 2023.4.6 (https://pspdfkit.com/web)
*
* Copyright (c) 2016-2023 PSPDFKit GmbH. All rights reserved.
*
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT.
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
* This notice may not be removed from this file.
*
* PSPDFKit uses several open source third-party components: https://pspdfkit.com/acknowledgements/web/
*/
(self.webpackChunkPSPDFKit=self.webpackChunkPSPDFKit||[]).push([[5528],{15857:()=>{Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{fi:{categories:{cardinal:["one","other"],ordinal:["other"]},fn:function(a,l){var e=!String(a).split(".")[1];return l?"other":1==a&&e?"one":"other"}}},availableLocales:["fi"]})}}]);

Some files were not shown because too many files have changed in this diff Show More