1

我试过 Req.OptionalInputs.FieldLocatorOpeningPattern = "<<"; Req.OptionalInputs.FieldLocatorClosingPattern = ">>";

但是符号不会替换 pdf 中提供的空间。您能否提供使用 Soap API 的代码示例。

4

1 回答 1

1

请参阅下面的代码示例,了解将 CoSign 签名 SOAP API(又名 SAPIWS)与 CoSign 签名定位器一起使用:

    public SAPISigFieldSettingsType[] getSigFieldLocatorsInPDF(
        string FileName,
        string UserName,
        string Password)
    {

        //Create Request object contains signature parameters
        RequestBaseType Req = new RequestBaseType();
        Req.OptionalInputs = new RequestBaseTypeOptionalInputs();

        //Here Operation Type is set: enum-field-locators
        Req.OptionalInputs.SignatureType = SignatureTypeFieldLocators;

        //Configure Create and Sign operation parameters:
        Req.OptionalInputs.ClaimedIdentity = new ClaimedIdentity();
        Req.OptionalInputs.ClaimedIdentity.Name = new NameIdentifierType();
        Req.OptionalInputs.ClaimedIdentity.Name.Value = UserName;                       //User Name
        Req.OptionalInputs.ClaimedIdentity.Name.NameQualifier = " ";                    //Domain (relevant for Active Directory environment only)
        Req.OptionalInputs.ClaimedIdentity.SupportingInfo = new CoSignAuthDataType();
        Req.OptionalInputs.ClaimedIdentity.SupportingInfo.LogonPassword = Password;     //User Password
        Req.OptionalInputs.FieldLocatorOpeningPattern = "<<";
        Req.OptionalInputs.FieldLocatorClosingPattern = ">>";

        //Set Session ID
        Req.RequestID = Guid.NewGuid().ToString();

        //Prepare the Data to be signed
        DocumentType doc1 = new DocumentType();
        DocumentTypeBase64Data b64data = new DocumentTypeBase64Data();
        Req.InputDocuments = new RequestBaseTypeInputDocuments();
        Req.InputDocuments.Items = new object[1];

        b64data.MimeType = "application/pdf";     //Can also be: application/msword, image/tiff, pplication/octet-string
        Req.OptionalInputs.ReturnPDFTailOnlySpecified = true;
        Req.OptionalInputs.ReturnPDFTailOnly = false;
        b64data.Value = ReadFile(FileName, true); //Read the file to the Bytes Array

        doc1.Item = b64data;
        Req.InputDocuments.Items[0] = doc1;

        //Call sign service
        ResponseBaseType Resp = null;

        try
        {
            // Create the Web Service client object
            DSS service = new DSS();
            service.Url = "https://prime.cosigntrial.com:8080/sapiws/dss.asmx";  //This url is constant and shouldn't be changed

            SignRequest sreq = new SignRequest();
            sreq.InputDocuments = Req.InputDocuments;
            sreq.OptionalInputs = Req.OptionalInputs;

            //Perform Signature operation
            Resp = service.DssSign(sreq);

            if (Resp.Result.ResultMajor != Success ) 
            {
                MessageBox.Show("Error: " + Resp.Result.ResultMajor + " " + 
                                            Resp.Result.ResultMinor + " " + 
                                            Resp.Result.ResultMessage.Value, "Error");
                return null;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
            if (ex is WebException)
            {
                WebException we = ex as WebException;
                WebResponse webResponse = we.Response;
                if (webResponse != null)
                    MessageBox.Show(we.Response.ToString(), "Web Response");
            }
            return null;
        }


        //Handle Reply
        DssSignResult sResp = (DssSignResult) Resp;

        return Resp.OptionalOutputs.SAPISeveralSigFieldSettings;
    }
于 2015-06-12T23:08:59.067 回答