原谅缺乏代码,但我在 生产环境 环境中工作,而且很多 . 如果需要,我可以提供更具体的例子,但我将在这里解释基本情况 .

我正在使用一个名为PdfMake的库(这是非常好的btw,非常适合在JS中制作pdf,如果你需要的话)来动态制作动态PDF .

现在我需要将PDF转换为S3存储桶,但我们的堆栈目前依赖于ColdFusion . 幸运的是,PdfMake有一个方便的方法将pdf数据转换为Base64,ColdFusion有一个方便的功能将Base64转换为二进制 .

所以我将base64发送到我的服务器,将其转换为二进制文件,制作一个新的coldfusion pdf并像这样读取它(fileData是一个base64编码的字符串)

public function upload_pdf(string fileName, any fileData){
    var myPdf = new pdf();
    var binary = ToBinary(arguments.fileData);
    myPdf.read( source=binary, name="fileSource");
}

由于某种原因,这个动作失败了 . 我经常会收到一条错误,上面写着“文档中没有类型字典的目录”,这是非常神秘的,当我搜索它时没有任何有用的结果 . 有时,在没有改变任何内容的情况下,我收到一条错误,上面写着“重建文档仍然没有预告片” . 从谷歌搜索来看,拖车似乎与PDF有关 .

直觉上我认为这会起作用,因为base64和binary是多种类型的编码 . 但是,我甚至不知道如何开始修复或诊断这一点 . 我可能会开始寻找另一种解决方案,但我很想知道这里发生了什么,所以如果有人有任何想法我会讨论一下 .

对于我已经解决了这个问题的任何好读者,这里是工作代码:

public function upload_pdf(string fileName, string fileData){
    var myPdf = new pdf();
    var binary = decodeBinary(Replace(arguments.fileData, " ", "+", "ALL"));
    myPdf.setSource(binary);
}