【问题标题】:sapui5 encoded base64 string to pdfsapui5 编码的base64字符串到pdf
【发布时间】:2018-08-15 06:50:21
【问题描述】:

我有一个 base64 字符串,我想将其转换为 PDF 文件。我正在使用 SAP UI5 框架。我已经用 atob() 试过了,但是 pdf 没有打开。 任何建议如何做到这一点? BR, ajsnub

这是我的代码:

onClick: function(oEvent) {
                var base64 = "JVBERi0xLjUNCi...." //shortend

                var sDecodedFile = window.atob(base64);
                var sFileName = "test.pdf"

                var saveData = (function() {
                    var a = document.createElement("a");
                    document.body.appendChild(a);
                    a.style = "display: none";

                    return function(data, fileName) {
                        var json = JSON.stringify(data),
                            blob = new Blob([json], {
                                type: "data:application/pdf;base64"
                            }),
                            url = window.URL.createObjectURL(blob);
                        a.href = url;
                        a.download = fileName;
                        a.click();
                        window.URL.revokeObjectURL(url);
                    };
                }());

                var data = sDecodedFile,
                    fileName = sFileName;

                saveData(data, fileName);

            }

用 jsPDF 更新:

var base64 = "JVBERi0xLjUNCi...." //shortend                    
var doc = new jsPDF();
                    var SampleData = 'data:application/pdf;base64,' + base64;
                    //doc.image(SampleData, 10, 10);
                    doc.save('test_document.pdf');

【问题讨论】:

  • 感谢提示,但 PDF 的内容仍然不正确,因为 atob 似乎还不够。
  • 如果base64字符串确实是base64编码的PDF文件,那么一定足够了。我怀疑你的 base64 字符串不是别的东西,就是编码错误。 atob 的输出是什么?通常,您应该能够在其中看到一些特定于 PDF 的标题。
  • 嗨 Serban,是的,我看到类似:%PDF-1.3 %ª«¬4 0 obj > endobj 5 0 obj > 流 xoeÍX[oÛÊ~ׯàKı°è½'˼Y–dû8q[Ž•ÔE±'Va^tHêäÔ¿¾³”ÅÑ¢#mQç!ZrgæÛÙ&½³1õì›,zvûdÖ#Þ²Gk Ô‹ˆ'ÐBæSª¼Iêýídbó'§ Ÿ¼>äÉÐl ªr¶Jt6w/ÓéÕ'ïïÞä·wÊˇî”•‹ØÌ‹x¶r'£©)*·AaÓ
  • 嗨,Serban,对不起,我现在可以在没有任何 atob() 操作的情况下成功。只需在 type 中传递 base64 字符串:“data:application/pdf;base64”就可以了!谢谢

标签: javascript pdf base64 sapui5


【解决方案1】:

使用<a> 标记的“下载”属性 Here the docu

[下载] 的真正好处在于使用 blob:URL 和文件系统:URLs URLs。它将为用户提供一种下载内容的方式 在您的应用中创建/修改。

所以在 href 中设置你的 base64 blob

也请查看:How to download PDF automatically using js?

使用sap.ui.core.HTML 控件包装您的<a> 标签

【讨论】:

【解决方案2】:

检查这个...

$(document).ready(function () {

    var base64 = "VGhpcyBpcyB0ZXh0IGZvciBwZGYgZG9j" //shortend
    var sDecodedFile = window.atob(base64);
    var doc = new jsPDF();
    doc.text(20, 20, sDecodedFile);
    doc.addPage();
    doc.text(20, 20, 'Do you like that?');

// Output as Data URI
    var datat = doc.output('datauri');
    var fileName = 'test.pdf';
    var a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";
    a.href = datat;
    a.download = fileName;
    a.click();
    window.URL.revokeObjectURL(datat);

}); 

【讨论】:

  • 完美,现在我必须下载“standard_fonts_metrics.js”文件,因为我遇到了 jspdf.js 文件中缺少“宽度”的问题。但是随后生成了pdf!但我现在有另一个问题:pdf 标题的技术信息或类似的东西看起来很奇怪。我想这是由于 atob 造成的。有没有更好的方法来编码 base64 字符串? (base64 代表一个实际的 PDF)BR, ajsnub
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2011-04-22
  • 2012-03-05
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多