cosign - api: ошибка при вызове SignatureFieldCreateSign
Я хочу подписать PDF документ, я использую CoSign API, код был написан на vb6. Когда я использую SAPI.SignetureFieldCreateSign (создать подпись и подписать документ), этот метод должен возвращать 0, если все в порядке, но возвращает -1878850896.
Мой код:
Private Sub SignPDF()
Пользовательские ценности
Dim rc As Integer
Dim SAPI As New SAPICrypt
Dim SESHandle As New SESHandle
Dim SFS As New SAPILib.SigFieldSettings
Dim TF As New SAPILib.timeFormat
Dim fileType As SAPI_ENUM_FILE_TYPE
Dim objFSO As FileSystemObject
Dim objFile As File
Dim objFolder As Folder
Dim strFolderPath As String
Dim flags As Integer
Dim filePath As String 'PDF file to sign
Dim username As String 'CoSign account username
Dim password As String 'CoSign account password
Dim domain As String 'CoSign account domain
Dim sigPageNum As Integer 'Create signature on the first page
Dim sigX As Integer 'Signature field X location
Dim sigY As Integer 'Signature field Y location
Dim sigWidth As Integer 'Signature field width
Dim sigHeight As Integer 'Signature field height
Dim timeFormat As String 'The display format of the time
Dim dateFormat As String 'The display format of the date
Dim appearanceMask As Integer 'Elements to display on the signature field
'Initialize variables
fileType = SAPI_ENUM_FILE_TYPE.SAPI_ENUM_FILE_ADOBE 'Type of the file to sign - PDF
flags = 0
strFolderPath = "C:\Users\jennya\Desktop\pdfFiles\"
username = "MyUsername"
password = "MyPassword"
domain = ""
sigPageNum = 1
sigX = 145
sigY = 125
sigWidth = 160
sigHeight = 45
timeFormat = "hh:mm:ss"
dateFormat = "dd/MM/yyyy"
appearanceMask = SAPI_ENUM_DRAWING_ELEMENT.SAPI_ENUM_DRAWING_ELEMENT_GRAPHICAL_IMAGE Or _
SAPI_ENUM_DRAWING_ELEMENT.SAPI_ENUM_DRAWING_ELEMENT_SIGNED_BY Or _
SAPI_ENUM_DRAWING_ELEMENT.SAPI_ENUM_DRAWING_ELEMENT_TIME
"Создание и внедрение SAPI"
'Initialize SAPI library
rc = SAPI.Init
If rc <> SAPI_OK Then
MsgBox "error initializing SAPI", vbOKOnly, "Error"
'Exit Sub
End If
"HandleAcquire
'Acquire SAPI session handle
rc = SAPI.HandleAcquire(SESHandle)
If rc <> SAPI_OK Then
MsgBox "Failed in SAPIHandleAcquire"
End If
"Вход в систему
'Personalize SAPI Session
rc = SAPI.Logon(SESHandle, username, domain, password)
If rc <> SAPI_OK Then
MsgBox "Failed to authenticate user"
End If
'Определение параметров поля подписи
'Define signature field settings
SFS.Page = sigPageNum
SFS.x = sigX
SFS.y = sigY
SFS.Width = sigWidth
SFS.Height = sigHeight
SFS.appearanceMask = appearanceMask
SFS.SignatureType = SAPI_ENUM_SIGNATURE_TYPE.SAPI_ENUM_SIGNATURE_DIGITAL
SFS.DependencyMode = SAPI_ENUM_DEPENDENCY_MODE.SAPI_ENUM_DEPENDENCY_MODE_INDEPENDENT
TF.dateFormat = dateFormat
TF.timeFormat = timeFormat
TF.ExtTimeFormat = SAPI_ENUM_EXTENDED_TIME_FORMAT.SAPI_ENUM_EXTENDED_TIME_FORMAT_GMT 'Display GMT offset
SFS.timeFormat = TF
"Подписание
Set objFSO = New FileSystemObject 'creates a new File System Object reference
If objFSO.FolderExists(strFolderPath) Then 'check if Source folder exists
Set objFolder = objFSO.GetFolder(strFolderPath) 'get Source folder
For Each objFile In objFolder.Files 'for every file in the folder.
filePath = objFile.Path
'Create and sign a new signature field in the document
rc = SAPI.SignatureFieldCreateSign(SESHandle, fileType, filePath, SFS, flags, "")
If rc <> SAPI_OK Then
MsgBox "Failed in SAPISignatureFieldCreateSign"
End If
Next
Else
MsgBox "Folder not exists"
End If
'Убираться
'Release user context
rc = SAPI.Logoff(SESHandle)
If rc <> SAPI_OK Then
MsgBox "Failed to Logoff"
End If
SAPI.Finalize
End Sub
1 ответ
Ошибка, которую вы получили "-1878850896" при преобразовании в шестнадцатеричное значение, составляет 900302B0. Если вы посмотрите на эту ошибку в Справочном руководстве по SAPI (вы можете найти онлайн-версию по адресу: http://www.arx.com/api - см. Точное местоположение здесь), вы найдете следующее:
SAPI_ERR_TOO_MANY_CERTS_TO_SELECT_FROM Не удалось получить сертификат по умолчанию. У пользователя более одного сертификата, и SAPI не может определить, какой из них следует использовать по умолчанию. 0x900302b0
Это означает, что учетная запись CoSign, с которой вы пытались подписать, содержит более одного сертификата подписи, а в коде SAPI вы не указали сертификат по умолчанию, который будет использоваться для подписи.
Ari