所以在这里我的问题:我有一个PDF文件作为我是从服务器获取一个base64字符串。 我想用这个字符串来直接显示PDF浏览器或给它的选择“另存为...”的链接,当点击。 在这里,我使用的代码:
<!doctype>
<html>
<head>
<title>jsPDF</title>
<script type="text/javascript" src="../libs/base64.js"></script>
<script type="text/javascript" src="../libs/sprintf.js"></script>
<script type="text/javascript" src="../jspdf.js"></script>
<script type="text/javascript">
function demo1() {
jsPDF.init();
jsPDF.addPage();
jsPDF.text(20, 20, 'Hello world!');
jsPDF.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');
// Making Data URI
var out = jsPDF.output();
var url = 'data:application/pdf;base64,' + Base64.encode(out);
document.location.href = url;
}
</script>
</head>
<body>
<a href="javascript:demo1()">Run Code</a>
</body>
</html>
它的做工精细用Chrome和Safari。 Firefox没有识别PDf但作为FF需要扩展存在,但数据-URI现在没有在这种情况下不显示它。 究其原因,我坚持在这里,如果Chrome和Safari得到它的工作,那么必须有对FF和IE浏览器的解决方案
我知道有一些相关的问题,这个,但没有真正确切的一个,现在也有点旧的。 我认识的一个解决办法是必须在服务器端生成的PDF格式,但我想在客户端生成它。
所以,请乡亲们聪明,是可以通过一些黑客或额外的JS下载插件吗?
您应该能够使用它来下载文件
window.open("data:application/pdf;base64," + Base64.encode(out));
像一个显示下方下载PDF格式的base64您可以创建一个锚:
<a download=pdfTitle href=pdfData title='Download pdf document' />
其中pdfData是您的base64编码的PDF像“数据:应用程序/ PDF格式; BASE64,JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURlY29kZT4 + CnN0cmVhbQp4nO1cyY4ktxG911fUWUC3kjsTaBTQ1Ytg32QN4IPgk23JMDQ2LB / 0 + 2YsZAQzmZk1PSPIEB ......”
我知道这个问题是旧的,但也想做到这一点,并碰到它而看。 对于Internet Explorer我使用的代码从这里保存的Blob。 要创建一个从字符串的base64一个blob有这个网站的许多成果,所以它不是我的代码,我只是不记得具体的来源:
function b64toBlob(b64Data, contentType) {
contentType = contentType || '';
var sliceSize = 512;
b64Data = b64Data.replace(/^[^,]+,/, '');
b64Data = b64Data.replace(/\s/g, '');
var byteCharacters = window.atob(b64Data);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {type: contentType});
return blob;
使用链接filesaver:
if (window.saveAs) { window.saveAs(blob, name); }
else { navigator.saveBlob(blob, name); }