我们使用dompdf将HTML转换为后端(PHP)中的PDF。从DOMPDF所生成的输出被Base64编码与在浏览器中解码Base64编码的PDF内容
$output = $dompdf->output();
base64_encode($output);
此Base64编码内容被保存在服务器上的文件。当我们解码这个文件内容是这样的:
cat /tmp/55acbaa9600f4 | base64 -D > test.pdf
我们得到一个正确的PDF文件。
但是,当我们作为一个字符串值中的Base64内容传送到客户机的JSON对象内(该服务器提供一个RESTful API ...):
{
"file_data": "...the base64 string..."
}
而且它与ATOB(解码),然后创建一个Blob对象来稍后下载文件,PDF总是“空”/破碎。
$scope.downloadFileData = function(doc) {
DocumentService.getFileData(doc).then(function(data) {
var decodedFileData = atob(data.file_data);
var file = new Blob([decodedFileData], { type: doc.file_type });
saveAs(file, doc.title + '.' + doc.extension);
});
};
当我们登录解码的内容,似乎内容是“破”,因为有几个符号是不一样的,当我们使用Base64 -D的服务器上的内容进行解码。
当我们对简单文本/纯文档的内容进行编码/解码时,它按预期工作。但是所有的二进制(或不是ASCII格式)都不起作用。
我们在网上搜索了好几个小时,但没有找到适合我们的解决方案。有没有人有同样的问题,可以为我们提供一个可行的解决方案?提前致谢!
这是关于编码的PDF文件的内容的服务器的Base64 A A实施例:
JVBERi0xLjMKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZwovT3V0bGluZXMgMiAwIFIKL1BhZ2VzIDMgMCBSID4 + CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9PdXRsaW5lcyAvQ291bnQgMCA + PgplbmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0tpZHMgWzYgMCBSCl0KL0NvdW50IDEKL1Jlc291cmNlcyA8PAovUHJvY1NldCA0IDAgUgovRm9udCA8PCAKL0YxIDggMCBSCj4 + CJ4 + Ci9NZWRpYUJveCBbMC4wMDAgMC4wMDAgNjEyLjAwMCA3OTIuMDAwXQogPj4KZW5kb2JqCjQgMCBvYmoKWy9QREYgL1RleHQgXQplbmRvYmoKNSAwIG9iago8PAovQ3JlYXRvciAoRE9NUERGKQovQ3JlYXRpb25EYXRlIChEOjIwMTUwNzIwMTMzMzIzKzAyJzAwJykKL01vZERhdGUgKEQ6MjAxNTA3MjAxMzMzMjMrMDInMDAnKQo + PgplbmRvYmoKNiAwIG9iago8PCAvVHlwZSAvUGFnZQovUGFyZW50IDMgMCBSCi9Db250ZW50cyA3IDAgUgo + PgplbmRvYmoKNyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURl Y29kZQovTGVuZ3RoIDY2ID4 + CnN0cmVhbQp4nOMy0DMwMFBAJovSuZxCFIxN9AwMzRTMDS31DCxNFUJSFPTdDBWMgKIKIWkKCtEaIanFJZqxCiFeCq4hAO4PD0MKZW5kc3RyZWFtCmVuZG9iago4IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjEKL0Jhc2VGb250IC9UaW1lcy1Cb2xkCi9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4 + CmVuZG9iagp4cmVmCjAgOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDggMDAwMDAgbiAKMDAwMDAwMDA3MyAwMDAwMCBuIAowMDAwMDAwMTE5IDAwMDAwIG4gCjAwMDAwMDAyNzMgMDAwMDAgbiAKMDAwMDAwMDMwMiAwMDAwMCBuIAowMDAwMDAwNDE2IDAwMDAwIG4gCjAwMDAwMDA0NzkgMDAwMDAgbiAKMDAwMDAwMDYxNiAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9TaXplIDkKL1Jvb3QgMSAwIFIKL0luZm8gNSAwIFIKPj4Kc3RhcnR4cmVmCjcyNQolJUVPRgo =
如果ATOB()这个,你没有得到相同的结果作为使用Base64 -D在控制台上。为什么?
您是否找到解决方法?我遇到了同样的问题。即使有外部库... – tvelop
我们仍然使用浏览器btoa()编码为base64。我们将它以这种格式存储在服务器上,服务器本身对内容进行解码并将其直接传输到浏览器。我们无法通过RESTful API将其作为JSON发回,并让浏览器对其进行解码。只有文本格式(MIME类型文本/平原例如)工作,PDF和其他不可读格式不起作用。如果您获得解决方案,请让我知道,因为我们对我们的解决方案不满意。 – marcelhaerle