原谅我缺乏代码,但我在生产环境中工作很多。如果需要,我可以提供更具体的例子,但我将在这里解释基本情况。
我正在使用一个名为PdfMake的库(这非常棒,如果你需要的话,可以在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");
}
出于某种原因,此操作失败了。我经常得到一个错误,上面写着"文档没有类型字典的目录",这是非常神秘的,当我搜索它时没有带来任何有用的结果。有时,在没有改变任何内容的情况下,我得到的错误是“重建文档仍然没有预告片”#34;从谷歌搜索来看,预告片似乎与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);
}