好的,我已经在互联网上搜寻了解决方案,但是找不到任何东西。我试图找到一种方法将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>
答案 0 :(得分:1)
阅读本文:Convert HTML/CSS Content to a Sleek Multiple Page PDF File Using jsPDF JavaScript library。提供的脚本允许您将任何HTML元素转换为PDF。我对generate()
函数进行了一些修改,以便它采用任何HTML元素ID名称并将其导出为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');
};
它在Chrome上可100%正常运行,但我不确定其他浏览器。
答案 1 :(得分:0)
这里有一个疯狂的猜测,但是我认为这与来自其他域的iframe受保护这一事实有关。 如果有原因,请阅读“跨域策略”,我敢肯定您不能很轻松地解决它。
答案 2 :(得分:0)
尝试
var source = window.document.getElementsByTagName(tagName)[0];
代替
source = $('#frame')[0];
答案 3 :(得分:0)
尝试此解决方案。
<button id="generatePDF">Generate PDF</button>
<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>
$( '#generatePDF' ).click( function()
{
var pdf = new jsPDF('a4');
pdf.text("Some text inside PDF", 10, 10);
$( '#docpdf' ).attr('src', pdf.output('datauristring'));
});
</script>
<iframe id="docpdf" style="background-color:#EEE; heigth:400px;">
PDF goes here
</iframe>