{"id":334863,"date":"2022-06-23T09:00:37","date_gmt":"2022-06-23T09:00:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=334863"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=334863","title":{"rendered":"<span>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440 DOCX-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Smart Document Engine<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/76e\/ebc\/5f6\/76eebc5f6bc1ecb3fc318aeb1c94e63e.gif\" width=\"780\" height=\"440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/76e\/ebc\/5f6\/76eebc5f6bc1ecb3fc318aeb1c94e63e.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u044b \u0432 <a href=\"https:\/\/smartengines.ru\/\">Smart Engines<\/a> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c MVP \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0438\u043f\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DOCX \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c\u044b\u0435 \u0438\u0437 \u0441\u043a\u0430\u043d\u043e\u0432 \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0432\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u043a\u0430\u043a \u043d\u0430 \u0431\u0430\u0437\u0435 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f Smart Document Engine \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440, \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e &#8212; \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442!<\/p>\n<hr\/>\n<p>\u041a\u0430\u043a \u0436\u0435 \u0447\u0430\u0441\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u0430\u043a \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430, \u0430\u043a\u0442\u0430, \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0440\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432. \u0415\u0449\u0435 \u043a\u0443\u0434\u0430 \u043d\u0438 \u0448\u043b\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0424\u0418\u041e \u0438\u0437 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0439 \u0434\u043e\u0433\u043e\u0432\u043e\u0440, \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u0432 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\u00a0<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0439\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/company\/smartengines\/blog\/506012\">RPA-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a>, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0438\u0448\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435-\u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 RPA \u0431\u044b\u043b\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0430, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445, \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435. \u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 Word-\u043e\u0432\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u0430\u043c\u0438?<\/p>\n<p>\u041c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Smart Document Engine \u0438 <code>python<\/code> \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438. \u041c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 SDK \u0434\u043b\u044f MacOS, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438 \u0434\u043b\u044f Windows \u0438 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 Linux.<\/p>\n<h2>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Smart Document Engine<\/h2>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043b\u0435\u0436\u0438\u0442, \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Smart Document Engine. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0440\u044f\u0434\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 (\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 C++ \u0438 \u043d\u0430\u0431\u043e\u0440 \u043e\u0431\u0435\u0440\u0442\u043e\u043a), \u043d\u043e, \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 CLI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u0421++-\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 SDK-\u043f\u0430\u043a\u0435\u0442\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 docengine_sample, \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0434 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 SDK-\u043f\u0430\u043a\u0435\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">\/\/ Creating a session object - a main handle for performing recognition. std::unique_ptr&lt;se::doc::DocSession> session(     engine->SpawnSession(*session_settings, \u201cABCDEFG\u2026.\u201d));<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u0435\u0436\u0430\u0449\u0438\u043c \u0440\u044f\u0434\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c <code>build_cpp.sh<\/code>).<\/p>\n<p>\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 <code>docengine_sample<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u043f\u0443\u0442\u044c \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043f\u0443\u0442\u044c \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c\u0443 \u0430\u0440\u0445\u0438\u0432\u0443 \u0438 \u043c\u0430\u0441\u043a\u0443 \u0442\u0438\u043f\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">$ DYLD_LIBRARY_PATH=..\/..\/bin .\/docengine_sample ..\/..\/testdata\/rus.payment_order_sample.png ..\/..\/data-zip\/bundle_docengine_photo.se \"rus.payment_order*\" Smart Document Engine version 1.11.0 image_path = ..\/..\/testdata\/rus.payment_order_sample.png config_path = ..\/..\/data-zip\/bundle_docengine_photo.se document_types = rus.payment_order*  (... \u0421\u043a\u0440\u044b\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2026)      Text fields (35 in total):         amount                    : 20 003 000-00         amount_words              : \u0414\u0412\u0410\u0414\u0426\u0410\u0422\u042c \u041c\u0418\u041b\u041b\u0418\u041e\u041d\u041e\u0412 \u0422\u0420\u0418 \u0422\u042b\u0421\u042f\u0427\u0418 \u0420\u0423\u0411\u041b\u0415\u0419 00 \u041a\u041e\u041f\u0415\u0415\u041a         beneficiary               : \u041e\u041e\u041e \"\u041c\u0415\u0427\u0422\u0410\"         beneficiary_account       : 11223344556677889900         beneficiary_bank          : \u041c\u0415\u0416\u0414\u0423\u041d\u0410\u0420\u041e\u0414\u041d\u042b\u0419 \u0417\u0410\u041f\u0410\u0414\u041d\u042b\u0419 \u0411\u0410\u041d\u041a         beneficiary_bank_invoice  : 33344455566677788899         bik_beneficiary           : 987654321         bik_payer                 : 012345678  (... \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u2026) <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<p>1. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0431\u0430\u043d\u0434\u043b\u0435 <code>bundle_docengine_photo.se<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435). \u0412\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c <code>\u201cuniversal\u201d<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0441\u043a\u0430\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f (\u0432 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0438 \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438):<\/p>\n<pre><code class=\"cpp\">session_settings->SetCurrentMode(\"universal\"); \/\/ \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0440\u0435\u0436\u0438\u043c universal \/\/ For starting the session we need to set up the mask of document types \/\/     which will be recognized. session_settings->AddEnabledDocumentTypes(document_types.c_str());<\/code><\/pre>\n<p>2. \u0423\u0431\u0435\u0440\u0435\u043c \u0432\u0435\u0441\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439\/\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>OutputRecognitionResult<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0432\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430 \u0442\u0438\u043f \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 JSON-\u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<pre><code class=\"cpp\">void OutputRecognitionResult(     const se::doc::DocResult&amp; recog_result) {   if (recog_result.GetDocumentsCount() == 0) {     printf(\"{}\\n\");   } else {     const se::doc::Document&amp; doc = recog_result.DocumentsBegin().GetDocument();     printf(\"{\\\"DOCTYPE\\\": \\\"%s\\\"\", doc.GetAttribute(\"type\"));     for (auto f_it = doc.TextFieldsBegin();          f_it != doc.TextFieldsEnd();          ++f_it) {       std::string escaped_value = std::regex_replace(           f_it.GetField().GetOcrString().GetFirstString().GetCStr(),            std::regex(\"\\\"\"), \"\\\\\\\"\");       printf(\",\\\"%s\\\": \\\"%s\\\"\",            f_it.GetKey(),           escaped_value.c_str());     }     printf(\"}\\n\");   } }<\/code><\/pre>\n<p>3. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0432 <code>docengine_cli.cpp<\/code> \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u0435\u0433\u043e \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <code>libdocengine.dylib<\/code> (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 &#8212; \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>\/bin<\/code> SDK-\u043f\u0430\u043a\u0435\u0442\u0430), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0441 rpath-\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043a\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u044f\u0434\u043e\u043c \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c:<\/p>\n<pre><code class=\"bash\">$ clang++ docengine_cli.cpp -O2 -I ..\/include -L. -l docengine -o docengine_cli -Wl,-rpath,\"@executable_path\"<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c (\u0432 \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438):<\/p>\n<pre><code class=\"bash\">$ .\/docengine_cli ..\/testdata\/rus.payment_order_sample.png ..\/data-zip\/bundle_docengine_photo.se \"rus.payment_order*\" {\"DOCTYPE\": \"rus.payment_order.type1\",\"amount\": \"20 003 000-00\",  \"amount_words\": \"\u0414\u0412\u0410\u0414\u0426\u0410\u0422\u042c \u041c\u0418\u041b\u041b\u0418\u041e\u041d\u041e\u0412 \u0422\u0420\u0418 \u0422\u042b\u0421\u042f\u0427\u0418 \u0420\u0423\u0411\u041b\u0415\u0419 00 \u041a\u041e\u041f\u0415\u0415\u041a\",  \"beneficiary\": \"\u041e\u041e\u041e \\\"\u041c\u0415\u0427\u0422\u0410\\\"\",\"beneficiary_account\": \"11223344556677889900\",  \"beneficiary_bank\": \"\u041c\u0415\u0416\u0414\u0423\u041d\u0410\u0420\u041e\u0414\u041d\u042b\u0419 \u0417\u0410\u041f\u0410\u0414\u041d\u042b\u0419 \u0411\u0410\u041d\u041a\",  \"beneficiary_bank_invoice\": \"33344455566677788899\",  \"bik_beneficiary\": \"987654321\",\"bik_payer\": \"012345678\",  \"budget_classification_code\": \"\",\"code1\": \"0401060\",\"code_payment\": \"\",  \"date\": \"05.11.2020\",\"date_document_payment_basis\": \"\",  \"debiting_date\": \"05.11.2020\",\"inn_beneficiary\": \"1111111111\",  \"inn_payer\": \"1234567890\",\"invoice_number\": \"98765432109876543210\",  \"kpp_beneficiary\": \"222222222\",\"kpp_payer\": \"125125125\",  \"number_document_basis_payment\": \"\",\"number_payment_order\": \"345\",  \"oktmo_code\": \"\",\"payer\": \"\u0418\u041f \\\"\u0414\u041e\u0411\u0420\u041e\u0415 \u0423\u0422\u0420\u041e\\\"\",  \"payer_bank\": \"\u041f\u0423\u0428\u041a\u0418\u041d\u0421\u041a\u041e\u0415 \u041e\u0422\u0414\u0415\u041b\u0415\u041d\u0418\u0415 \u0411\u0410\u041d\u041a \\\"\u0417\u0414\u041e\u0420\u041e\u0412\u042c\u0415\\\"\",  \"payer_bank_invoice\": \"12345678901234567890\",\"payment_code\": \"0\",  \"payment_reason_code\": \"\",\"payment_type\": \"\",\"place_payment\": \"8\",  \"purpose_payment\": \"\u041e\u041f\u041b\u0410\u0422\u0410 \u041f\u041e \u0414\u041e\u0413\u041e\u0412\u041e\u0420\u0423 \u211623456 \u0417\u0410 \u0412\u042b\u041f\u041e\u041b\u041d\u0415\u041d\u0418\u0415 \u0421\u0422\u0420\u041e\u0418\u0422\u0415\u041b\u042c\u041d\u042b\u0425 \u0418 \u0424\u0423\u041d\u041a\u0426\u0418\u041e\u041d\u0410\u041b\u042c\u041d\u042b\u0425 \u0420\u0410\u0411\u041e\u0422 \u041f\u041e \u0418\u0421\u0421\u041b\u0415\u0414\u041e\u0412\u0410\u041d\u0418\u042e \u041e\u0420\u0413\u0410\u041d\u0418\u0417\u041c\u0410. \u041d\u0414\u0421 \u041d\u0415 \u041e\u0411\u041b\u0410\u0413\u0410\u0415\u0422\u0421\u042f\",  \"purpose_payment_1\": \"\",\"receipt_date\": \"05.11.2020\",\"tax_period\": \"\",  \"type_payment\": \"\",\"wage_type\": \"01\"}<\/code><\/pre>\n<p>\u0422\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0443.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440<\/h2>\n<p>\u0427\u0442\u043e \u0445\u043e\u0442\u0438\u043c? \u0425\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b \u0443\u043c\u0435\u043b\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DOCX, \u0432 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0442\u0435\u0433\u0438 \u0432\u0438\u0434\u0430 <code>${very_important_info}<\/code>, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. <\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a\u043e\u0435 CLI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u0441 \u043a\u0430\u043a\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0431\u0430\u043d\u0434\u043b\u043e\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043c\u0430\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0442\u0438\u043f\u043e\u0432 (\u043f\u0443\u0441\u0442\u044c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0435 \u043f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0430 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 \u0444\u0438\u0437\u043b\u0438\u0446\u0430, \u0438, \u0441\u043a\u0430\u0436\u0435\u043c, \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0410\u0440\u043c\u0435\u043d\u0438\u0438), \u0438 \u043a\u0430\u043a \u043f\u043e\u043b\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0433\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<p>\u041f\u0443\u0441\u0442\u044c \u0438\u0437 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0430 \u0438 \u0435\u0433\u043e \u0431\u0430\u043d\u043a\u0430, \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f, \u0441\u0443\u043c\u043c\u0443 \u043f\u0440\u043e\u043f\u0438\u0441\u044c\u044e \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0430. \u0418\u0437 2-\u041d\u0414\u0424\u041b \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0424\u0418\u041e, \u0434\u0430\u0442\u0443 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f (\u0441\u043f\u0440\u0430\u0432\u043a\u0430 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043b\u0438\u0446\u0430, \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f 2-\u041d\u0414\u0424\u041b, \u043d\u043e \u0438\u0437\u0436\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u0436\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d, \u0434\u0443\u043c\u0430\u044e, \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e), \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043e \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043d\u043e\u043c\u0435\u0440\u0435 \u0410\u0440\u043c\u0435\u043d\u0438\u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0424\u0418\u041e \u043d\u0430 \u0430\u0440\u043c\u044f\u043d\u0441\u043a\u043e\u043c \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u043e\u043c\u0435\u0440. \u0414\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b (<code>config.json<\/code>) \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"json\">{   \"executable\": \"docengine_cli\",   \"bundle\": \"bundle_docengine_photo.se\",   \"sessions\": {     \"rus_payment_order\": {       \"documents_mask\": \"rus.payment_order*\",       \"text\": \"payment order\"     },     \"arm_social_card\": {       \"documents_mask\": \"arm.ref_public*\",       \"text\": \"social card\"     },     \"rus_2ndfl\": {       \"documents_mask\": \"rus.2ndfl*\",       \"text\": \"income form\"     }   },   \"tags\": {     \"rus_payment_order:payer\": \"payer_name\",     \"rus_payment_order:payer_bank\": \"payer_bank_name\",     \"rus_payment_order:beneficiary\": \"beneficiary_name\",     \"rus_payment_order:beneficiary_account\": \"beneficiary_account\",     \"rus_payment_order:beneficiary_bank\": \"beneficiary_bank_name\",     \"rus_payment_order:bik_beneficiary\": \"beneficiary_bik\",     \"rus_payment_order:kpp_beneficiary\": \"beneficiary_kpp\",     \"rus_payment_order:amount_words\": \"payment_amount\",     \"rus_payment_order:purpose_payment\": \"payment_purpose\",     \"rus_2ndfl:surname\": \"surname\",     \"rus_2ndfl:name\": \"name\",     \"rus_2ndfl:patronymic\": \"patronymic\",     \"rus_2ndfl:birth_date\": \"birth_date\",     \"arm_social_card:name_patronymic_surname\": \"arm_fio\",     \"arm_social_card:public_service_number\": \"arm_number\"   } }<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>resources<\/code>, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f: \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0431\u0430\u043d\u0434\u043b\u043e\u043c <code>bundle_docengine_photo.se<\/code>, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c <code>docengine_cli<\/code> \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <code>libdocengine.dylib<\/code>.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0435 GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 <a href=\"https:\/\/wxpython.org\/\">wxPython<\/a>. \u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u043b\u0438\u0448\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0443\u0448\u043b\u043e \u043d\u0430 \u0432\u0441\u0435 \u043f\u0440\u043e \u0432\u0441\u0435 \u043e\u043a\u043e\u043b\u043e \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u043e\u0432 (\u0431\u0435\u0437 \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code>wx<\/code>) \u0438 292 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430. \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043b\u0438\u0448\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<p>\u0412 GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432 <code>config.json<\/code>. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <code>docengine_cli<\/code> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <code>subprocess<\/code> \u0438 \u043f\u0430\u0440\u0441\u0438\u043c JSON, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0442\u0435\u0433\u0430\u043c \u0432 <code>config.json<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0442\u0435\u0433\u043e\u0432:<\/p>\n<pre><code class=\"python\">def loadImage(self, event):   '''     \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0442\u0435\u0433\u043e\u0432   '''   button_name = event.GetEventObject().GetName() # \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043b\u044e\u0447\u0443 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u201csessions\u201d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 config.json   self.tlog.AppendText('Loading image of %s...\\n' % self.config['sessions'][button_name]['text'])    with wx.FileDialog(self, 'Open %s image file' % self.config['sessions'][button_name]['text'], \\                      wildcard=\"PNG, JPG or TIF image (*.png;*.jpg;*.jpeg;*.tif;*.tiff)|*.png;*.jpg;*.jpeg;*.tif;*.tiff\", \\                      style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:     if fileDialog.ShowModal() == wx.ID_CANCEL:       return      pathname = fileDialog.GetPath()     try:       self.tlog.AppendText('Recognizing %s...\\n' % pathname)       # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c docengine_cli       output = subprocess.run([         os.path.join(self.resources_path, self.config['executable']), # \u043f\u0443\u0442\u044c \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 docengine_cli         pathname, # \u043f\u0443\u0442\u044c \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e         os.path.join(self.resources_path, self.config['bundle']), # \u043f\u0443\u0442\u044c \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c\u0443 \u0431\u0430\u043d\u0434\u043b\u0443 Smart Document Engine         Self.config['sessions'][button_name]['documents_mask'] # \u043c\u0430\u0441\u043a\u0430 \u0442\u0438\u043f\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430       ], capture_output = True)        # \u043f\u0430\u0440\u0441\u0438\u043c \u0432\u044b\u0432\u043e\u0434 docengine_cli       output_json = None       try:         output_json = json.loads(output.stdout)       except Exception:         pass        if output_json is None:         self.tlog.AppendText('Failed to retrieve any data.\\n')       else:         # \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0442\u0435\u0433\u043e\u0432         any_fields_extracted = False         for tag in self.config['tags'].keys():           if tag.split(':')[0] != button_name:             continue           prop_name = tag.split(':')[-1]           if prop_name not in output_json.keys():             continue           prop_value = output_json[prop_name]           self.keyval[self.config['tags'][tag]] = prop_value           self.tlog.AppendText('Extracted %s: %s\\n' % (self.config['tags'][tag], prop_value))           any_fields_extracted = True          if not any_fields_extracted:           self.tlog.AppendText('No fields extracted.\\n')      except Exception as e:       self.tlog.AppendText('Cannot process file %s: %s\\n' % (pathname, str(e)))<\/code><\/pre>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 DOCX-\u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/python-docx.readthedocs.io\/en\/latest\/#\">python-docx<\/a>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u044b \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0433\u043e\u0432 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0449\u0435, \u043d\u043e \u044f \u0443\u0436\u0435 \u0432 \u043f\u0438\u0436\u0430\u043c\u0435:<\/p>\n<pre><code class=\"python\">def applyTagsToParagraph(self, paragraph):   '''     \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0442\u0435\u0433\u043e\u0432 self.keyval \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0443 DOCX-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u0443\u0441\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b \u201c$\u201d.   '''   for i in range(len(paragraph.runs)):     while '$' in paragraph.runs[i].text:       end_index = -1       found_key = None       composite_text = ''       for j in range(i, len(paragraph.runs)):         composite_text += paragraph.runs[j].text         for key in self.keyval.keys():           if '${%s}' % key in composite_text:             found_key = key             end_index = j             break         if found_key is not None:           break       if found_key is not None:         paragraph.runs[i].text = composite_text.replace('${%s}' % found_key, self.keyval[found_key])         for k in range(i + 1, end_index + 1):           paragraph.runs[k].clear()       else:         break  def saveDocument(self, event):   '''     \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 self.template_path, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0442\u0435\u0433\u043e\u0432 self.keyval \u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0443 \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.   '''   if len(self.keyval) == 0:     self.tlog.AppendText('Nothing to apply.\\n')     return    self.tlog.AppendText('Applying values to template file %s:\\n' % self.template_path)   for k, v in self.keyval.items():     self.tlog.AppendText('  %s: %s\\n' % (k, v))    document = docx.Document(self.template_path)    # \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043a \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0430\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430   for paragraph in document.paragraphs:     self.applyTagsToParagraph(paragraph)   # \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430   for table in document.tables:     for row in table.rows:       for cell in row.cells:         for paragraph in cell.paragraphs:           self.applyTagsToParagraph(paragraph)    with wx.FileDialog(self, \"Save DOCX file\", wildcard=\"DOCX files (*.docx)|*.docx\", \\                      style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog:      if fileDialog.ShowModal() == wx.ID_CANCEL:       return      pathname = fileDialog.GetPath()     # \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 docx \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0444\u0430\u0439\u043b     if not pathname.lower().endswith('.docx'):       new_pathname = pathname + '.docx'       while os.path.exists(new_pathname):         new_pathname = new_pathname[:-5] + '-copy.docx'       pathname = new_pathname     try:       document.save(pathname)       self.tlog.AppendText('Saved to %s\\n' % pathname)     except IOError:       self.tlog.AppendText('Cannot save to file %s\\n' % pathname)<\/code><\/pre>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u0433\u043e\u0442\u043e\u0432! \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 <a href=\"https:\/\/pyinstaller.org\/en\/stable\/\">pyinstaller<\/a>, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043a\u0438, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e resources \u0438 \u043f\u043e\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0443:<\/p>\n<pre><code class=\"bash\">$ pyinstaller -w docengine_templater.py --name=\"Docengine Templater\" --add-data resources:resources -i docengine.icns<\/code><\/pre>\n<h2>\u0422\u0435\u0441\u0442\u0438\u043c!<\/h2>\n<p>\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 DOCX-\u0444\u0430\u0439\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u0442\u0435\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0432 <code>config.json<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/101\/cb2\/94c\/101cb294c7485bc41aa5ad8dcb85e6e0.png\" width=\"1214\" height=\"762\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/101\/cb2\/94c\/101cb294c7485bc41aa5ad8dcb85e6e0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u043a\u043d\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/09c\/c0e\/44f\/09cc0e44fdf81f8b9d7c27e764a1e33b.png\" width=\"1700\" height=\"1000\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/09c\/c0e\/44f\/09cc0e44fdf81f8b9d7c27e764a1e33b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/033\/ed8\/521\/033ed85218659fbfeb2aa5d8af3726fd.png\" width=\"1203\" height=\"854\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/033\/ed8\/521\/033ed85218659fbfeb2aa5d8af3726fd.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0432\u0441\u0435! \u041a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 (\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u043c\u043f\u043b-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <code>docengine_cli.cpp<\/code>) \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/SmartEngines\/docengine_templater\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043f\u0440\u043e\u0434\u0443\u043a\u0442 Smart Document Engine, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430 <a href=\"https:\/\/smartengines.ru\/\">\u0441\u0430\u0439\u0442\u0435 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438<\/a>, \u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0442\u0430\u043c \u0436\u0435 \u043a \u043d\u0430\u0448\u0438\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c \u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438. <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/smartengines\/blog\/672896\/\"> https:\/\/habr.com\/ru\/company\/smartengines\/blog\/672896\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041c\u044b \u0432 <a href=\"https:\/\/smartengines.ru\/\">Smart Engines<\/a> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c MVP \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0438\u043f\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DOCX \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c\u044b\u0435 \u0438\u0437 \u0441\u043a\u0430\u043d\u043e\u0432 \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0432\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u043a\u0430\u043a \u043d\u0430 \u0431\u0430\u0437\u0435 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f Smart Document Engine \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440, \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e &#8212; \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442!<\/p>\n<hr\/>\n<p>\u041a\u0430\u043a \u0436\u0435 \u0447\u0430\u0441\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u0430\u043a \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430, \u0430\u043a\u0442\u0430, \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0440\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432. \u0415\u0449\u0435 \u043a\u0443\u0434\u0430 \u043d\u0438 \u0448\u043b\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0424\u0418\u041e \u0438\u0437 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0439 \u0434\u043e\u0433\u043e\u0432\u043e\u0440, \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u0432 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\u00a0<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0439\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/company\/smartengines\/blog\/506012\">RPA-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a>, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0438\u0448\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435-\u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 RPA \u0431\u044b\u043b\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0430, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445, \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435. \u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 Word-\u043e\u0432\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u0430\u043c\u0438?<\/p>\n<p>\u041c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Smart Document Engine \u0438 <code>python<\/code> \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438. \u041c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 SDK \u0434\u043b\u044f MacOS, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438 \u0434\u043b\u044f Windows \u0438 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 Linux.<\/p>\n<h2>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Smart Document Engine<\/h2>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043b\u0435\u0436\u0438\u0442, \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Smart Document Engine. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0440\u044f\u0434\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 (\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 C++ \u0438 \u043d\u0430\u0431\u043e\u0440 \u043e\u0431\u0435\u0440\u0442\u043e\u043a), \u043d\u043e, \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 CLI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u0421++-\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 SDK-\u043f\u0430\u043a\u0435\u0442\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 docengine_sample, \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0434 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 SDK-\u043f\u0430\u043a\u0435\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">\/\/ Creating a session object - a main handle for performing recognition. std::unique_ptr&lt;se::doc::DocSession> session(     engine->SpawnSession(*session_settings, \u201cABCDEFG\u2026.\u201d));<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u0435\u0436\u0430\u0449\u0438\u043c \u0440\u044f\u0434\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c <code>build_cpp.sh<\/code>).<\/p>\n<p>\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 <code>docengine_sample<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u043f\u0443\u0442\u044c \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043f\u0443\u0442\u044c \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c\u0443 \u0430\u0440\u0445\u0438\u0432\u0443 \u0438 \u043c\u0430\u0441\u043a\u0443 \u0442\u0438\u043f\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">$ DYLD_LIBRARY_PATH=..\/..\/bin .\/docengine_sample ..\/..\/testdata\/rus.payment_order_sample.png ..\/..\/data-zip\/bundle_docengine_photo.se \"rus.payment_order*\" Smart Document Engine version 1.11.0 image_path = ..\/..\/testdata\/rus.payment_order_sample.png config_path = ..\/..\/data-zip\/bundle_docengine_photo.se document_types = rus.payment_order*  (... \u0421\u043a\u0440\u044b\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2026)      Text fields (35 in total):         amount                    : 20 003 000-00         amount_words              : \u0414\u0412\u0410\u0414\u0426\u0410\u0422\u042c \u041c\u0418\u041b\u041b\u0418\u041e\u041d\u041e\u0412 \u0422\u0420\u0418 \u0422\u042b\u0421\u042f\u0427\u0418 \u0420\u0423\u0411\u041b\u0415\u0419 00 \u041a\u041e\u041f\u0415\u0415\u041a         beneficiary               : \u041e\u041e\u041e \"\u041c\u0415\u0427\u0422\u0410\"         beneficiary_account       : 11223344556677889900         beneficiary_bank          : \u041c\u0415\u0416\u0414\u0423\u041d\u0410\u0420\u041e\u0414\u041d\u042b\u0419 \u0417\u0410\u041f\u0410\u0414\u041d\u042b\u0419 \u0411\u0410\u041d\u041a         beneficiary_bank_invoice  : 33344455566677788899         bik_beneficiary           : 987654321         bik_payer                 : 012345678  (... \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u2026) <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<p>1. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0431\u0430\u043d\u0434\u043b\u0435 <code>bundle_docengine_photo.se<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435). \u0412\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c <code>\u201cuniversal\u201d<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0441\u043a\u0430\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f (\u0432 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0438 \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438):<\/p>\n<pre><code class=\"cpp\">session_settings->SetCurrentMode(\"universal\"); \/\/ \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0440\u0435\u0436\u0438\u043c universal \/\/ For starting the session we need to set up the mask of document types \/\/     which will be recognized. session_settings->AddEnabledDocumentTypes(document_types.c_str());<\/code><\/pre>\n<p>2. \u0423\u0431\u0435\u0440\u0435\u043c \u0432\u0435\u0441\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439\/\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>OutputRecognitionResult<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0432\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430 \u0442\u0438\u043f \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 JSON-\u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<pre><code class=\"cpp\">void OutputRecognitionResult(     const se::doc::DocResult&amp; recog_result) {   if (recog_result.GetDocumentsCount() == 0) {     printf(\"{}\\n\");   } else {     const se::doc::Document&amp; doc = recog_result.DocumentsBegin().GetDocument();     printf(\"{\\\"DOCTYPE\\\": \\\"%s\\\"\", doc.GetAttribute(\"type\"));     for (auto f_it = doc.TextFieldsBegin();          f_it != doc.TextFieldsEnd();          ++f_it) {       std::string escaped_value = std::regex_replace(           f_it.GetField().GetOcrString().GetFirstString().GetCStr(),            std::regex(\"\\\"\"), \"\\\\\\\"\");       printf(\",\\\"%s\\\": \\\"%s\\\"\",            f_it.GetKey(),           escaped_value.c_str());     }     printf(\"}\\n\");   } }<\/code><\/pre>\n<p>3. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0432 <code>docengine_cli.cpp<\/code> \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u0435\u0433\u043e \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <code>libdocengine.dylib<\/code> (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 &#8212; \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>\/bin<\/code> SDK-\u043f\u0430\u043a\u0435\u0442\u0430), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0441 rpath-\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043a\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u044f\u0434\u043e\u043c \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c:<\/p>\n<pre><code class=\"bash\">$ clang++ docengine_cli.cpp -O2 -I ..\/include -L. -l docengine -o docengine_cli -Wl,-rpath,\"@executable_path\"<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c (\u0432 \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438):<\/p>\n<pre><code class=\"bash\">$ .\/docengine_cli ..\/testdata\/rus.payment_order_sample.png ..\/data-zip\/bundle_docengine_photo.se \"rus.payment_order*\" {\"DOCTYPE\": \"rus.payment_order.type1\",\"amount\": \"20 003 000-00\",  \"amount_words\": \"\u0414\u0412\u0410\u0414\u0426\u0410\u0422\u042c \u041c\u0418\u041b\u041b\u0418\u041e\u041d\u041e\u0412 \u0422\u0420\u0418 \u0422\u042b\u0421\u042f\u0427\u0418 \u0420\u0423\u0411\u041b\u0415\u0419 00 \u041a\u041e\u041f\u0415\u0415\u041a\",  \"beneficiary\": \"\u041e\u041e\u041e \\\"\u041c\u0415\u0427\u0422\u0410\\\"\",\"beneficiary_account\": \"11223344556677889900\",  \"beneficiary_bank\": \"\u041c\u0415\u0416\u0414\u0423\u041d\u0410\u0420\u041e\u0414\u041d\u042b\u0419 \u0417\u0410\u041f\u0410\u0414\u041d\u042b\u0419 \u0411\u0410\u041d\u041a\",  \"beneficiary_bank_invoice\": \"33344455566677788899\",  \"bik_beneficiary\": \"987654321\",\"bik_payer\": \"012345678\",  \"budget_classification_code\": \"\",\"code1\": \"0401060\",\"code_payment\": \"\",  \"date\": \"05.11.2020\",\"date_document_payment_basis\": \"\",  \"debiting_date\": \"05.11.2020\",\"inn_beneficiary\": \"1111111111\",  \"inn_payer\": \"1234567890\",\"invoice_number\": \"98765432109876543210\",  \"kpp_beneficiary\": \"222222222\",\"kpp_payer\": \"125125125\",  \"number_document_basis_payment\": \"\",\"number_payment_order\": \"345\",  \"oktmo_code\": \"\",\"payer\": \"\u0418\u041f \\\"\u0414\u041e\u0411\u0420\u041e\u0415 \u0423\u0422\u0420\u041e\\\"\",  \"payer_bank\": \"\u041f\u0423\u0428\u041a\u0418\u041d\u0421\u041a\u041e\u0415 \u041e\u0422\u0414\u0415\u041b\u0415\u041d\u0418\u0415 \u0411\u0410\u041d\u041a \\\"\u0417\u0414\u041e\u0420\u041e\u0412\u042c\u0415\\\"\",  \"payer_bank_invoice\": \"12345678901234567890\",\"payment_code\": \"0\",  \"payment_reason_code\": \"\",\"payment_type\": \"\",\"place_payment\": \"8\",  \"purpose_payment\": \"\u041e\u041f\u041b\u0410\u0422\u0410 \u041f\u041e \u0414\u041e\u0413\u041e\u0412\u041e\u0420\u0423 \u211623456 \u0417\u0410 \u0412\u042b\u041f\u041e\u041b\u041d\u0415\u041d\u0418\u0415 \u0421\u0422\u0420\u041e\u0418\u0422\u0415\u041b\u042c\u041d\u042b\u0425 \u0418 \u0424\u0423\u041d\u041a\u0426\u0418\u041e\u041d\u0410\u041b\u042c\u041d\u042b\u0425 \u0420\u0410\u0411\u041e\u0422 \u041f\u041e \u0418\u0421\u0421\u041b\u0415\u0414\u041e\u0412\u0410\u041d\u0418\u042e \u041e\u0420\u0413\u0410\u041d\u0418\u0417\u041c\u0410. \u041d\u0414\u0421 \u041d\u0415 \u041e\u0411\u041b\u0410\u0413\u0410\u0415\u0422\u0421\u042f\",  \"purpose_payment_1\": \"\",\"receipt_date\": \"05.11.2020\",\"tax_period\": \"\",  \"type_payment\": \"\",\"wage_type\": \"01\"}<\/code><\/pre>\n<p>\u0422\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0443.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440<\/h2>\n<p>\u0427\u0442\u043e \u0445\u043e\u0442\u0438\u043c? \u0425\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b \u0443\u043c\u0435\u043b\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DOCX, \u0432 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0442\u0435\u0433\u0438 \u0432\u0438\u0434\u0430 <code>${very_important_info}<\/code>, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. <\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a\u043e\u0435 CLI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u0441 \u043a\u0430\u043a\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0431\u0430\u043d\u0434\u043b\u043e\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043c\u0430\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0442\u0438\u043f\u043e\u0432 (\u043f\u0443\u0441\u0442\u044c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0435 \u043f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0430 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 \u0444\u0438\u0437\u043b\u0438\u0446\u0430, \u0438, \u0441\u043a\u0430\u0436\u0435\u043c, \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0410\u0440\u043c\u0435\u043d\u0438\u0438), \u0438 \u043a\u0430\u043a \u043f\u043e\u043b\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0433\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<p>\u041f\u0443\u0441\u0442\u044c \u0438\u0437 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0430 \u0438 \u0435\u0433\u043e \u0431\u0430\u043d\u043a\u0430, \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f, \u0441\u0443\u043c\u043c\u0443 \u043f\u0440\u043e\u043f\u0438\u0441\u044c\u044e \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0430. \u0418\u0437 2-\u041d\u0414\u0424\u041b \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0424\u0418\u041e, \u0434\u0430\u0442\u0443 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f (\u0441\u043f\u0440\u0430\u0432\u043a\u0430 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043b\u0438\u0446\u0430, \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f 2-\u041d\u0414\u0424\u041b, \u043d\u043e \u0438\u0437\u0436\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u0436\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d, \u0434\u0443\u043c\u0430\u044e, \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e), \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043e \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043d\u043e\u043c\u0435\u0440\u0435 \u0410\u0440\u043c\u0435\u043d\u0438\u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0424\u0418\u041e \u043d\u0430 \u0430\u0440\u043c\u044f\u043d\u0441\u043a\u043e\u043c \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u043e\u043c\u0435\u0440. \u0414\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b (<code>config.json<\/code>) \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"json\">{   \"executable\": \"docengine_cli\",   \"bundle\": \"bundle_docengine_photo.se\",   \"sessions\": {     \"rus_payment_order\": {       \"documents_mask\": \"rus.payment_order*\",       \"text\": \"payment order\"     },     \"arm_social_card\": {       \"documents_mask\": \"arm.ref_public*\",       \"text\": \"social card\"     },     \"rus_2ndfl\": {       \"documents_mask\": \"rus.2ndfl*\",       \"text\": \"income form\"     }   },   \"tags\": {     \"rus_payment_order:payer\": \"payer_name\",     \"rus_payment_order:payer_bank\": \"payer_bank_name\",     \"rus_payment_order:beneficiary\": \"beneficiary_name\",     \"rus_payment_order:beneficiary_account\": \"beneficiary_account\",     \"rus_payment_order:beneficiary_bank\": \"beneficiary_bank_name\",     \"rus_payment_order:bik_beneficiary\": \"beneficiary_bik\",     \"rus_payment_order:kpp_beneficiary\": \"beneficiary_kpp\",     \"rus_payment_order:amount_words\": \"payment_amount\",     \"rus_payment_order:purpose_payment\": \"payment_purpose\",     \"rus_2ndfl:surname\": \"surname\",     \"rus_2ndfl:name\": \"name\",     \"rus_2ndfl:patronymic\": \"patronymic\",     \"rus_2ndfl:birth_date\": \"birth_date\",     \"arm_social_card:name_patronymic_surname\": \"arm_fio\",     \"arm_social_card:public_service_number\": \"arm_number\"   } }<\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>resources<\/code>, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f: \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0431\u0430\u043d\u0434\u043b\u043e\u043c <code>bundle_docengine_photo.se<\/code>, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c <code>docengine_cl<\/code><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-334863","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=334863"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334863\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}