Использование jsPDF для создания PDF из iframe - PullRequest
0 голосов
/ 02 ноября 2018

Хорошо, я искал интернет для решения этой проблемы, но я ничего не могу найти. Я пытаюсь найти способ сохранить содержимое iframe в формате PDF. Я всегда сталкиваюсь с проблемой, когда PDF просто пуст. Кажется, что jsPDF - единственный путь. Мне интересно, причина, по которой это не работает, из-за функции fromHTML (). Я не уверен. Если бы кто-нибудь из вас нашел решение, я был бы очень признателен !!

Вот пример кода, который вы можете попробовать в файле HTML:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript"></script>
<script>
    function demoFromHTML() {
    var pdf = new jsPDF('p', 'pt', 'letter');
    source = $('#frame')[0];
    specialElementHandlers = {
        '#bypassme': function (element, renderer) {
            return true
        }
    };
    margins = {
        top: 80,
        bottom: 60,
        left: 40,
        width: 522
    };
    pdf.fromHTML(
    source,
    margins.left,
    margins.top, {
        'width': margins.width,
        'elementHandlers': specialElementHandlers
    },

    function (dispose) {
        pdf.save('Test.pdf');
    }, margins);
}
</script>
<button onclick="javascript:demoFromHTML();">PDF</button>
<iframe id="frame" src='https://wikipedia.org/wiki/Main_Page' style="width: 75%;height: 75%;"></iframe>

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

1001 * попробовать *

    var source = window.document.getElementsByTagName(tagName)[0];

вместо

 source = $('#frame')[0];
0 голосов
/ 02 ноября 2018

Просмотрите эту статью: Преобразование содержимого HTML / CSS в гладкий многостраничный файл PDF с использованием библиотеки JavaScript jsPDF . Предоставленный скрипт позволяет конвертировать любой элемент HTML в PDF. Я слегка изменил функцию generate(), чтобы она взяла любое имя идентификатора HTML-элемента и экспортировала его как PDF файл:

generate = function(doc)
{
	var pdf = new jsPDF('p', 'pt', 'a4');
	pdf.setFontSize(18);
	pdf.fromHTML(document.getElementById(doc), 
		margins.left, // x coord
		margins.top,
		{
			// y coord
			width: margins.width// max width of content on PDF
		},function(dispose) {
			headerFooterFormatting(pdf, pdf.internal.getNumberOfPages());
		}, 
		margins);
		
	var iframe = document.createElement('iframe');
	iframe.setAttribute('style','position:absolute;right:0; top:0; bottom:0; height:100%; width:650px; padding:20px;');
	document.body.appendChild(iframe);
	
	iframe.src = pdf.output('datauristring');
};

Он работает на 100% в Chrome, но я не уверен в других браузерах.

0 голосов
/ 02 ноября 2018

Дикая догадка здесь, но я думаю, что это связано с тем фактом, что Iframes из других доменов защищены. Прочтите «междоменную политику», если это является причиной, я уверен, что вы не сможете обойти ее очень легко.

...