在Grails中下载Docusign PDF,文件已损坏

时间:2014-06-17 13:32:53

标签: grails docusignapi

使用Groovy 1.8.6和Grails 2.1.0

使用嵌入式API,在用户签署文档后,浏览器会重定向回我的应用程序。使用"Get Envelope Documents and Certificate" API将文档下载到服务器。网址格式:

"${baseUrl}/envelopes/${envelopeId}/documents/combined"

代码段(删除了少量详细信息):

private void getDocument(requestUrl) {
    def connection = urlConnect(requestUrl, null, "GET")
    if (connection.responseCode == 200) {
        savePDF(envelopeId, connection.inputStream)
    }
}
private void savePDF(envelopeId, inputStream) {
    String filePath = getSavedPDFPath(envelopeId)
    def pdfWriter = new File(filePath).newWriter()
    pdfWriter << inputStream
    pdfWriter.close()
}

结果文件不是100%正确,Adobe Reader会抱怨"at least one signature is invalid"。读者至少知道该文件是由DocuSign,Inc。签署的,并且可以显示有关证书的详细信息。

1 个答案:

答案 0 :(得分:1)

根据问题的评论主题,问题是由文件的保存方式引起的。使用此代码,文件正确保存/打开:

private void savePDF(envelopeId, connection) 
{ 
    FileOutputStream fop = null; 
    File file; 
    String filePath = getSavedPDFPath(envelopeId); 
    try { 
        file = new File(filePath); 
        fop = new FileOutputStream(file); 
        byte[] buffer = new byte[1024]; 
        int numRead; 
        while((numRead = connection.getInputStream().read(buffer)) > 0) 
        { 
            fop.write(buffer, 0, numRead); 
        } 
        fop.flush(); 
        fop.close(); 
    } 
    catch (Exception e) 
    { 
        throw new RuntimeException(e); 
    } 
}