将二进制流传输到PDF-Javascript

Streamed binary to PDF - Javascript

本文关键字:PDF-Javascript 传输 二进制      更新时间:2023-09-26

请求Web服务后,我得到以下答案(PDF文件流式传输)

%PDF-1.5
%µµµµ
1 0 obj
<</Type/Catalog/Pages 2 0 R/Lang(en-GB) /StructTreeRoot 10 0 R/MarkInfo<</Marked true>>>>
endobj
2 0 obj
<</Type/Pages/Count 1/Kids[ 3 0 R] >>
endobj
3 0 obj
................. continue .......................

到目前为止,我可以使用windows.open(application/pdf;base64,url)生成pdf文件。

我真正需要的是将pdf文档保存在存储器中!

如何生成具有上述响应的PDF文件?

Tks

我在http://dogfeatherdesign.com/ttn_js,除了当用户点击打印按钮时,我将从Canvas转到pdf文件。根据操作系统和浏览器的不同,下载会自动进行。(注意:Safari对此不太好。)我正在使用库html2canvas和jsPDF

这是我的代码:

$('#dte_onPrintClick').on('click', function(e) {
        e.preventDefault();
        html2canvas($("#canvas_dte"), {
            onrendered: function(canvas) {
                var imgData = canvas.toDataURL(
                    'image/png');
                var doc = new jsPDF('p', 'mm', paperInfo.paperSize);
                doc.addImage(imgData, 'PNG', 10, 10);
                doc.save('output-file.pdf');
            }
        });
    });

现在很明显,你正在从pdf转换为pdf,但我猜doc = new jsPDF(), doc.addXXX, doc.save(filename.pdf)可能对你有一些好处。

更新:如果没有pdf提要的具体内容,我不太确定如何提供更多帮助,只是说你想做的事情应该在大多数现代浏览器上都可以实现。您可以通过上面列出的.save()调用(在许多浏览器中,但不是所有浏览器中),将pdf内容保存为一个没有OUT用户输入的文件。

如果你正在寻找一个破解方法,你可以捕获pdf流,将其保存为隐藏div中的图像,然后将其转换回pdf并执行doc.save()函数。您必须添加较长的时间延迟,以确保提要完成、图像填充等,但这应该是可行的。

我确实在jsPDF库中看到了一个putstream()函数、getBlob()函数和getArrayBuffer()函数,所以其中一个函数很可能会直接帮助捕获pdf并生成存储的文档,所有这些都是通过JavaScript动态生成的。

编辑#2:这是立即下载,无用户交互的jsfiddle页面。事实上,我很惊讶这样做,但就这样吧。我同意,通常文件保存需要用户干预,但这种下载方式确实有效。坦率地说,我对此也感到惊讶。