Сохранить pdf прямо в файл с помощью jspdf

Мой скрипт является надстройкой 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>

person bobbyrne01    schedule 10.08.2014    source источник
comment
Можно ли это сделать и в chrome?   -  person JPaulPunzalan    schedule 20.05.2017


Ответы (2)


Это должно работать с кодом надстройки 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);
   }
);

Если вы используете не Add-On 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

person diegocr    schedule 11.08.2014

Но почему ты не хочешь использовать свой аддон? Я думаю, что вы не сможете получить доступ к файловой системе или тому подобному с помощью jsPDF или pdf.js (http://mozilla.github.io/pdf.js/, который является проектом Mozilla), вы сможете распечатать то, что отображается в окне, но не уверены, что у вас есть доступ к некоторым локальные файлы.

person facundofarias    schedule 10.08.2014
comment
Не уверен, что вы предлагаете. Addon sdk имеет доступ к локальной файловой системе, поэтому я хотел бы иметь возможность указать doc.saveToFile("/path/to/file") в коде аддона. - person bobbyrne01; 11.08.2014
comment
извините, я думал, что вы хотите изменить свою надстройку для pdf.js. Не уверен, что у вас получится. В любом случае, проблема с этими экспериментальными библиотеками в том, что они не будут работать во всех браузерах, вам нужна поддержка, например, и в IE? - person facundofarias; 11.08.2014
comment
Нет, я делаю Firefox аддон. Не нужно поддерживать какие-либо другие браузеры. - person bobbyrne01; 11.08.2014