Atom Лента - Форум КриптоПро - Тема:Видимая подпись по ФЗ-63 програмно - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:Vidimajapodpis'poFZ-63programno-10:1Copyright 2024 Форум КриптоПро2024-03-29T17:16:43Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruterehovhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=34548&name=terehovterehovhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=34548&name=terehovtwo_oceanshttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=36490&name=two_oceansterehovhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=34548&name=terehovterehovhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=34548&name=terehovterehovhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=34548&name=terehovtwo_oceanshttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=36490&name=two_oceansterehovhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=34548&name=terehovYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid124131:1Видимая подпись по ФЗ-63 програмно<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: two_oceans <a href="/forum2/default.aspx?g=posts&m=124128#post124128"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ = Истина Тогда</div></div>Если уж позволите попридираться, это выражение не совсем корректно, так как:<br />1) "= Истина" никто не пишет (в любом языке программирования), если полагаться на неявное преобразование типов в логическому, сработает и без него<div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ Тогда</div></div>Другое дело, если бы там была операция тождественности (но это как раз отключит неявное преобразование типов, так что не подходит в этом случае).<br />2) в данном случае такое сравнение с Истиной вообще не охватывает все ситуации, так как Объектный тип может принимать значение и пустое IsNull и неопределенное IsNothing, которые оба преобразуются в Ложь (а теоретически при сбое может вернуться вообще не объект, а скажем мусор из памяти дающий Истину), то есть более корректно проверять что тип переменной объект и потом отрицание состояний IsNull IsNothing.</div></div><br /><br />Спасибо учту, но это не существенно по сравнению с тем что мне стало выдавать сегодня<br /><br />Вызываю подписание строкой <br /> Результат = jso.CPSign(ФайлСертификата,"12345678",1,,,,"http://tax4.tensor.ru/tsp-tensor_gost2012/tsp.srf",Ложь,ЛОЖЬ,СтрокаJSON,5);<br /><br />СтрокаJSON <br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-bash">{
"pageNumber": 1,
"coords": [
10,
10,
20,
10
],
"customAppearance": {
"appearanceType": 4,
"logoFile": "C:\\Users\\Виталий\\Desktop\\logo.JPG"
}
}</code></pre>
</div></div><br /><br /><br />в ответ Документ не подписан. Не удалось выполнить операцию. Длина подписи превышает допустимый размер.<br /><br />PS. Ругаться перестал, но и видимую подпись ставить тоже(((( ставит обычную невидимую</td></tr></table>2021-04-12T09:47:49+03:002021-04-12T09:47:49+03:00terehov<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: two_oceans <a href="/forum2/default.aspx?g=posts&m=124128#post124128"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ = Истина Тогда</div></div>Если уж позволите попридираться, это выражение не совсем корректно, так как:<br />1) "= Истина" никто не пишет (в любом языке программирования), если полагаться на неявное преобразование типов в логическому, сработает и без него<div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ Тогда</div></div>Другое дело, если бы там была операция тождественности (но это как раз отключит неявное преобразование типов, так что не подходит в этом случае).<br />2) в данном случае такое сравнение с Истиной вообще не охватывает все ситуации, так как Объектный тип может принимать значение и пустое IsNull и неопределенное IsNothing, которые оба преобразуются в Ложь (а теоретически при сбое может вернуться вообще не объект, а скажем мусор из памяти дающий Истину), то есть более корректно проверять что тип переменной объект и потом отрицание состояний IsNull IsNothing.</div></div><br /><br />Спасибо учту, но это не существенно по сравнению с тем что мне стало выдавать сегодня<br /><br />Вызываю подписание строкой <br /> Результат = jso.CPSign(ФайлСертификата,"12345678",1,,,,"http://tax4.tensor.ru/tsp-tensor_gost2012/tsp.srf",Ложь,ЛОЖЬ,СтрокаJSON,5);<br /><br />СтрокаJSON <br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-bash">{
"pageNumber": 1,
"coords": [
10,
10,
20,
10
],
"customAppearance": {
"appearanceType": 4,
"logoFile": "C:\\Users\\Виталий\\Desktop\\logo.JPG"
}
}</code></pre>
</div></div><br /><br /><br />в ответ Документ не подписан. Не удалось выполнить операцию. Длина подписи превышает допустимый размер.<br /><br />PS. Ругаться перестал, но и видимую подпись ставить тоже(((( ставит обычную невидимую</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124128:1Видимая подпись по ФЗ-63 програмно<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ = Истина Тогда</div></div>Если уж позволите попридираться, это выражение не совсем корректно, так как:<br />1) "= Истина" никто не пишет (в любом языке программирования), если полагаться на неявное преобразование типов в логическому, сработает и без него<div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ Тогда</div></div>Другое дело, если бы там была операция тождественности (но это как раз отключит неявное преобразование типов, так что не подходит в этом случае).<br />2) в данном случае такое сравнение с Истиной вообще не охватывает все ситуации, так как Объектный тип может принимать значение и пустое IsNull и неопределенное IsNothing, которые оба преобразуются в Ложь (а теоретически при сбое может вернуться вообще не объект, а скажем мусор из памяти дающий Истину), то есть более корректно проверять что тип переменной объект и потом отрицание состояний IsNull IsNothing.</td></tr></table>2021-04-12T06:29:03+03:002021-04-12T06:29:03+03:00two_oceans<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ = Истина Тогда</div></div>Если уж позволите попридираться, это выражение не совсем корректно, так как:<br />1) "= Истина" никто не пишет (в любом языке программирования), если полагаться на неявное преобразование типов в логическому, сработает и без него<div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Если ПФ Тогда</div></div>Другое дело, если бы там была операция тождественности (но это как раз отключит неявное преобразование типов, так что не подходит в этом случае).<br />2) в данном случае такое сравнение с Истиной вообще не охватывает все ситуации, так как Объектный тип может принимать значение и пустое IsNull и неопределенное IsNothing, которые оба преобразуются в Ложь (а теоретически при сбое может вернуться вообще не объект, а скажем мусор из памяти дающий Истину), то есть более корректно проверять что тип переменной объект и потом отрицание состояний IsNull IsNothing.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124110:1Видимая подпись по ФЗ-63 програмно<table class="content postContainer_Alt" width="100%"><tr><td>Так в общем я почти разобрался с тем что был не прав, и у меня сейчас при подписании возникает следующая ошибка<br /><br />Документ не подписан. Не удалось выполнить операцию. Невозможно вычислить подпись.---[0xC2100121]Не задан адрес службы штампов времени<br /><br />В итоге вот мой код, скрипт находиться в исходном состоянии<br /><br />error ="";<br /> ФайлСертификатаДД = Новый ДвоичныеДанные(Объект.ФайлСертификата);<br /> ФайлСертификата = ПолучитьHexСтрокуИзДвоичныхДанных(ФайлСертификатаДД);<br /> gApp = Новый COMОбъект("AcroExch.App");<br /> gPDDoc = Новый COMОбъект("AcroExch.PDDoc"); <br /> ПФ = gPDDoc.Open(Объект.ПодписываемыйФайл);<br /> Если ПФ = Истина Тогда<br /> jso = gPDDoc.GetJSObject(); // подключаемся к внутренним методам JS<br /> <br /> МассивКоординат = новый Массив;<br /> МассивКоординат.Добавить(100);<br /> МассивКоординат.Добавить(100);<br /> МассивКоординат.Добавить(200);<br /> МассивКоординат.Добавить(100);<br /> <br /> СтруктураПодписи = Новый Структура("pageNumber,coords,appearanceFilter",0,МассивКоординат,"Test");<br /> <br /> <br /> ЗаписьJSON = Новый ЗаписьJSON;<br /> ЗаписьJSON.ПроверятьСтруктуру = ЛОЖЬ;<br /> ЗаписьJSON.УстановитьСтроку();<br /> <br /> ЗаписатьJSON(ЗаписьJSON, СтруктураПодписи);<br /> СтрокаJSON = ЗаписьJSON.Закрыть();<br /> Результат = jso.CPSign(ФайлСертификата,"12345678",0,"","","","http://tax4.tensor.ru/tsp-tensor_gost2012/tsp.srf",Ложь,ЛОЖЬ,СтрокаJSON,5);<br /> gPDDoc.Save(1,Объект.ПодписываемыйФайл);<br /> gApp.Exit();<br /> КонецЕсли; <br /><br />Адрес штампа времени я указал, хотя в настройках подписи галка показывать время убрана.<br /><br />но стакими параметрами подпись просто неустанавливается<br /><br />PS разобрался, все работает</td></tr></table>2021-04-09T17:33:45+03:002021-04-09T17:33:45+03:00terehov<table class="content postContainer_Alt" width="100%"><tr><td>Так в общем я почти разобрался с тем что был не прав, и у меня сейчас при подписании возникает следующая ошибка<br /><br />Документ не подписан. Не удалось выполнить операцию. Невозможно вычислить подпись.---[0xC2100121]Не задан адрес службы штампов времени<br /><br />В итоге вот мой код, скрипт находиться в исходном состоянии<br /><br />error ="";<br /> ФайлСертификатаДД = Новый ДвоичныеДанные(Объект.ФайлСертификата);<br /> ФайлСертификата = ПолучитьHexСтрокуИзДвоичныхДанных(ФайлСертификатаДД);<br /> gApp = Новый COMОбъект("AcroExch.App");<br /> gPDDoc = Новый COMОбъект("AcroExch.PDDoc"); <br /> ПФ = gPDDoc.Open(Объект.ПодписываемыйФайл);<br /> Если ПФ = Истина Тогда<br /> jso = gPDDoc.GetJSObject(); // подключаемся к внутренним методам JS<br /> <br /> МассивКоординат = новый Массив;<br /> МассивКоординат.Добавить(100);<br /> МассивКоординат.Добавить(100);<br /> МассивКоординат.Добавить(200);<br /> МассивКоординат.Добавить(100);<br /> <br /> СтруктураПодписи = Новый Структура("pageNumber,coords,appearanceFilter",0,МассивКоординат,"Test");<br /> <br /> <br /> ЗаписьJSON = Новый ЗаписьJSON;<br /> ЗаписьJSON.ПроверятьСтруктуру = ЛОЖЬ;<br /> ЗаписьJSON.УстановитьСтроку();<br /> <br /> ЗаписатьJSON(ЗаписьJSON, СтруктураПодписи);<br /> СтрокаJSON = ЗаписьJSON.Закрыть();<br /> Результат = jso.CPSign(ФайлСертификата,"12345678",0,"","","","http://tax4.tensor.ru/tsp-tensor_gost2012/tsp.srf",Ложь,ЛОЖЬ,СтрокаJSON,5);<br /> gPDDoc.Save(1,Объект.ПодписываемыйФайл);<br /> gApp.Exit();<br /> КонецЕсли; <br /><br />Адрес штампа времени я указал, хотя в настройках подписи галка показывать время убрана.<br /><br />но стакими параметрами подпись просто неустанавливается<br /><br />PS разобрался, все работает</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124101:1Видимая подпись по ФЗ-63 програмно<table class="content postContainer" width="100%"><tr><td>Итак ситуация прежняя Adobe DC не сильно проясняет ситуацию по ошибке<br /><br />Ошибка при создании поля для подписи. theDoc.getField is not a functionВозможно изменения в документе запрещены. <br /><br />UPD. Попробовал самостоятельно создать поле подписи и все прошло на ура, даже неоткрывая файл как ранее, в общем перепишу исходный скрипт под себя<br /><br />UPD2. Я не спец по JS и методам Adobe но похоже что оно и не должно работать так как я хочу, так как я уже открыл документ методом<br />gPDDoc = Новый COMОбъект("AcroExch.PDDoc"); <br />ПФ = gPDDoc.Open(Объект.ПодписываемыйФайл); <br /><br />и пытаюсь обратиться к методам форм, интерактивно открытого документа, что не совсем кооректно, так как в скрипте я по сути еще раз пытаюсь "открыть" документ<br /> <br /><br />var theDoc = this;<br />signatureField = theDoc.getField(signatureFieldName);<br /><br /><br />в общем надо немного переписать под себя</td></tr></table>2021-04-09T13:40:46+03:002021-04-09T13:40:46+03:00terehov<table class="content postContainer" width="100%"><tr><td>Итак ситуация прежняя Adobe DC не сильно проясняет ситуацию по ошибке<br /><br />Ошибка при создании поля для подписи. theDoc.getField is not a functionВозможно изменения в документе запрещены. <br /><br />UPD. Попробовал самостоятельно создать поле подписи и все прошло на ура, даже неоткрывая файл как ранее, в общем перепишу исходный скрипт под себя<br /><br />UPD2. Я не спец по JS и методам Adobe но похоже что оно и не должно работать так как я хочу, так как я уже открыл документ методом<br />gPDDoc = Новый COMОбъект("AcroExch.PDDoc"); <br />ПФ = gPDDoc.Open(Объект.ПодписываемыйФайл); <br /><br />и пытаюсь обратиться к методам форм, интерактивно открытого документа, что не совсем кооректно, так как в скрипте я по сути еще раз пытаюсь "открыть" документ<br /> <br /><br />var theDoc = this;<br />signatureField = theDoc.getField(signatureFieldName);<br /><br /><br />в общем надо немного переписать под себя</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124098:1Видимая подпись по ФЗ-63 програмно<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>На проблему это наверно не влияет, но такого я тоже стараюсь избегать - например, дать разные имена или заключить имя поля в кавычки.</div></div><br /><br />Спасибо учту, тут все гораздо интереснее, если документ который сейчас в данный момен подписывается открыт физически, то подпись устанавливается, если нет то возникает исключение.<br /><br />Сейчас сношу 11 Adobe pro и покупаю DC, попробую на нем. По результату отпишусь</td></tr></table>2021-04-09T12:03:34+03:002021-04-09T12:03:34+03:00terehov<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>На проблему это наверно не влияет, но такого я тоже стараюсь избегать - например, дать разные имена или заключить имя поля в кавычки.</div></div><br /><br />Спасибо учту, тут все гораздо интереснее, если документ который сейчас в данный момен подписывается открыт физически, то подпись устанавливается, если нет то возникает исключение.<br /><br />Сейчас сношу 11 Adobe pro и покупаю DC, попробую на нем. По результату отпишусь</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124096:1Видимая подпись по ФЗ-63 програмно<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />Точного ответа мне не известно, но по описанию наводит на мысль, что некое исключение происходит по другой причине, но при обработке исключения Вы закрываете документ и уничтожаете переменную, а потом пытаетесь снова к ней обратиться и конечно функции после уничтожения уже нет. После чего новое исключение об отсутствии функции перебивает информацию о старом исключении (в смысле, старое уже отмечено как обработанное).<br />Можно либо не уничтожать объект внутри функции либо проверять после возврата из функции "а существует ли объект".<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>pageNumber: pageNumber,<br />logoFile: logoFile</div></div>На проблему это наверно не влияет, но такого я тоже стараюсь избегать - например, дать разные имена или заключить имя поля в кавычки.</td></tr></table>2021-04-09T11:43:14+03:002021-04-09T11:43:14+03:00two_oceans<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />Точного ответа мне не известно, но по описанию наводит на мысль, что некое исключение происходит по другой причине, но при обработке исключения Вы закрываете документ и уничтожаете переменную, а потом пытаетесь снова к ней обратиться и конечно функции после уничтожения уже нет. После чего новое исключение об отсутствии функции перебивает информацию о старом исключении (в смысле, старое уже отмечено как обработанное).<br />Можно либо не уничтожать объект внутри функции либо проверять после возврата из функции "а существует ли объект".<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>pageNumber: pageNumber,<br />logoFile: logoFile</div></div>На проблему это наверно не влияет, но такого я тоже стараюсь избегать - например, дать разные имена или заключить имя поля в кавычки.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124095:1Видимая подпись по ФЗ-63 програмно<table class="content postContainer_Alt" width="100%"><tr><td>Доброго дня!<br /><br />Исходные данные<br />Windows 10<br />Adobe Acrobat XI Pro<br />КриптоПро PDF последняя версия<br />КриптоПро CSP 4.0.9963<br /><br />Пытаюсь из 1С подписать PDF файл, не видимая подпись устанавливается на ура, хочу установить видимую по ФЗ-63.<br />Для этого я обернул типовую функцию в скрипте на свою следующим образом<br /><br />function AddSignature(certificateHEX, pin, pdfLockMode, signReason, signLocation, signContactInfo, timeStamp, bShowCertificatesDialog, bShowSignDialogs,pageNumber,LeftDownX,LeftUPY,RightUpX,RightDownY,logoFile,cadesType)<br />{<br /> var myAppearance =<br /> {<br /> pageNumber: pageNumber,<br /> coords: [LeftDownX, LeftUPY, RightUpX, RightDownY],<br /> customAppearance:<br /> {<br /> appearanceType: 4,<br /> logoFile: logoFile<br /> }<br /> };<br /> <br /> return CPSign (certificateHEX, pin, pdfLockMode, signReason, signLocation, signContactInfo, timeStamp, bShowCertificatesDialog, bShowSignDialogs, myAppearance, cadesType); <br />}<br /><br />При попытке установить подпись происходит исключение <br />Произошла исключительная ситуация (Acrobat JavaScript): TypeError: theDoc.getField is not a function<br /><br />Проверяю это следующим образом<br />Функция СоздатьПолеПодписи(jso,error)<br /> <br /> //*------ задаем параметры поля sigField, в котором будет размещаться наша подпись<br /> inch = 72;<br /> box = jso.getPageBox();<br /> box.SetValue(0, box.GetValue(0) + 0.5*inch);<br /> box.SetValue(2, box.GetValue(0) + 2*inch); <br /> box.SetValue(1, box.GetValue(1) - 0.5*inch);<br /> box.SetValue(3, box.GetValue(1) - 0.5*inch);<br /> //*--------------------------------------------------------------------------------<br /> попытка<br /> sigField = jso.addField("Sig_pdf","signature", 0, box); //устанавливаем поле на форму документа<br /> Исключение<br /> jso.ResetForm();<br /> error = "Не удалось подписать документ. Не удалось добавить поле подписи";<br /> jso.closeDoc();<br /> gPDDoc = Неопределено;<br /> jso = Неопределено;<br /> Возврат Неопределено;<br /> КонецПопытки;<br /> <br /> Возврат sigField;<br /> <br />КонецФункции <br /><br />После установки пытаюсь считать<br />sigField = jso.getField("Sig_pdf");<br />и получаю такую же ошибку, при этом поле в документе установилось <br /><br />Произошла исключительная ситуация (Acrobat JavaScript): TypeError: theDoc.getField is not a function<br /><br />кто знает как это побороть ???</td></tr></table>2021-04-09T10:59:06+03:002021-04-09T10:59:06+03:00terehov<table class="content postContainer_Alt" width="100%"><tr><td>Доброго дня!<br /><br />Исходные данные<br />Windows 10<br />Adobe Acrobat XI Pro<br />КриптоПро PDF последняя версия<br />КриптоПро CSP 4.0.9963<br /><br />Пытаюсь из 1С подписать PDF файл, не видимая подпись устанавливается на ура, хочу установить видимую по ФЗ-63.<br />Для этого я обернул типовую функцию в скрипте на свою следующим образом<br /><br />function AddSignature(certificateHEX, pin, pdfLockMode, signReason, signLocation, signContactInfo, timeStamp, bShowCertificatesDialog, bShowSignDialogs,pageNumber,LeftDownX,LeftUPY,RightUpX,RightDownY,logoFile,cadesType)<br />{<br /> var myAppearance =<br /> {<br /> pageNumber: pageNumber,<br /> coords: [LeftDownX, LeftUPY, RightUpX, RightDownY],<br /> customAppearance:<br /> {<br /> appearanceType: 4,<br /> logoFile: logoFile<br /> }<br /> };<br /> <br /> return CPSign (certificateHEX, pin, pdfLockMode, signReason, signLocation, signContactInfo, timeStamp, bShowCertificatesDialog, bShowSignDialogs, myAppearance, cadesType); <br />}<br /><br />При попытке установить подпись происходит исключение <br />Произошла исключительная ситуация (Acrobat JavaScript): TypeError: theDoc.getField is not a function<br /><br />Проверяю это следующим образом<br />Функция СоздатьПолеПодписи(jso,error)<br /> <br /> //*------ задаем параметры поля sigField, в котором будет размещаться наша подпись<br /> inch = 72;<br /> box = jso.getPageBox();<br /> box.SetValue(0, box.GetValue(0) + 0.5*inch);<br /> box.SetValue(2, box.GetValue(0) + 2*inch); <br /> box.SetValue(1, box.GetValue(1) - 0.5*inch);<br /> box.SetValue(3, box.GetValue(1) - 0.5*inch);<br /> //*--------------------------------------------------------------------------------<br /> попытка<br /> sigField = jso.addField("Sig_pdf","signature", 0, box); //устанавливаем поле на форму документа<br /> Исключение<br /> jso.ResetForm();<br /> error = "Не удалось подписать документ. Не удалось добавить поле подписи";<br /> jso.closeDoc();<br /> gPDDoc = Неопределено;<br /> jso = Неопределено;<br /> Возврат Неопределено;<br /> КонецПопытки;<br /> <br /> Возврат sigField;<br /> <br />КонецФункции <br /><br />После установки пытаюсь считать<br />sigField = jso.getField("Sig_pdf");<br />и получаю такую же ошибку, при этом поле в документе установилось <br /><br />Произошла исключительная ситуация (Acrobat JavaScript): TypeError: theDoc.getField is not a function<br /><br />кто знает как это побороть ???</td></tr></table>