【问题标题】:Save pdf directly to file using jspdf使用jspdf将pdf直接保存到文件
【发布时间】:2014-08-10 21:49:16
【问题描述】:

我的脚本是 Firefox 插件,因此可以访问敏感代码,例如访问文件系统等。
我显示了一个 Panel 填充了 html 内容,我可以使用 postMessage 轻松地将输入发送到插件代码
当我运行下面的代码时,会生成 pdf 并显示下载提示,因此我可以选择目录来放置文件,但我想使用 javascript 将文件直接保存到后台文件中,而不显示下载提示。
类似于:doc.saveToFile("/path/to/file") // custom method in my addon code
使用jsPDF 对象可以做到这一点吗?

<html>

    <head>
        <script type='text/javascript' src='jspdf.source.js'></script>
    </head>

    <body>
        Hey
        <script>
        var doc = new jsPDF();
        doc.text(20, 20, 'Hello bob');
        doc.save('test.pdf');
        </script>

    </body>
</html>

【问题讨论】:

  • 这也可以在chrome完成吗?

标签: javascript firefox pdf firefox-addon jspdf


【解决方案1】:

这应该适用于您的 Firefox 插件代码:

const { OS } = require("resource://gre/modules/osfile.jsm");

var pathToFile = OS.Path.join("path", "to", "file.pdf");

var doc = new jsPDF();
doc.text(20, 20, 'Hello bob');

var ab = doc.output('arraybuffer');
var u8 = new Uint8Array(ab);

OS.File.writeAtomic(pathToFile, u8).then(
   function()
   {
       alert('File written!');
   },
   function(e)
   {
       alert('Error ' + e);
   }
);

如果您使用的不是附加 SDK,而是普通扩展,请将第一行替换为:

const { OS } = Components.utils.import("resource://gre/modules/osfile.jsm", {});

查看此内容以获取有关 OS.File 的更多信息:https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread

【讨论】:

    【解决方案2】:

    但是为什么你不想使用你的插件呢?我认为您无法使用 jsPDF 或 pdf.js(http://mozilla.github.io/pdf.js/,这是一个 mozilla 项目)访问文件系统或类似的东西,您将能够打印正在显示在窗口上的内容,但不确定您是否可以访问一些本地文件。

    【讨论】:

    • 不确定您的建议。 Addon sdk 可以访问本地文件系统,所以我希望能够在插件代码中说doc.saveToFile("/path/to/file")
    • 对不起,我以为您想更改 pdf.js 的附加组件。不确定你是否能够成功。无论如何,这些实验性库的问题是它们不能在所有浏览器上工作,您是否也需要 IE 中的支持?
    • 不,我正在制作一个Firefox 插件。不需要支持任何其他浏览器。
    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多