【问题标题】:Streamed binary to PDF - Javascript将二进制流式传输到 PDF - Javascript
【发布时间】:2016-02-11 01:43:34
【问题描述】:

请求网络服务后,我得到以下答案(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

【问题讨论】:

  • 您可能想要更改响应的标题,因此浏览器会显示“保存”对话框。
  • 我需要的是直接将文件保存在存储中,无需在浏览器中打开对话框!
  • 这是不可能的。您不能在没有用户确认的情况下强制浏览器保存项目。
  • 这句话是什么意思? “但我需要能够保存文档(在计算机存储中),而不是在新选项卡中打开它。”我不明白。您是要保存文件还是在新选项卡中显示它?你的话不清楚。
  • 我需要保存文件,不能在浏览器中打开!

标签: javascript jquery pdf binary


【解决方案1】:

我在http://dogfeatherdesign.com/ttn_js 的网站上做了一些类似的事情,除了当用户点击打印按钮时,我将从 Canvas 转到 pdf 文件。根据操作系统和浏览器,下载会自动进行。 (注意:Safari 不适合这个。)我正在使用库 html2canvasjsPDF

这是我的代码:

$('#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 内容保存为没有用户输入的文件。

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

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

编辑#2:立即下载,no user interaction jsfiddle page。我真的很惊讶这会这样工作,但就这样吧。我同意,通常文件保存需要用户干预,但这个下载的东西就可以了。坦率地说,我对此也感到惊讶。

【讨论】:

  • 如果没有 .save 函数的实现,这段代码真的毫无用处。基本上,这并不能回答问题。
  • 这两个都是 github 上的开源库。实现代码就在那里。我糊涂了。您不喜欢 .save 功能(但这正是布鲁诺所要求的......)
  • 您甚至没有链接到库。即使那样,链接库也可能随着时间的推移而被删除,从而使答案无效。回答问题所需的所有代码应包含在答案本身中。另外:“您可以在没有用户输入的情况下将 pdf 内容保存为文件” - 不,这是不可能的。保存只能由用户发起。无论是点击链接,还是保存对话框。
  • 呃没有。来自本网站上的“如何回答问题...”提示和指南:Read the question carefully. What, specifically, is the question asking for? Make sure your answer provides that – or a viable alternative. The answer can be “don’t do that”, but it should also include “try this instead”. ANY ANSWER THAT GETS THE ASKER GOING IN THE RIGHT DIRECTION IS HELPFUL, but do try to mention any limitations, assumptions or simplifications in your answer. Brevity is acceptable, but fuller explanations are better.(已添加重点。)是“保存”===“下载”吗??
  • 为什么将 jsPDF 称为“PDF.js”?
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 2012-08-27
  • 2016-12-24
  • 2014-09-25
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2013-04-18
相关资源
最近更新 更多