Ошибка при перезаписи изображения подписи

Я пытаюсь подписать PDF-файл с помощью API-интерфейсов SOAP для приложения iPad. Я использую конкретное имя графической подписи для перезаписи каждый раз и использую его для подписи документа.

Для некоторых изображений я не могу перезаписать его, и я получаю "Не удалось создать графическую подпись 90030704"
Сначала я должен удалить его из веб-приложения. Вот мой код

String signDocumentSignatureType = "http://arx.com/SAPIWS/DSS/1.0/signature-field-create-sign"; // The
  String signatureType = "http://arx.com/SAPIWS/DSS/1.0/set-graphic-image";
  String wsdlUrl = Settings.wsdlURL();
           // // URL to the WSDL file

  try {
   // Read file contents
   FileInputStream docInputStream = new FileInputStream(filePath);
   byte[] fileBuffer = new byte[(int) docInputStream.getChannel().size()];
   docInputStream.read(fileBuffer);
   docInputStream.close();

   // Set file contents + MIME type (the SOAP library automatically
   // base64 encodes the data)
   DocumentType document = new DocumentType();
   Base64Data base64Data = new Base64Data();
   base64Data.setValue(fileBuffer);
   base64Data.setMimeType(fileMimeType);
   document.setBase64Data(base64Data);

   // Set user credentials. In case of Active Directory, the domain
   // name should be defined in the NameQualifier attribute
   ClaimedIdentity claimedIdentity = new ClaimedIdentity();
   NameIdentifierType nameIdentifier = new NameIdentifierType();
   nameIdentifier.setValue(username);
   nameIdentifier.setNameQualifier(domain);
   CoSignAuthDataType coSignAuthData = new CoSignAuthDataType();
   coSignAuthData.setLogonPassword(password);
   claimedIdentity.setName(nameIdentifier);
   claimedIdentity.setSupportingInfo(coSignAuthData);

   // Define signature field settings
   SAPISigFieldSettingsType sigFieldSettings = new SAPISigFieldSettingsType();
   sigFieldSettings.setInvisible(false);
   sigFieldSettings.setX(sigX);
   sigFieldSettings.setY(sigY);
   sigFieldSettings.setWidth(sigWidth);
   sigFieldSettings.setHeight(sigHeight);
   sigFieldSettings.setPage(sigPageNum);
   sigFieldSettings.setAppearanceMask(appearanceMask);
   
   
   
   TimeDateFormatType timeDateFormat = new TimeDateFormatType();
   timeDateFormat.setTimeFormat(timeFormat);
   timeDateFormat.setDateFormat(dateFormat);
   timeDateFormat.setExtTimeFormat(ExtendedTimeFormatEnum.GMT);
   
   sigFieldSettings.setTimeFormat(timeDateFormat);

   // Set the Graphic Image
   GraphicImageType sigImage = new GraphicImageType();

   sigImage.setDataFormat(Integer.valueOf(8).longValue());
   sigImage.setGraphicImageName("iPadSignature");
   sigImage.setImageType(GraphicImageTypeEnum.GRAPHIC_IMAGE);
   sigImage.setGraphicImage(signatureImage);
   
   // Specify the newly created image as the one to use
   
   ArrayOfConfValueType confValArray = new ArrayOfConfValueType();
   ConfValueType confVal = new ConfValueType();
   confVal.setConfValueID(ConfIDEnum.GR_SIG_PREF_NAME);
   confVal.setStringValue("iPadSignature");
   confValArray.getConfValue().add(confVal);
   
   //optInputs.setConfigurationValues(confValArray);

   // Build complete request object
   SignRequest signRequest = new SignRequest();
   RequestBaseType.InputDocuments inputDocuments = new RequestBaseType.InputDocuments();
   inputDocuments.getTransformedDataOrDocumentHashOrOther().add(document);
   RequestBaseType.OptionalInputs optionalInputs = new RequestBaseType.OptionalInputs();
   optionalInputs.setSignatureType(signatureType);
   optionalInputs.setClaimedIdentity(claimedIdentity);
   optionalInputs.setSAPISigFieldSettings(sigFieldSettings);
   optionalInputs.setReturnPDFTailOnly(true);
   optionalInputs.setGraphicImageToSet(sigImage);
   optionalInputs.setConfigurationValues(confValArray);
   
   
   
   signRequest.setOptionalInputs(optionalInputs);
   signRequest.setInputDocuments(inputDocuments);

   // Initiate service client

   DSS client = new DSS(new URL(wsdlUrl), new QName("http://arx.com/SAPIWS/DSS/1.0/", "DSS"));
   Common.logInfo("DSS client initiated");
   // Send the create signature request
   DssSignResult response = client.getDSSSoap().dssSign(signRequest);

   // Check response output
   if ("urn:oasis:names:tc:dss:1.0:resultmajor:Success".equals(response.getResult().getResultMajor())) {
    // On success- Change the request type to sign Document.
    Common.logInfo("Signaure image created");
    
    optionalInputs.setSignatureType(signDocumentSignatureType);

    // Send the signing request
    response = client.getDSSSoap().dssSign(signRequest);
    Common.logInfo("get response for signing the doc");
    if ("urn:oasis:names:tc:dss:1.0:resultmajor:Success".equals(response.getResult().getResultMajor())) {
     // On success- append signature object to the source PDF
     // document (the SOAP library automatically decodes the
     // base64 encoded output)
     
     
     Common.logInfo("doc signed successfully");
     byte[] signatureObjectBuffer = response.getSignatureObject().getBase64Signature().getValue();
     Common.logInfo("write to filepath-->" + filePath);
     FileOutputStream fos = new FileOutputStream(filePath, true);
     fos.write(signatureObjectBuffer);
     fos.close();
    }
   } else {
    Common.logInfo("Error creating signature image");
    Common.logInfo("Error-->" + response.getResult().getResultMessage().getValue());
    Common.logInfo("Error to String-->" + response.getResult().getResultMinor());
    return null;
   }

1 ответ

Из документов SAPI:

0x90030704 - Графическое изображение с таким именем уже существует в учетной записи пользователя или поле подписи с таким именем уже существует в документе.

Графическая подпись не должна быть перезаписана. Если вы хотите использовать то же имя для этого изображения, вы должны сначала удалить старое.

Другие вопросы по тегам