使用 BTP Ads Sdm 打印服务在 BTP 上构建数字文档平台后端服务

数字文档平台可用于处理以下需求:

  1. 根据预定义的格式和业务数据生成 PDF 文档。
  2. 使用自己的证书签署 PDF 文档。
  3. 通过电子邮件发送 PDF 文档。
  4. 将PDF文档存储到文档管理系统中。
  5. 将 PDF 文档打印到特定的本地打印机。

我们可以用BTP SAP Forms Service by Adobe (ADS) SAP Document Service(SDM)  SAP Print Service 在BTP上构建数字文档平台后端服务。

该博客基于以下博客:

先决条件:

您已完成 ADS 初始设置

您已完成打印服务初始设置

您已完成文档管理服务集成选项的初始设置

您已完成入文档管理服务的 存储库 创建

步骤:

1、为ADS、SDM、打印服务在BTP Cockpit 中创建目标。

ADS 目标

打印服务目标

SDM目标

2  调整代码中的 ADS、SDM 打印服务目的地和 SDM 存储库 ID 的变量值, 修改发送邮件帐号和密码。

以下是server.js的代码

const {ServiceApi} = require( './service');
const express = require('express');
const app = express();
const xsenv = require('@sap/xsenv');
const fs = require('fs');

const base64 = require('base64topdf');

xsenv.loadEnv();
const services = xsenv.getServices({
    uaa: { label: 'xsuaa' }
});

const xssec = require('@sap/xssec');
const passport = require('passport');
passport.use('JWT', new xssec.JWTStrategy(services.uaa));
app.use(passport.initialize());
app.use(passport.authenticate('JWT', {
    session: false
}));

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.get('/srv', function (req, res) {
    if (req.authInfo.checkScope('$XSAPPNAME.User')) {
        res.status(200).send('adsUnify');
    } else {
        res.status(403).send('Forbidden');
    }
});

app.post('/srv/pdfplatform', function (req, res) {
    ServiceApi.render(req.body.render).then( pdf=>{
 if(req.body.sign){
    req.body.sign.pdf = pdf;
    ServiceApi.sign(req.body.sign).then(spdf=>{
        base64.base64Decode(spdf,'render.pdf');
        const content = fs.readFileSync('render.pdf');
        const blob = new Blob([content], {type: 'application/pdf'});

        if(req.body.email){ 
            ServiceApi.semail(content,req.body.email.attachname,req.body.email.sendto,req.body.email.subject,req.body.email.ebody).then((info=>{
                console.log('email sent successfully');
            })).catch(err=>{console.log(err)});
                 };   

        if(req.body.cmis){
            
            ServiceApi.createDoc(blob,req.body.cmis.name,req.body.cmis.path).then(cmisresp=>{
                console.log(cmisresp.succinctProperties);
            }).catch(err=>{
                console.log(err);
            });
                        };


        if(req.body.print){         
            // fs.close();
            ServiceApi.print(content, req.body.print).then(result=>{
                console.log('uploaded into print queue  ' + req.body.print.qname)
            }).catch(err=>{
                console.log(err);
            });
        };

            let raw =  fs.createReadStream('render.pdf');
            res.writeHead(200, 'ok');
            raw.pipe(res);
            fs.rm('render.pdf',()=>{
                console.log('file deleted successfully');
            });
        
      
    }).catch(err=>{
        console.log(err);
        res.status(500).send(err);
    });
 }else{
        base64.base64Decode(pdf,'render.pdf');
        const content = fs.readFileSync('render.pdf');

        if(req.body.print){         
            ServiceApi.print(content, req.body.print).then(result=>{
                console.log('uploaded into print queue  ' + req.body.print.qname)
            }).catch(err=>{
                console.log(err);
            });
        }
    
        if(req.body.cmis){
           
            const blob = new Blob([content], {type: 'application/pdf'});
            ServiceApi.createDoc(blob,req.body.cmis.name,req.body.cmis.path).then(cmisresp=>{
                console.log(cmisresp.succinctProperties);
            }).catch(err=>{
                console.log(err);
            })
                        };
        if(req.body.email){ 
            ServiceApi.semail(content,req.body.email.attachname,req.body.email.sendto,req.body.email.subject,req.body.email.ebody).then((info=>{
                console.log('email sent successfully');
            })).catch(err=>{console.log(err)});
                 };     
        let raw =  fs.createReadStream('render.pdf');
        res.writeHead(200, 'ok');
        raw.pipe(res);
        fs.rm('render.pdf',()=>{
            console.log('file deleted successfully');
        });
 }       
    }).catch(err=>{
        console.log(err);
        res.status(500).send(err);
    });
    
});

app.get('/srv/user', function (req, res) {
    if (req.authInfo.checkScope('$XSAPPNAME.User')) {
        res.status(200).json(req.user);
    } else {
        res.status(403).send('Forbidden');
    }
});
const port = process.env.PORT || 5001;
app.listen(port, function () {
    console.info('Listening on http://localhost:' + port);
});

3 构建和部署应用程序。

4 用postman测试:

我们使用以下 JSON 作为请求正文:

{"render":{
   "embedFont": 0,
   "formLocale": "en_US",
   "formType": "interactive",
   "taggedPdf": 1,
   "xdpTemplate": "labelprint3/labelprint3",
   "xmlData": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGZvcm0xPgogICA8TGFiZWxGb3JtPgogICAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDE8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMjwvRGVsaXZlcnlJZD4KICAgICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KICAgPC9MYWJlbEZvcm0+CiAgIDxMYWJlbEZvcm0+CiAgICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMzwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMzwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTE8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAxPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1Ni4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTI8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1OC4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMjwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTM8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMzwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTM8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMTwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTE8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzEyPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMjwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMzwvRGVsaXZlcnlJZD4KICAgIDxQb3NpdGlvbj4wMDEzPC9Qb3NpdGlvbj4KICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICA8UGFja2FnZT5QMTExMTEzPC9QYWNrYWdlPgogICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogPC9MYWJlbEZvcm0+CjwvZm9ybTE+"
} ,
"sign":{"credentialAlias": "jackysignature",
 "signatureFieldName": "signature",
  "reasonInfo": "approval",
  "locationInfo": "Shanghai",
  "contactInfo": "[email protected]",  
  "pdf":""}
,

"print":{
   "numberOfCopies": 1,
   "username": "test user",
   "qname": "plant2",
   "metadata": {
      "business_metadata": {
         "business_user": "user1",
         "object_node_type": "object_node_1"
      },
      "version": 1.2
   },
   "printContents": [
      {
         "objectKey": "",
         "documentName": "dn80000095"
      }
   ]
},
"cmis": {
    "name": "dn80000095",
    "path": "adobeservice"

},
"email":{
    "sendto": "[email protected]",
    "subject": "Digital Document Platform",
    "ebody": "Digital Document Platform body",
    "attachname": "dn80000095.pdf"
}

}

检查电子邮件中的结果:

在文档管理服务中查看结果:

在打印服务中检查结果:

注意事项:

您可以根据实际需求组合以下5种能力

  • 1、根据预定义的格式和业务数据生成PDF文档。(必选)
  • 2、用自己的证书签署PDF文档。 (可选)
  • 3、通过电子邮件发送PDF文档。(可选)
  • 4、将PDF文档存储到文档管理系统中。(可选)
  • 5、将PDF文档打印到特定的本地打印机。(可选)

 

比如我们只需要1,2,3,我们可以使用下面的JSON

{"render":{
   "embedFont": 0,
   "formLocale": "en_US",
   "formType": "interactive",
   "taggedPdf": 1,
   "xdpTemplate": "labelprint3/labelprint3",
   "xmlData": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGZvcm0xPgogICA8TGFiZWxGb3JtPgogICAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDE8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMjwvRGVsaXZlcnlJZD4KICAgICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KICAgPC9MYWJlbEZvcm0+CiAgIDxMYWJlbEZvcm0+CiAgICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMzwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMzwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTE8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAxPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1Ni4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTI8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1OC4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMjwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTM8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMzwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTM8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMTwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTE8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzEyPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMjwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMzwvRGVsaXZlcnlJZD4KICAgIDxQb3NpdGlvbj4wMDEzPC9Qb3NpdGlvbj4KICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICA8UGFja2FnZT5QMTExMTEzPC9QYWNrYWdlPgogICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogPC9MYWJlbEZvcm0+CjwvZm9ybTE+"
} ,
"sign":{"credentialAlias": "jackysignature",
 "signatureFieldName": "signature",
  "reasonInfo": "approval",
  "locationInfo": "Shanghai",
  "contactInfo": "[email protected]",  
  "pdf":""},
"email":{
    "sendto": "[email protected]",
    "subject": "Digital Document Platform",
    "ebody": "Digital Document Platform body",
    "attachname": "dn80000095.pdf"
}

}

如果您对此感兴趣,请通过此博客联系您的 BTP 客户成功经理。 我们将提供进一步的支持。

结束!

感谢您的时间!

Best regards!

Jacky Liu

Scroll to Top