jsPDF создать PDF из .html и открыть в новом окне

Я пытаюсь использовать jsPDF для преобразования файла .html в PDF и открытия его в новом окне.

Я создаю PDF следующим образом:

function PDFFromHTML() {
    var doc = new jsPDF();

    // We'll make our own renderer to skip this editor
    var specialElementHandlers = {
            '#editor': function(element, renderer){
                    return true;
            }
    };

    // All units are in the set measurement for the document
    // This can be changed to "pt" (points), "mm" (Default), "cm", "in"
    doc.fromHTML('ticket.html', 15, 15, {
            'width': 170, 
            'elementHandlers': specialElementHandlers
    });
}

Мне нужно что-то вроде window.open, чтобы открыть этот файл PDF в новом окне, но я не могу найти способ сделать это.

С уважением,


person Egidi    schedule 06.10.2014    source источник
comment
я понимаю, что doc.fromHTML('ticket.html' тоже не работает... этот jsPDF довольно сложен в использовании.. мне просто нужно преобразовать мой .html в PDF и открыть его в новом окне   -  person Egidi    schedule 06.10.2014


Ответы (1)


Насколько я могу судить, документации по API не так много, кроме непосредственного просмотра коды и существующие примеры.

Я могу открыть файл PDF в новом окне, добавив вызов output API после doc.fromHTML(..), указав аргумент dataurlnewwindow следующим образом:

doc.output('dataurlnewwindow');

Что касается того, почему doc.fromHTML('ticket.html') не работает, снова обратитесь к code, аргумент source должен быть:

либо строка в формате HTML, либо ссылка на фактический элемент DOM.

Поэтому вам, возможно, придется использовать метод jquery $.get() для загрузки содержимого ticket.html. По сути, что-то вроде:

$.get('ticket.html', function(content){
    doc.fromHTML(content), 15, 15, {'width': 170, 'elementHandlers': specialElementHandlers});
    doc.output('dataurlnewwindow');
}, 'html');
person ivan.sim    schedule 06.10.2014
comment
Если вам нравится этот ответ, можете ли вы принять его и/или проголосовать за него? Спасибо. - person ivan.sim; 06.10.2014
comment
помог мне правильно загрузить ticket.html, но я до сих пор не знаю, как открыть этот объект документа в формате PDF в новом окне - person Egidi; 07.10.2014
comment
Чтобы открыть объект документа в новом окне, просто добавьте doc.output('dataurlnewwindow'); к своим кодам; после doc.fromHTML(). - person ivan.sim; 07.10.2014
comment
мммм..., который открывает пустой PDF-файл со словом undefined в середине пустого PDF-файла... я думаю, что $('#ticket-content').load('ticket.html'); не выполняет свою работу... - person Egidi; 07.10.2014
comment
Здесь важно помнить, что $.load()$.get()) являются асинхронными вызовами AJAX. Чтобы упростить ситуацию, я обновил свой ответ, чтобы использовать $.get(), и переместил коды, чтобы открыть новое окно функции обратного вызова. Это обеспечит открытие нового окна ПОСЛЕ загрузки ticket.html. - person ivan.sim; 07.10.2014
comment
мм, отличная работа, но я все еще получаю пустой PDF-файл, хотя теперь я не вижу никаких неопределенных значений. Насколько я понимаю, этот JS кодирует html в URL-адрес base64 и открывает его в новой вкладке. Теперь проблема в том, что моему html требуется более длинная строка base64, чем максимально разрешенная в URL-адресе, поэтому теперь я получаю эти ошибки в консоли JS: jsPDF PubSub Error Превышен максимальный размер стека вызовов RangeError, jsPDF Предупреждение: проблемы с рендерингом? обеспечить обратный вызов fromHTML! - person Egidi; 07.10.2014
comment
ну, я не подаю в суд, если это проблема, если я doc.save('ticket.pdf'); вместо doc.output('dataurlnewwindow'); я также сохраняю пустой PDF. - person Egidi; 07.10.2014
comment
Не уверен, что это будет иметь значение, какой браузер вы используете? Можете ли вы попробовать с FF, если вы этого не сделали? - person ivan.sim; 07.10.2014
comment
Я не могу воспроизвести вашу проблему. Мои коды без проблем работают на jsfiddle с FF. В Chrome PDF-файл будет отображаться правильно, только если я скопирую и вставлю URL-адрес на другую вкладку, даже после того, как я отключу подключаемый модуль Chrome PDF Viewer по умолчанию и включу только подключаемый модуль Adobe Reader. - person ivan.sim; 08.10.2014
comment
Хорошо, чувак, спасибо за твое время. Я попробую другие решения и посмотрю, получу ли я это - person Egidi; 08.10.2014