使用Meteor HTTP我可以从docusign获得响应并转换为base64缓冲区。
try {
const response = HTTP.get(`${baseUrl}/envelopes/${envelopeId}/documents/1`, {
headers: {
"Authorization": `bearer ${token}`,
"Content-Type": "application/json",
},
});
const buffer = new Buffer(response.content).toString('base64');
return buffer
} catch(e) {
console.log(e);
throw new Meteor.Error(e.reason);
}
然后在客户端上我使用FileSaver.js来saveAs
通过此函数从ArrayBuffer创建的blob
function _base64ToArrayBuffer(base64) {
const binary_string = window.atob(base64);
const len = binary_string.length;
const bytes = new Uint8Array( len );
for (let i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
// template helper
'click [data-action="download"]'(e, tmpl){
const doc = this;
return Meteor.call('downloadPDF', doc, (err, pdf)=>{
if(err) {
return notify({
message: err,
timeout: 3000,
})
}
const pdfBuffer = pdf && _base64ToArrayBuffer(pdf);
console.log(pdfBuffer);
return saveAs(new Blob([pdfBuffer], {type: 'application/pdf'}), `docusign_pdf.pdf`);
});
},
PDF正在以正确的尺寸和页面长度下载,但所有页面都是空白的。我应该以不同的方式编码缓冲区吗?还有其他我想念的东西吗?
答案 0 :(得分:0)
将文档上传到DocuSign时,您可以将原始文档字节作为multipart/form-data request
的一部分发送,也可以将文档作为base64
编码文件发送到您的document
节点中请求正文。
然而,一旦信封完成,DocuSign平台就会将文档转换为PDF(如果它已经不是),并提供该原始文件。因此,您不必对base64进行解码,因此我会尝试删除您的代码部分。