Поделиться через


Добавление запроса подписи в документ XPS

В этом разделе описывается, как добавить запрос подписи в документ XPS. Запрос подписи предложит пользователю подписать документ, если он или она согласен с намерением подписи.

Прежде чем использовать приведенные ниже примеры кода в программе, прочтите заявление об отказе в задачах программирования Common Digital Signature.

Чтобы добавить запрос подписи в документ XPS, выполните следующие действия.

  1. Загрузите документ XPS в диспетчер подписей, как описано в разделе "Инициализация диспетчера подписей".
  2. Добавьте блок подписи в диспетчер подписей.
  3. Создайте запрос подписи в новом блоке подписи.
  4. Задайте свойства запроса подписи:
    1. Задайте намерение подписи.
    2. Задайте имя пользователя, подпись которого запрашивается (запрошенный подписыватель).
    3. Задайте дату, когда требуется подпись.
    4. Задайте другие свойства подписи по мере необходимости.

В следующем примере кода показано, как добавить запрос подписи в документ XPS.

HRESULT 
AddSignatureRequestToDocument (
    __in IXpsSignatureManager    *signatureManager,
    __in LPCWSTR                reasonForSignatureRequest,
    __in LPCWSTR                nameOfRequestedSigner,
    __in LPCWSTR                requestSignByDate
)
{
    HRESULT                  hr = S_OK;
    IXpsSignatureBlock       *signatureDefinition = NULL;
    IXpsSignatureRequest     *signatureRequest = NULL;
    
    // Create a new signature block and get a pointer to it
    hr = signatureManager->AddSignatureBlock (NULL, 0, &signatureDefinition);
    
    if (SUCCEEDED(hr)) {
        // Create a new signature request to use for this signature block
        hr = signatureDefinition->CreateRequest(NULL, &signatureRequest);
    }

    if (SUCCEEDED(hr)) {
        // Initialize the properties of the signature request

        //  Set the string that describes the purpose of the signature
        //  to the person who will sign the document.
        hr = signatureRequest->SetIntent(reasonForSignatureRequest);
    }

    if (SUCCEEDED(hr)) {
        //  Set the name of the person whose signature is requested.
        hr = signatureRequest->SetRequestedSigner(nameOfRequestedSigner);
    }

    if (SUCCEEDED(hr)) {
        //  Set the date that the person should sign the document.
        //  The person is requested to sign the document on or before
        //   the date specified in this field. Refer to the help text
        //   for the correct format of this string.
        hr = signatureRequest->SetRequestSignByDate(requestSignByDate);
    }

    if (NULL != signatureDefinition) signatureDefinition->Release();
    if (NULL != signatureRequest) signatureRequest->Release();

    return hr;
}

Используется в этом разделе

IXpsSignatureBlock

IXpsSignatureBlock::CreateRequest

IXpsSignatureManager

IXpsSignatureManager::AddSignatureBlock

IXpsSignatureRequest

IXpsSignatureRequest::SetIntent

IXpsSignatureRequest::SetRequestedSigner

IXpsSignatureRequest::SetRequestSignByDate

Дополнительные сведения

Ошибки API цифровых подписей XPS

Ошибки документа XPS

Спецификация XML-бумаги